O Agrafreight.com é o primeiro serviço na Rússia para cálculo de custos on-line e pedidos de transporte aéreo, automotivo e de contêineres, cargas por todos os meios de transporte, incluindo tarifas de porta em porta.

A história do projeto Agorafreight é contada pelo gerente de projetos da Reksoft (parte do grupo Technoserv) Dmitry Dolgikh.
A startup russa Agorafreight é um mercado para o transporte internacional de cargas, projetado para calcular o custo de serviços para o transporte de mercadorias fornecidas por transportadoras e transportadoras. O sistema é um link entre o cliente de transporte (cliente), as transportadoras e os despachantes. O sistema permite pré-selecionar a rota, as empresas e os serviços, além de calcular o custo do transporte.
O projeto em si é muito interessante e ambicioso. Pelo menos interessante, porque ainda não existe uma solução na Rússia. A palavra “internacional” deu ambiguidade ao projeto - por um lado, as ambições do projeto foram declaradas em termos de expansão para o mundo inteiro e, por outro, entendemos que o projeto deveria abrir o caminho em um ambiente bastante competitivo. Parte desse ambiente é sempre a capacidade do projeto de responder rapidamente a mudanças e reversões inesperadas em termos de requisitos. Tudo isso definiu imediatamente um certo nível de responsabilidade na escolha da arquitetura da solução, principalmente porque não havia tempo suficiente para implementar a primeira versão do produto.
Primeiro, tive que escolher um banco de dados, ou melhor, um sistema de gerenciamento de dados. A escolha recaiu sobre o MongoDB - um banco de dados orientado a documentos NoSQL com suporte para consultas geográficas, pesquisa de texto completo em 15 idiomas, com uma estrutura hierárquica de dados. O MongoDB está disponível gratuitamente sob a licença GNU 3.0. Ele é dimensionado horizontalmente e pode ser usado como armazenamento de arquivos com balanceamento de carga e replicação de dados.
Prós
- Hierarquia de dados - a capacidade de otimizar o esquema e as solicitações de dados hierárquicos (multilinguismo, tarifas, etc.).
- Esquema de dados não rígido e sem esquema - alterações rápidas e baratas no esquema do banco de dados, que não exigem migrações.
- Escalável - é mais barato que os bancos de dados relacionais, não requer processamento do código-fonte nem reescrita de consultas ao banco de dados.
- Suporte para consultas geográficas e índices, pesquisa de texto completo.
- Um sistema de código aberto de código aberto.
- Há uma oportunidade de comprar suporte pago dos autores do MongoDB, suporte corporativo.
- O MongoDB pode ser usado como armazenamento de arquivos com balanceamento de carga e replicação de dados.
- Com o MongoDB, é mais fácil e rápido prototipar aplicativos e serviços.
Contras
1. Não há suporte para Join'ov, no entanto, esse problema é resolvido pela hierarquia de dados ou pelo MapReduce-funcional (mas não 100%).
- Não há transações, existe atomicidade no nível do documento, você pode implementar a emulação de transações.
- A consistência no nível do banco de dados não é implementada; é necessário fazer isso no código-fonte do aplicativo.
- Não há gatilhos como nos bancos de dados clássicos, mas muitas vezes essa funcionalidade não é usada.
Funcionalidades
- O MongoDB não requer administração no início e, pouco depois, o ajuste é necessário para o dimensionamento.
- Existem provedores de hospedagem que podem fornecer o MongoDB na nuvem na escala certa; esses serviços raramente são vistos no MySQL ou no PostgreSQL.
- O líder entre os data warehouses do NoSQL no momento.
- Possui ferramentas para criar consultas do MapReduce, que podem ser usadas para criar relatórios complexos, mas não em tempo real.
- As deficiências críticas desse banco de dados foram resolvidas com o lançamento da 3ª versão.
A equipe fez uma escolha a favor do MongoDB com base na análise do projeto. Inicialmente, ficou claro que o projeto se caracteriza por uma alta probabilidade de variabilidade do ponto de vista da definição de especificações técnicas com base nos processos de negócios. Isso se deve ao fato de o projeto ser uma startup, portanto, é altamente provável que muitos processos de negócios sejam alterados durante a implementação do projeto e sua adaptação às realidades das demandas do mercado. Para garantir a flexibilidade das mudanças e reduzir os custos internos da alteração do modelo de dados, bem como reduzir seus próprios riscos, foi feita uma escolha em favor de um banco de dados não relacional. Um dos líderes neste segmento é apenas o MongoDB.
Essa escolha, como demonstrado pela prática subsequente, acabou sendo correta. Tudo aconteceu como esperado - mudanças constantes na produção, melhorias da série "mas ainda queríamos implementá-la" e tudo isso exigiu uma mudança rápida e flexível do modelo de dados. O MongoDB permitiu ao projeto não apenas responder adequadamente às mudanças, mas também não "cair fora" do orçamento. Como você sabe, as deficiências no estágio de design levam a uma reengenharia significativa na implementação e ao aumento do risco de falha no cumprimento dos prazos e do orçamento do projeto. Todos esses riscos foram minimizados, inclusive devido à arquitetura selecionada.
A segunda opção arquitetural foi a biblioteca ReactJS para implementar o frontend. É a popularidade da tecnologia e a grande comunidade formada que tornou possível optar pelo ReactJS.
Vantagens dessa estrutura:
- Uma das estruturas de desenvolvimento de clientes mais populares. Possui uma grande comunidade, existem muitos exemplos de seu uso, boa documentação.
- Os desenvolvedores de nossa empresa que têm experiência com ele falam bem dele.
- Mais flexível em termos de desenvolvimento em comparação, por exemplo, com Angular.
- Ele suporta o chamado Server Rendering, que permite a indexação de páginas de um aplicativo pelos mecanismos de busca.
- Adequado para aplicativos com um grande número de páginas dinâmicas. Temos muitas páginas desse tipo (formulários de entrada para vários tipos de tarifas, sobretaxas, comissões; formulários para calcular o custo do transporte etc.)
Como resultado, o ReactJS permitiu alterar as partes do frontend de maneira bastante flexível e dinâmica, no contexto das mudanças de requisitos e melhorias.
Durante o projeto, além do desenvolvimento, tivemos que resolver os problemas algorítmicos e de otimização da elaboração do plano ideal de transporte, comparando e construindo centenas de opções para rotas de entrega com a seleção e a formação das recomendações mais adequadas. E nesse sentido, o projeto tem um alto potencial de desenvolvimento em direção a sistemas de recomendação baseados em inteligência artificial.
Em geral, apesar de todas as dificuldades que surgiram durante o desenvolvimento do projeto, foi interessante em termos de uso de tecnologias modernas e promissoras para o desenvolvimento de sistemas de informação para o mercado internacional de transporte.
Atualmente, o sistema contém dezenas de milhares de tarifas atuais para transporte marítimo, rodoviário e aéreo. A geografia da cobertura abrange China, Vietnã, Coréia do Sul, países da UE e Rússia e planeja expandir para outros países. Agora, dezenas de despachantes da China e da Federação Russa já estão trabalhando com o sistema.
