Auswahl der Architektur einer Lösung für einen Marktplatz für Frachtdienste

gorafreight.com ist der erste Dienst in Russland für die Online-Kostenberechnung und Bestellung von Luft-, Auto- und Containertransporten sowie für Ladungen mit allen Transportmitteln, einschließlich der Preise von Tür zu Tür.


Bild

Über die Geschichte des Agorafreight-Projekts berichtet der Projektmanager Reksoft (Teil des GC "Technoserv") Dmitry Dolgikh.


Das russische Startup Agorafreight ist ein Marktplatz für den internationalen Frachttransport, auf dem die Kosten für Dienstleistungen für den Transport von Waren berechnet werden, die von Speditionen und Spediteuren bereitgestellt werden. Das System ist eine Verbindung zwischen dem Transportkunden (Kunden), den Transportunternehmen und den Spediteuren. Mit dem System können Sie die Route, Unternehmen und Dienstleistungen vorab auswählen und die Transportkosten berechnen.


Das Projekt selbst ist sehr interessant und ehrgeizig. Zumindest insofern interessant, als es in Russland noch keine solche Lösung gibt. Das Wort "international" gab dem Projekt Mehrdeutigkeit - einerseits wurden die Ambitionen des Projekts in Bezug auf die Skalierung auf die ganze Welt ausgedrückt, und andererseits haben wir verstanden, dass das Projekt den Weg in einem ziemlich wettbewerbsorientierten Umfeld ebnen würde. Teil einer solchen Umgebung ist immer die Fähigkeit des Projekts, schnell auf Änderungen und unerwartete Umkehrungen der Anforderungen zu reagieren. All dies setzte sofort ein gewisses Maß an Verantwortung bei der Auswahl der Lösungsarchitektur voraus, zumal nicht genügend Zeit für die Implementierung der ersten Version des Produkts vorhanden war.


Zuerst musste ich eine Datenbank oder vielmehr ein Datenverwaltungssystem auswählen. Die Wahl fiel auf MongoDB - eine dokumentenorientierte NoSQL-Datenbank mit Unterstützung für Geo-Abfragen, Volltextsuche in 15 Sprachen und einer hierarchischen Datenstruktur. MongoDB ist kostenlos unter der GNU 3.0-Lizenz erhältlich. Es lässt sich horizontal skalieren und kann als Dateispeicher mit Lastenausgleich und Datenreplikation verwendet werden.
Vorteile


  1. Hierarchie der Daten - die Fähigkeit, das Schema und die Anforderungen für hierarchische Daten (Mehrsprachigkeit, Tarife usw.) zu optimieren.
  2. Schemaloses, nicht starres Datenschema - kostengünstige und schnelle Änderungen am Datenbankschema, für die keine Migrationen erforderlich sind.
  3. Skalierbar - es ist billiger als relationale Datenbanken, es erfordert keine Verarbeitung des Quellcodes oder das Umschreiben von Datenbankabfragen.
  4. Unterstützung für Geo-Abfragen und Indizes, Volltextsuche.
  5. Ein Open Source Open Source System.
  6. Es besteht die Möglichkeit, bezahlten Support von den Autoren von MongoDB, Enterprise Support, zu kaufen.
  7. MongoDB kann als Dateispeicher mit Lastenausgleich und Datenreplikation verwendet werden.
  8. Mit MongoDB ist es einfacher und schneller, Anwendungen und Dienste zu prototypisieren.

Nachteile
1. Join'ov wird nicht unterstützt. Dieses Problem wird jedoch durch die Datenhierarchie oder die MapReduce-Funktion (jedoch nicht zu 100%) gelöst.


  1. Es gibt keine Transaktionen, es gibt Atomizität auf Dokumentebene, Sie können die Transaktionsemulation implementieren.
  2. Konsistenz auf Datenbankebene ist nicht implementiert, dies ist im Quellcode der Anwendung erforderlich.
  3. Es gibt keine Trigger wie in klassischen Datenbanken, aber diese Funktionalität wird häufig nicht verwendet.

Eigenschaften


  1. MongoDB erfordert zu Beginn keine Administration und kurz danach ist eine Optimierung für die Skalierung erforderlich.
  2. Es gibt Hosting-Anbieter, die MongoDB in der Cloud im richtigen Maßstab bereitstellen können. Solche Dienste werden mit MySQL oder PostgreSQL selten angeboten.
  3. Derzeit führend unter den NoSQL-Data Warehouses.
  4. Es verfügt über Tools zum Erstellen von MapReduce-Abfragen, mit denen komplexe Berichte erstellt werden können, jedoch nicht in Echtzeit.
  5. Die kritischen Mängel dieser Datenbank wurden mit der Veröffentlichung der 3. Version behoben.

Das Team entschied sich aufgrund der Analyse des Projekts für MongoDB. Zunächst war klar, dass das Projekt durch eine hohe Wahrscheinlichkeit der Variabilität im Hinblick auf die Festlegung technischer Spezifikationen auf der Grundlage von Geschäftsprozessen gekennzeichnet ist. Dies ist auf die Tatsache zurückzuführen, dass es sich bei dem Projekt um ein Startup handelt. Daher ist es sehr wahrscheinlich, dass sich viele Geschäftsprozesse während der Implementierung des Projekts und seiner Anpassung an die Realitäten der Marktanforderungen ändern. Um die Flexibilität von Änderungen zu gewährleisten und die internen Kosten für die Änderung des Datenmodells zu senken sowie die eigenen Risiken zu verringern, wurde eine nicht relationale Datenbank gewählt. Einer der Marktführer in diesem Segment ist nur MongoDB.


Diese Wahl erwies sich, wie die nachfolgende Übung gezeigt hat, als richtig. Alles verlief wie erwartet - ständige Änderungen in der Produktion, Verbesserungen gegenüber der Serie „aber wir wollten es trotzdem implementieren“ und all dies erforderte eine flexible und schnelle Änderung des Datenmodells. Mit MongoDB konnte das Projekt nicht nur angemessen auf Änderungen reagieren, sondern auch nicht aus dem Budget "herausfallen". Wie Sie wissen, führen Mängel in der Entwurfsphase zu einer erheblichen Überarbeitung der Implementierung und zu einem erhöhten Risiko, dass die Fristen und das Budget des Projekts nicht eingehalten werden. Alle diese Risiken wurden minimiert, auch aufgrund der ausgewählten Architektur.


Die zweite architektonische Wahl war die ReactJS-Bibliothek zur Implementierung des Frontends. Es ist die Popularität der Technologie und der großen Community, die es möglich gemacht hat, sich für ReactJS zu entscheiden.


Vorteile dieses Rahmens:


  1. Eines der beliebtesten Frameworks für die Kundenentwicklung. Es hat eine große Community, es gibt viele Beispiele für seine Verwendung, gute Dokumentation.
  2. Die Entwickler unseres Unternehmens, die Erfahrung mit ihm haben, sprechen gut von ihm.
  3. Flexibler in Bezug auf die Entwicklung im Vergleich zum Beispiel zu Angular.
  4. Es unterstützt das sogenannte Server-Rendering, mit dem Suchmaschinen Seiten einer Anwendung indizieren können.
  5. Geeignet für Anwendungen mit einer großen Anzahl dynamischer Seiten. Wir haben viele solcher Seiten (Eingabeformulare für verschiedene Arten von Tarifen, Zuschlägen, Provisionen; Formulare zur Berechnung der Transportkosten usw.)

Infolgedessen ermöglichte ReactJS das flexible und dynamische Ändern der Frontend-Teile vor dem Hintergrund sich ändernder Anforderungen und Verbesserungen.


Während des Projekts mussten wir zusätzlich zur Entwicklung die algorithmischen und Optimierungsprobleme bei der Erstellung des optimalen Transportplans lösen, Hunderte von Optionen für Lieferwege vergleichen und erstellen und die optimalsten Empfehlungen auswählen und formulieren. In diesem Sinne hat das Projekt ein hohes Entwicklungspotential für auf künstlicher Intelligenz basierende Empfehlungssysteme.
Im Allgemeinen war es trotz aller Schwierigkeiten, die während der Entwicklung des Projekts auftraten, interessant, moderne und vielversprechende Technologien für die Entwicklung von Informationssystemen für den internationalen Verkehrsmarkt einzusetzen.


Derzeit enthält das System Zehntausende aktueller Tarife für den See-, Straßen- und Luftverkehr. Die Abdeckung umfasst China, Vietnam, Südkorea, die EU-Länder und Russland und plant eine Ausweitung auf andere Länder. Jetzt arbeiten bereits Dutzende Spediteure aus China und der Russischen Föderation mit dem System.


Bild

Source: https://habr.com/ru/post/de433202/


All Articles