Choisir l'architecture d'une solution pour une place de marché des services de fret

Agrafreight.com est le premier service en Russie pour le calcul des coûts en ligne et la commande de transport aérien, automobile et de conteneurs, de cargaisons par tous les moyens de transport, y compris les tarifs porte-à-porte.


image

À propos de l'histoire du projet Agorafreight, raconte le chef de projet Reksoft (faisant partie du GC "Technoserv") Dmitry Dolgikh.


La startup russe Agorafreight est une place de marché pour le transport international de marchandises, conçue pour calculer le coût des services de transport de marchandises fournis par les sociétés de transport et les transporteurs. Le système est un lien entre le client du transport (client), les transporteurs et les transitaires. Le système vous permet de présélectionner l'itinéraire, les entreprises et les services, ainsi que de calculer le coût du transport.


Le projet lui-même est très intéressant et ambitieux. Du moins intéressant dans la mesure où il n'existe pas encore de solution de ce type en Russie. Le mot "international" a donné une ambiguïté au projet - d'une part, les ambitions du projet étaient exprimées en termes d'extension à l'échelle mondiale, et d'autre part, nous avons compris que le projet ouvrirait la voie dans un environnement assez compétitif. Une partie d'un tel environnement est toujours la capacité du projet à répondre rapidement aux changements et aux changements inattendus en termes d'exigences. Tout cela a immédiatement mis un certain niveau de responsabilité dans le choix de l'architecture de la solution, d'autant plus qu'il n'y avait pas assez de temps pour implémenter la première version du produit.


J'ai d'abord dû choisir une base de données, ou plutôt un système de gestion des données. Le choix s'est porté sur MongoDB - une base de données orientée documents NoSQL prenant en charge les géo-requêtes, la recherche en texte intégral en 15 langues, avec une structure de données hiérarchique. MongoDB est disponible gratuitement sous la licence GNU 3.0. Il évolue horizontalement et peut être utilisé comme stockage de fichiers avec équilibrage de charge et réplication de données.
Avantages


  1. Hiérarchie des données - la capacité d'optimiser le schéma et les demandes de données hiérarchiques (multilinguisme, tarifs, etc.).
  2. Schéma de données sans schéma et non rigide - modifications rapides et bon marché du schéma de base de données, qui ne nécessitent pas de migrations.
  3. Évolutif - il est moins cher que les bases de données relationnelles, il ne nécessite pas de traitement du code source ni de réécriture des requêtes de base de données.
  4. Prise en charge des géo-requêtes et des index, recherche en texte intégral.
  5. Un système open source open source.
  6. Il est possible d'acheter un support payant auprès des auteurs de MongoDB, support aux entreprises.
  7. MongoDB peut être utilisé comme stockage de fichiers avec équilibrage de charge et réplication de données.
  8. Avec MongoDB, il est plus facile et plus rapide de prototyper des applications et des services.

Inconvénients
1. Il n'y a pas de support pour Join'ov, cependant, ce problème est résolu par la hiérarchie des données ou MapReduce-fonctionnel (mais pas à 100%).


  1. Il n'y a aucune transaction, il y a atomicité au niveau du document, vous pouvez implémenter l'émulation de transaction.
  2. La cohérence au niveau de la base de données n'est pas implémentée, il est nécessaire de le faire dans le code source de l'application.
  3. Il n'y a pas de déclencheurs comme dans les bases de données classiques, mais souvent cette fonctionnalité n'est pas utilisée.

CARACTÉRISTIQUES


  1. MongoDB ne nécessite pas d'administration au début et peu de temps après, un réglage est nécessaire pour la mise à l'échelle.
  2. Il existe des hébergeurs qui peuvent fournir MongoDB dans le cloud à la bonne échelle, de tels services sont rarement vus avec MySQL ou PostgreSQL.
  3. Le leader des entrepôts de données NoSQL pour le moment.
  4. Il dispose d'outils pour créer des requêtes MapReduce, qui peuvent être utilisés pour créer des rapports complexes, mais pas en temps réel.
  5. Les lacunes critiques de cette base de données ont été résolues avec la sortie de la 3e version.

L'équipe a fait un choix en faveur de MongoDB sur la base de l'analyse du projet. Au départ, il était clair que le projet se caractérisait par une forte probabilité de variabilité du point de vue de la fixation de spécifications techniques basées sur des processus métiers. Cela est dû au fait que le projet est une startup, il est donc très probable que de nombreux processus métier changeront au cours de la mise en œuvre du projet et de son adaptation aux réalités des demandes du marché. Afin d'assurer la flexibilité des changements et de réduire les coûts internes de changement du modèle de données, ainsi que de réduire ses propres risques, un choix a été fait en faveur d'une base de données non relationnelle. L'un des leaders de ce segment est juste MongoDB.


Ce choix, comme le montre la pratique ultérieure, s'est avéré correct. Tout s'est passé comme prévu - changements constants dans la production, améliorations par rapport à la série «mais nous voulions toujours l'implémenter» et tout cela a nécessité un changement flexible et rapide du modèle de données. MongoDB a permis au projet non seulement de répondre adéquatement aux changements, mais aussi de ne pas «tomber» du budget. Comme vous le savez, les lacunes au stade de la conception conduisent à une réingénierie importante de la mise en œuvre et à une augmentation du risque de dépassement des délais et du budget du projet. Tous ces risques ont été minimisés, notamment en raison de l'architecture choisie.


Le deuxième choix architectural a été la bibliothèque ReactJS pour l'implémentation du frontend. C'est la popularité de la technologie et de la grande communauté formée qui a permis d'opter pour ReactJS.


Avantages de ce cadre:


  1. L'un des cadres de développement client les plus populaires. Il a une grande communauté, il existe de nombreux exemples de son utilisation, une bonne documentation.
  2. Les développeurs de notre entreprise qui ont de l'expérience avec lui parlent bien de lui.
  3. Plus flexible en termes de développement par rapport, par exemple, à Angular.
  4. Il prend en charge le soi-disant rendu de serveur, qui permet d'indexer les pages d'une application par les moteurs de recherche.
  5. Convient aux applications avec un grand nombre de pages dynamiques. Nous avons beaucoup de ces pages (formulaires de saisie pour différents types de tarifs, surtaxes, commissions; formulaires pour calculer le coût du transport, etc.)

En conséquence, ReactJS a permis de changer les parties frontales de manière assez flexible et dynamique dans le contexte de l'évolution des exigences et des améliorations.


Au cours du projet, en plus du développement, nous avons dû résoudre les problèmes algorithmiques et d'optimisation de l'élaboration du plan de transport optimal, en comparant et en construisant des centaines d'options pour les itinéraires de livraison avec la sélection et la formation des recommandations les plus optimales. Et dans cette optique, le projet a un fort potentiel de développement vers des systèmes de recommandation basés sur l'intelligence artificielle.
D'une manière générale, malgré toutes les difficultés survenues au cours du développement du projet, il était intéressant du point de vue de l'utilisation de technologies modernes et prometteuses pour développer des systèmes d'information pour le marché international des transports.


À l'heure actuelle, le système contient des dizaines de milliers de tarifs actuels pour le transport maritime, routier et aérien. La zone géographique de couverture couvre la Chine, le Vietnam, la Corée du Sud, les pays de l'UE et la Russie, et prévoit de s'étendre à d'autres pays. Aujourd'hui, des dizaines de transitaires de Chine et de la Fédération de Russie travaillent déjà avec le système.


image

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


All Articles