Elegir la arquitectura de una solución para un mercado de servicios de carga

Agrafreight.com es el primer servicio en Rusia para el cálculo de costos en línea y pedidos de transporte aéreo, automotor y de contenedores, cargas por todos los medios de transporte, incluidas las tarifas puerta a puerta.


imagen

Acerca de la historia del proyecto Agorafreight le dice al gerente del proyecto Reksoft (parte del GC "Technoserv") Dmitry Dolgikh.


La startup rusa Agorafreight es un mercado para el transporte internacional de carga, que está diseñado para calcular el costo de los servicios para el transporte de bienes proporcionados por empresas de transporte y transportistas. El sistema es un enlace entre el cliente de transporte (cliente), las compañías transportistas y los transportistas. El sistema permite la selección preliminar de la ruta, las empresas y los servicios, así como el cálculo del costo del transporte.


El proyecto en sí es muy interesante y ambicioso. Al menos interesante en que todavía no hay tal solución en Rusia. La palabra "internacional" le dio ambigüedad al proyecto: por un lado, las ambiciones del proyecto se expresaron en términos de ampliación a todo el mundo y, por otro, entendimos que el proyecto allanaría el camino en un entorno bastante competitivo. Parte de dicho entorno es siempre la capacidad del proyecto para responder rápidamente a los cambios y las reversiones inesperadas en términos de requisitos. Todo esto estableció inmediatamente un cierto nivel de responsabilidad al elegir la arquitectura de la solución, especialmente porque no había tiempo suficiente para implementar la primera versión del producto.


Primero, tuve que elegir una base de datos, o más bien un sistema de gestión de datos. La elección recayó en MongoDB, una base de datos orientada a documentos NoSQL con soporte para consultas geográficas, búsqueda de texto completo en 15 idiomas, con una estructura de datos jerárquica. MongoDB está disponible de forma gratuita bajo la licencia GNU 3.0. Se escala horizontalmente y se puede utilizar como almacenamiento de archivos con equilibrio de carga y replicación de datos.
Pros


  1. Jerarquía de datos: la capacidad de optimizar el esquema y las solicitudes de datos jerárquicos (multilingüismo, tarifas, etc.).
  2. Esquema de datos no rígido y sin esquema: cambios baratos y rápidos en el esquema de la base de datos que no requieren migraciones
  3. Escalable: es más barato que las bases de datos relacionales, no requiere el procesamiento del código fuente o la reescritura de las consultas de la base de datos.
  4. Soporte para geo-consultas e índices, búsqueda de texto completo.
  5. Un sistema de código abierto de código abierto.
  6. Existe la oportunidad de comprar soporte pagado de los autores de MongoDB, soporte empresarial.
  7. MongoDB se puede utilizar como almacenamiento de archivos con equilibrio de carga y replicación de datos.
  8. Con MongoDB, es más fácil y rápido crear prototipos de aplicaciones y servicios.

Contras
1. No hay soporte para Join'ov, sin embargo, este problema se resuelve mediante la jerarquía de datos o MapReduce-funcional (pero no al 100%).


  1. No hay transacciones, hay atomicidad a nivel de documento, puede implementar la emulación de transacciones.
  2. La coherencia a nivel de la base de datos no está implementada, es necesario hacer esto en el código fuente de la aplicación.
  3. No hay desencadenantes como en las bases de datos clásicas, pero a menudo esta funcionalidad no se usa.

Caracteristicas


  1. MongoDB no requiere administración al inicio y un poco después, se requiere ajuste para escalar.
  2. Hay proveedores de alojamiento que pueden proporcionar MongoDB en la nube a la escala correcta, tales servicios rara vez se ven con MySQL o PostgreSQL.
  3. El líder entre los almacenes de datos NoSQL en este momento.
  4. Tiene herramientas para crear consultas de MapReduce, que pueden usarse para generar informes complejos, pero no en tiempo real.
  5. Las deficiencias críticas de esta base de datos se resolvieron con el lanzamiento de la tercera versión.

El equipo tomó una decisión a favor de MongoDB basándose en el análisis del proyecto. Inicialmente, estaba claro que el proyecto se caracteriza por una alta probabilidad de variabilidad desde el punto de vista de establecer especificaciones técnicas basadas en procesos comerciales. Esto se debe al hecho de que el proyecto es una startup, por lo que es muy probable que muchos procesos comerciales cambien durante la implementación del proyecto y su adaptación a las realidades de las demandas del mercado. Para garantizar la flexibilidad de los cambios y reducir los costos internos de cambiar el modelo de datos, así como reducir sus propios riesgos, se hizo una elección a favor de una base de datos no relacional. Uno de los líderes en este segmento es solo MongoDB.


Esta elección, como lo muestra la práctica posterior, resultó ser correcta. Todo sucedió como se esperaba: cambios constantes en la producción, mejoras de la serie "pero aún queríamos implementarlo" y todo esto requirió un cambio flexible y rápido del modelo de datos. MongoDB permitió que el proyecto no solo respondiera adecuadamente a los cambios, sino que también no se "caiga" del presupuesto. Como saben, las deficiencias en la etapa de diseño conducen a una reingeniería significativa en la implementación y al aumento del riesgo de plazos vencidos y el presupuesto del proyecto. Todos estos riesgos fueron minimizados, incluso debido a la arquitectura seleccionada.


La segunda opción arquitectónica fue la biblioteca ReactJS para implementar la interfaz. Es la popularidad de la tecnología y la gran comunidad formada lo que hizo posible optar por ReactJS.


Ventajas de este marco:


  1. Uno de los marcos de desarrollo de clientes más populares. Tiene una gran comunidad, hay muchos ejemplos de su uso, buena documentación.
  2. Los desarrolladores de nuestra empresa que tienen experiencia con él hablan bien de él.
  3. Más flexible en términos de desarrollo en comparación, por ejemplo, con Angular.
  4. Es compatible con el denominado Renderizado del servidor, que permite la indexación de páginas de una aplicación por parte de los motores de búsqueda.
  5. Adecuado para aplicaciones con una gran cantidad de páginas dinámicas. Tenemos muchas de esas páginas (formularios de entrada para varios tipos de tarifas, recargos, comisiones; formularios para calcular el costo de transporte, etc.)

Como resultado, ReactJS permitió cambiar las partes frontend de manera bastante flexible y dinámica en un contexto de cambios en los requisitos y mejoras.


Durante el proyecto, además del desarrollo, tuvimos que resolver los problemas algorítmicos y de optimización de elaborar el plan de transporte óptimo, comparar y construir cientos de opciones para rutas de entrega con la selección y formación de las recomendaciones más óptimas. Y en este sentido, el proyecto tiene un alto potencial de desarrollo hacia sistemas de recomendación basados ​​en inteligencia artificial.
En general, a pesar de todas las dificultades que surgieron durante el desarrollo del proyecto, fue interesante desde el punto de vista del uso de tecnologías modernas y prometedoras para desarrollar sistemas de información para el mercado de transporte internacional.


En la actualidad, el sistema contiene decenas de miles de tarifas actuales para el transporte marítimo, terrestre y aéreo. La geografía de cobertura cubre China, Vietnam, Corea del Sur, los países de la UE y Rusia, y planea expandirse a otros países. Ahora, docenas de transitarios de China y la Federación de Rusia ya están trabajando con el sistema.


imagen

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


All Articles