- A Wave é uma empresa avaliada em $1.7B (2,3 trilhões de won) com 70 engenheiros (fornece serviços de mobile banking para a África)
- Usa uma arquitetura padrão de app CRUD monolítico em Python com base em Postgres
- Ao resolver problemas partindo de uma arquitetura simples e minimizando a complexidade, os engenheiros puderam se concentrar em entregar valor aos usuários
- O Stack Overflow cresceu com sucesso expandindo um monólito, a ponto de ser adquirido por 1,8 bilhão de dólares
Apesar da eficiência de uma arquitetura simples, a maior parte da mídia prefere arquiteturas complexas
- Em conferências de tecnologia há muitas apresentações sobre arquiteturas complexas baseadas em microsserviços, mas nenhuma sobre monólitos simples
- Muitas empresas imitam tecnologias complexas mesmo tendo aplicações pequenas, e com isso ganham popularidade em conferências e no HN
- A arquitetura que usamos é tão simples que nem precisamos desenhar um diagrama de arquitetura
Como manter a simplicidade
- A Wave usa Python síncrono, o que significa que o processo do servidor fica bloqueado enquanto espera por I/O
- Eles tentaram frameworks assíncronos como Eventlet, mas havia bugs demais, então concluíram que o custo não valia a dor operacional
- Em vez de aumentar a complexidade, tarefas com tempo de execução longo são separadas e processadas por filas
- Para cumprir regras de residência de dados, em alguns países é necessário operar datacenters on-premises
- Senegal/Costa do Marfim estavam na nuvem, mas Uganda e outros países exigiam on-premises por causa da regulamentação
- Nesses casos, uma arquitetura simples é muito mais fácil do que uma arquitetura complexa
Construir em vez de comprar
- Como a equipe era pequena, no início preferiam comprar software, mas quando não conseguiam resolver bugs críticos, desenvolviam ferramentas próprias
- Construir ferramentas próprias é uma complexidade que não gostariam de assumir, mas em algumas categorias de produto, mesmo após uma pesquisa bastante ampla, não encontraram fornecedores capazes de oferecer algo adequado
- Às vezes é necessário desenvolver ferramentas próprias e manter expertise interna mesmo fora da competência central
Escolhas que estão sendo reavaliadas
- Estão reavaliando escolhas tecnológicas como RabbitMQ, Celery, SQLAlchemy e Python, pois elas aumentam a complexidade ou o peso de manutenção
- Se começassem uma nova base de código, considerariam essas escolhas com cuidado
Escolhas das quais estão satisfeitos
- Estão satisfeitos com escolhas como GraphQL, protocolos de transporte personalizados e Kubernetes
- O GraphQL tem vantagens como autodocumentação, geração de código e o explorador interativo GraphiQL
- Eles consideram que, ao usar GraphQL, os benefícios superam as desvantagens
- Vantagens
- Autodocumentação dos tipos exatos de retorno
- Os clientes ficam mais seguros graças à geração de código dos tipos exatos de retorno
- Aumento de produtividade com o explorador interativo GraphiQL
- Vários apps (app do usuário, app de suporte, app dos agentes da Wave etc.) podem compartilhar em grande parte uma única API, reduzindo a complexidade
- Com uma linguagem de consulta configurável, o cliente pode buscar exatamente os dados de que precisa em um único round-trip de pacote, sem precisar criar muitos endpoints para fins específicos
- Elimina o bikeshedding sobre o que deve ser considerado uma API RESTful
- Desvantagens
- As bibliotecas de GraphQL não eram muito boas na época em que adotaram GraphQL
- A codificação GQL padrão é redundante, e como muitos clientes usam baixa largura de banda, eles prestam muita atenção a limites de tamanho
- O Kubernetes é usado para atender aos requisitos de operar datacenters por país
Conclusão
- Ao manter a arquitetura da aplicação o mais simples possível, é possível gastar o orçamento de complexidade (e de pessoal) onde a complexidade ajuda o negócio
- Com a ideia de fazer as coisas da forma mais simples possível, a menos que haja um motivo forte para adicionar complexidade, eles conseguiram construir um negócio considerável com poucos engenheiros, mesmo operando no setor financeiro africano, geralmente visto como um negócio difícil
9 comentários
Acho que, em vez de "comprar em vez de construir", o certo parece ser "construir em vez de comprar".
Ah, eu fui tentar dar ênfase e o título acabou ficando estranho. Já corrigi. Obrigado.
Será que as modas mudam de acordo com o ciclo econômico? Independentemente da tendência, começar com um monólito é mais vantajoso para reduzir custos fixos e para a manutenção.
Uma arquitetura fácil de entender também é fácil de manter.
Na minha visão, para qualquer serviço, parece melhor começar com um monólito. Se você já entra definindo MSA desde o início, é desperdício de dinheiro.
"À medida que a complexidade aumenta, os custos (dinheiro, pessoas, tempo...) também aumentam"
"Não tente resolver com uma arquitetura complexa um problema que pode ser resolvido com uma arquitetura simples."
Opiniões no Hacker News
Conselhos de engenharia sobre microsserviços
Palestras sobre microsserviços
Viés cognitivo e simplicidade
Excesso de engenharia e falta de experiência
Empresas que valorizam equilíbrio entre trabalho e vida pessoal
Experiência pessoal com Dan Luu
A importância de uma arquitetura simples
Arquitetura e a estrutura social das equipes de engenharia
Preferência por arquitetura simples
Você poderia pedir o link da palestra que aborda as dicas de David Schmitz sobre fracassos em microsserviços?
É https://www.youtube.com/watch?v=r8mtXJh3hzM