Como Estamos Evoluindo a Nossa Plataforma para Suportar Milhões de Pedidos

Wilson Tavares
Estoca
Published in
4 min readAug 11, 2022
Fases para Atingimento de 1 Milhão de Pedidos Entregues

A Estoca começou em 2020 com a ideia de revolucionar a logística dos e-commerces e entregamos os nossos primeiros pedidos por ganharmos a confiança dos nossos primeiros clientes, parceiros e Estockers.

No começo desse ano, quando atingimos a marca de 1 milhão de pedidos entregues, passamos a avaliar mais profundamente como iríamos suportar na nossa plataforma os próximos milhões que estão por vir.

Como a maioria dos produtos criados em startups early stage, a nossa plataforma foi iniciada com uma aplicação monolítica (hoje, já temos mais de 120k linhas de código 🧑‍💻), sendo escrita em sua maior parte utilizando Python e Django Framework.

Dados da Análise Estática do Nosso Código-Fonte

Em um primeiro momento, visto que tínhamos pouquíssimos desenvolvedores, isso fazia muito sentido e tudo se tornava mais simples:

  1. ativação de novos clientes
  2. inclusão de novas funcionalidades
  3. testes de fluxos completos

Só que, dada a evolução da nossa empresa, as necessidades que estão sendo criadas junto ao nosso crescimento e a organização que estamos propondo aos nossos times à longo prazo, começamos a estrangular a nossa aplicação monolítica

Diagrama de Estrangulamento do Monolito, retirado do blog de Chris Richardson

Mas, calma aí… Você notou que levamos em conta a organização dos nossos times para uma decisão técnica? 🤔

É isso mesmo, entendemos que não é só a escolha de uma boa arquitetura ou de tecnologias inovadoras que importam nesse momento.

Pelo contrário, decisões como essas também precisam ser encaixadas no dia a dia, se não, nada fará sentido!

Considerando tudo isso, começamos por uma fase “básica” de entender e materializar os desafios da nossa plataforma:

  1. Precisamos ter um alto nível de extensibilidade
  2. Precisamos ter um alto nível de escalabilidade
  3. Precisamos ter um alto nível de qualidade
  4. Temos que trabalhar, quase sempre, de forma assíncrona

Nesse ponto, é válido citar que tudo isso vai de encontro com dois dos nossos valores, o “Pensamos grande e com profundidade” e o “Não nos conformamos”

Nós buscamos excelência em tudo que fazemos e acreditamos muito no impacto que vamos gerar na vida de milhares de pessoas e negócios! 🤩

Como parte desse processo de estrangulamento, também realizamos um pseudo event storming, que será abordado futuramente. Porém, o resultado mais importante que geramos a partir disso foram algumas das visões abaixo para cada um dos nossos principais contextos:

  • Ações
  • Eventos
  • Consumidores
  • Atores
  • Entidades

A partir disso, entendemos que a melhor forma de começar efetivamente o estrangulamento da nossa plataforma era começar a implementar as novas funcionalidades em contextos que fossem significantes para o nosso negócio como serviços (futuramente, microserviços? 🤔).

Além dos novos contextos que criamos, também já começamos (e ainda estamos… 😜) realizando a quebra dos módulos já existentes em novos serviços.

Com isso, em cada uma dessas quebras, sempre fazemos o exercício de representar o que temos (AS-IS) e onde queremos chegar (TO-BE)!

Representação Hipotética da Visão de Quebra

Essas representações nos dão uma visão clara de como continuar “movendo” os blocos que temos dentro do nossa plataforma e fazem parte da nossa estratégia de engenharia.

No cenário hipotético acima, podemos citar os passos que precisaríamos seguir para concluir isso:

  1. Quebrar o código, convertendo o antigo módulo de Notas Fiscais em um módulo separado e fracamente acoplado
  2. Dividir o banco de dados, criando uma nova instância separada e exclusiva para o serviço do Faturador
  3. Criar o novo serviço do Faturador, independente do monolito
  4. Usar o novo serviço do Faturador através de um ponto de entrada único (e.g. utilizar um API Gateway)
  5. Remover o código do módulo de Notas Fiscais, agora não mais utilizado, de dentro do monolito

Muito bem, continuem acompanhando as nossas próximas publicações, ainda iremos falar sobre a intersecção da Nossa Saga com Arquitetura Limpa e o refatoramento da nossa plataforma brevemente descrito nessa publicação, destacando o que isso está nos gerando de resultados. 🥇

Deixo por aqui mais uma ótima frase para você se lembrar no dia a dia:

“Intelligence is the ability to avoid doing work, yet getting the work done.” — Linus Torvalds

Esperamos que essa publicação te ajude de alguma forma e até a próxima! 🚀

Referências:

--

--