Guten Tag, Habr!Ich beginne den Morgen oft mit einem Blick auf das Habr und entscheide mich schließlich, zu diesem Prozess des Lernens interessanter Dinge beizutragen. Wenn alles gut geht, ist dies mein erster Artikel aus dem Zyklus der Verwendung der
GO- Sprache auf Produktionssystemen. Ich möchte Ihnen einige Feinheiten beim Erstellen von Anwendungen und Servern, die Bequemlichkeit der Sprache und die Geschwindigkeit der Entwicklung erläutern. Vielleicht erscheint dieser Artikel für Profis langweilig und nicht interessant, aber beim Lesen der Literatur fand ich kein allgemeines Bild zur Lösung von Produktionsproblemen. Obwohl die meisten Aufgaben auf die gleiche Weise gelöst werden. In diesem Artikel werde ich die allgemeinen Prinzipien zum Aufbau eines Servers beschreiben und als Beispiel den Server verwenden, um die Postleitzahlen der russischen Post zu validieren und anzuzeigen. Dieser Artikel behandelt allgemeinere methodische Probleme und Feinheiten, auf die ich beim Erstellen dieses Systems gestoßen bin. Ich werde die allgemeinen Einstellungen nicht beschreiben, es gibt viele davon im Netzwerk. Ich möchte mich nur auf die kleinen Dinge konzentrieren, die den Start des Projekts verhindert haben.

Anstatt mitzumachen
Beim Lesen von Habr stand ich ziemlich oft vor der Aufgabe der Validierung - der Überprüfung der Richtigkeit der Benutzereingabe von Informationen. Jeder Autor hat dieses Problem auf seine Weise gelöst. Ich habe einen externen Dienst verwendet oder meinen Server geschrieben. Ich schlage eine andere Lösung für dieses Problem vor - die Erstellung eines Verzeichnisdienstes. Verzeichnisse sind Server, die Informationen einer bestimmten Richtung enthalten und in ein separates, unabhängiges Subsystem unterteilt werden können. In der Regel werden Verzeichnisse verwendet, um den Benutzer beim Ausfüllen und Überprüfen der eingegebenen Informationen zu unterstützen. Ein Beispiel für solche Verzeichnisse sind die Dienste regionaler Anfragen, Stadtanfragen, KLADR, Postleitzahlen und GAIS-Verzeichnisse (State Automated Information Systems). Fast alle vorhandenen Systeme tauschen REST-Daten entweder mit json oder mit soap aus. Ich werde versuchen, eine Vorlage für die Entwicklung solcher Verzeichnisse zu erstellen, mit der solche Systeme schnell erstellt werden. Und github die Quellen meines internen Projekts auf.
Die Wahl der Systeme. Es stellt sich sofort die Frage, warum GO? Warum Linux? Und welches Linux?
Und so fangen wir in der richtigen Reihenfolge an. Unser derzeitiges System basiert auf Produkten von 1C, nämlich dem BUS und dem Unternehmensportal. Um das Betriebssystem zu vereinheitlichen, haben wir aus der empfohlenen 1C-Installation ausgewählt, nämlich Linux OS CentOS. Auf diesem Betriebssystem werden Skripts zum Starten der 1C-Webumgebung ausgeführt. Windows-Betriebssystem wurde nicht berücksichtigt. Ich kann nicht sagen, dass mir die Wahl gefällt, ich würde Debian wählen, aber es ist passiert. Wir brauchten eine Vereinheitlichung, weil wir historisch gesehen ein großes Zoo-Betriebssystem haben, verschiedene Builds von OS Linux, OS FreeBSD, OS VxWorks. Und meiner Meinung nach das schnellste Linux CRUX OS.
Wie bei vielen Projekten hat sich das auf 1C erstellte System zu einem großen Portal entwickelt, und es wurde notwendig, das System zu isolieren und / oder das System durch verschiedene Dienste zu ergänzen - Nachschlagewerke. Bei der Analyse der Angebote und Funktionen bereits erstellter Dienste sowie unserer Anforderungen an diese Verzeichnisse kamen wir zu dem Schluss, dass das Verzeichnis:
- Autonomer Serverdienst;
- Der Datenaustausch erfolgt über REST.
- Hat die Fähigkeit, horizontal zu skalieren;
- Daten müssen schnell, wenn auch redundant, auf 1C-Produkten verarbeitet werden.
- Schnelle Wiederherstellung der Logik basierend auf neuen geschäftlichen Herausforderungen;
Nach den oben genannten Kriterien und der einfachen Eingabe wurde Go für das Schreiben von Nachschlagewerken ausgewählt. Optional:
- Gehen Sie mit einem Compiler in die Sprache und ermöglichen Sie das Einfügen von Codefragmenten in C;
- Das Programm ist eine einzelne Datei mit allen Bibliotheken (es gibt kein Problem mit der Kompatibilität der Bibliotheken nach dem Zusammenbau).
- große Community (viele Beispiele und schlüsselfertige Lösungen);
Das heißt, Go eignet sich gut zum Erstellen von Verzeichnissen. Ich möchte hinzufügen, dass PHP und Go ein bisschen ähnlich sind, sodass Sie Systeme unterstützen können, die in diesen Sprachen geschrieben sind. Go hat auch bereits eine große Anzahl von Lösungen, mit denen Sie diese Lösungen schnell für Ihre Aufgaben zusammenstellen können, dh wie Sie ein Modell des Hauses aus den Würfeln des Designers zusammensetzen. Und so lasst uns weiter üben.
GO Installieren und durchsuchen Sie Bibliotheken oder Lösungen
Um zu installieren, müssen Sie das Archiv von der
Download-Seite herunterladen und in den Installationsordner entpacken. Ich werde
/ usr / local verwenden .
wget https://dl.google.com/go/go1.12.1.linux-amd64.tar.gz tar -C /usr/local -xvzf go1.12.1.linux-amd64.tar.gz
Ich möchte darauf achten, dass Go in zwei Kategorien unterteilt ist: die erste - die Kompilierungssprache selbst und die in der Assembly enthaltenen Bibliotheken (
GOROOT ), die zweite - dies sind zusätzliche Bibliotheken, die Sie installiert haben und in denen Sie Ihr Projekt erstellen (
GOPATH ). Wenn ich die Umgebung
einrichte und den Entwicklungsordner vorbereite, verwende ich
/ home / gouser / . Fügen Sie
/ etc / profile oder Ihrem benutzerdefinierten
.profile hinzu .
export GOPATH=/home/gouser export GOROOT= /user/local/go/ export PATH=$PATH:/usr/local/go/bin
Vorbereiten eines Ordners für Ihr Projekt:
mkdir -p /home/gouser/{bin,pkg,src}
Dann ist alles einfach für unser Projekt, erstellen Sie einen Ordner in src, erstellen Sie Dateien mit der Erweiterung go und kompilieren Sie das Projekt:
go build
Empfehlungen zum Erstellen eines Projekts. Allgemeine Empfehlungen
- Für ein Github-Projekt ist es einfacher, einen Ordner für das Projekt src / github.com / <Projektname> zu erstellen.
- Wenn Sie das Projekt als Paket entwerfen und jede Prozedur kommentieren, können Sie sehr bequem eine vorgefertigte Programmdokumentation in godoc erhalten.
- Nehmen Sie globale Variablen in einem separaten Modul heraus und verbinden Sie sie bei Bedarf (ähnelt nur einer Vorlage).
Sowohl vorgefertigte Beispiele als auch Bibliotheken finden Sie unter
libs.garden . Installation gefundener Beispiele
go get < > , github.com/labstack/echo
Fahren wir nach der Installation von
Go mit einem Beispiel fort. Sie können es herunterladen und zur Kompilierung installieren, indem Sie die folgenden Befehle verwenden:
go get github.com/julienschmidt/httprouter go get github.com/LindsayBradford/go-dbf/godbf go get github.com/go-sql-driver/mysql go get github.com/julienschmidt/httprouter cd /home/gouser/go/src/github.com/ git clone https://github.com/Theo730/postcode.git postcode
Erklärung des Problems
Es ist notwendig, ein Verzeichnis für die Arbeit mit Postleitzahlen per russischer Post zu erstellen, das die folgenden Probleme löst:
- Validierung von Postleitzahlen;
- Die Möglichkeit, eine Liste aller Buchhaltungsobjekte (Regionen, Städte usw.) abzurufen;
- Abrufen aller Indizes im Abrechnungsobjekt von Städten, Regionen, Regionen ...
- Von oben, um Daten über REST in Form von json auszutauschen.
Aufgabenforschung
Zuerst müssen Sie die Datenbank initialisieren und dann einen Anforderungsserver für diese Datenbank erstellen. Benötigen Sie eine Postleitzahlendatenbank. Die Suche ist
vinfo.russianpost.ru/database/ops.html . Basis in FoxPro und im Zip-Archiv. Die folgenden Abrechnungsobjekte befinden sich in der Datenbank:
- Region
- autonomes obla;
- Bezirk;
- Ortschaft;
- PLZ.
Zur Initialisierung auf
libs.garden finden wir Komponenten und Beispiele für die Arbeit mit der Datenbank und zip. Wir nehmen
httprouter als Anforderungsrouter. Wir verbinden uns mit dem Projekt.
Bei der Untersuchung der Datenbankdatei wurde festgestellt, dass
nicht alle Abrechnungsobjekte angegeben sind, dh , dass im Beispiel Nullwerte vorhanden sind.
Lösung und Implementierung
Ich habe Buchhaltungsobjekte in einer Hierarchie eingerichtet, wenn die Datenbank initialisiert wird. Wenn das Buchhaltungsobjekt Null ist, wird der Name vom übergeordneten Objekt übernommen. Serverideologie - Anforderungen kommen an
main (hier der Anforderungsrouter) und werden an
Handler umgeleitet (hier alle Datenprüfungen, Konvertierungen usw.). Von den
Handlern werden alle Anforderungen an die
Datenbank und Berechnungen ausgeführt, und die Handler führen die Rücknahme der empfangenen Informationen durch. Eine solche
Zerlegung ermöglicht es Ihnen, Abfragen in der Datenbank, Berechnungen, Überprüfung der eingegebenen Informationen und gefundene Ausgaben zu trennen. Im Prinzip alles.
Anstelle einer Summe
Die Funktionsreferenz erwies sich als komplizierter als
KLADR . Sie können damit nicht nur einen Validator oder ein Verzeichnis auf der Site erstellen, sondern auch einen Algorithmus für das regionale Geschäft erstellen.
Wenn es ein verteiltes regionales Geschäft gibt, das Dienstleistungen oder Waren verkauft. Händler in den Regionen sind auf dem Portal registriert, geben den Bereich an, in dem sie die Dienstleistung erbringen oder die Waren verkaufen, und ihnen wird eine Reihe von Postleitzahlen zugewiesen. Wenn der Kunde eine Dienstleistung oder ein Produkt anfordert, gibt er die Postleitzahl an und seine Bewerbung wird an seinen regionalen Händler gesendet (hier können Sie einen komplexen Algorithmus erstellen). Eine Liste der
REST- Anforderungen finden
Sie in der Projektdokumentation auf
github .
Und eine kleine Bitrix
Diese Referenz kann mit jedem Projekt oder Framework verbunden werden, aber da wir Bitrix haben, habe ich ein Modul eingefügt, um den Webformularen von Standardkomponenten einen Validator hinzuzufügen.
Die PS Server-Installation ist speziell in drei Phasen unterteilt. Dies geschieht aufgrund der Veralterung der Datenbank von der Website vinfo.russianpost.ru und aufgrund von Lizenzbeschränkungen. Die Datenbank selbst ist nicht mein Eigentum. Wenn Sie sie verwenden, akzeptieren Sie die Lizenzierungsrichtlinie über der angekündigten Site.
PSS- Server, die in meinen Projekten für das Unternehmenssegment und unter den Bedingungen erstellt wurden, sollten nicht online gehen. Der Code kann für Ihre spezifischen Aufgaben geändert werden. Wir verwenden keinen externen Zugriff für unsere Projekte. Die folgenden Projekte, die ich beschreiben möchte, sind ein vollwertiger CLADR und ein Stream-Funkprotokollanalysator. Als nächstes folgt das Sternchen Bitrix24 +. Bitte kommentieren Sie, wer interessanter ist.