Como Estamos Evoluindo a Nossa Plataforma para Suportar Milhões de Pedidos
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.
Em um primeiro momento, visto que tínhamos pouquíssimos desenvolvedores, isso fazia muito sentido e tudo se tornava mais simples:
- ativação de novos clientes
- inclusão de novas funcionalidades
- 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…
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:
- Precisamos ter um alto nível de extensibilidade
- Precisamos ter um alto nível de escalabilidade
- Precisamos ter um alto nível de qualidade
- 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)!
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:
- Quebrar o código, convertendo o antigo módulo de Notas Fiscais em um módulo separado e fracamente acoplado
- Dividir o banco de dados, criando uma nova instância separada e exclusiva para o serviço do Faturador
- Criar o novo serviço do Faturador, independente do monolito
- Usar o novo serviço do Faturador através de um ponto de entrada único (e.g. utilizar um API Gateway)
- 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:
- Diagrama de Estrangulamento do Monolito — https://microservices.io/i/decompose-your-monolith-devnexus-feb-2020.001.jpeg
- “Microservices.io Blog” (https://microservices.io/), com publicações de Chris Richardson