Migrando para microsserviços - Amazon e Netflix
por Matheus Lima, Geraldo Medeiros e Hittalo Cavalcanti.
Mas que são microsserviços?
Microsserviços são uma abordagem de arquitetura para a criação de aplicações que começou a obter atenção após diversas histórias de sucesso serem publicadas por empresas como as que trataremos aqui: Netflix e Amazon. O que diferencia a arquitetura de microsserviços das abordagens monolíticas tradicionais é como ela decompõe a aplicação por funções básicas. Cada função é denominada um serviço e pode ser criada e implantada de maneira independente. Isso significa que cada serviço individual pode funcionar ou falhar sem comprometer os demais e isso traz diversos benefícios.
Por que foi necessário?
Com o crescimento das empresas, problemas com a arquitetura monolítica começaram a ficar aparentes, houveram grandes impactos nos serviços dessas empresas causados por quedas e erros, isso significa estar perdendo dinheiro e clientes a cada minuto. Esses problemas ocorreram pelo monólito ser um ponto único de falha, quando algum serviço cai, os outros também param de funcionar.
O ponto decisivo para a Netflix foi a queda dos seus serviços por 4 dias em 2008, causado por corrupção de dados no banco de dados principal. A partir de então a empresa começou a trabalhar fortemente na migração do monolito para a cloud da AWS, processo que só foi considerado finalizado em 2016.
Os problemas da arquitetura monolítica também têm grande impacto para o crescimento da empresa, os ciclos de desenvolvimento começam a ficar mais longos e difíceis. Problemas com dependências, depuração, acoplamento, deployment, testes, começaram a pesar cada vez mais para as empresas. Foi quando os arquitetos de software da Amazon entenderam que isso estava impedindo a empresa de expandir, que começaram a trabalhar em quebrar o monolito em partes, e seriam pioneiros quando o termo microsserviços não existia.
Quais foram os desafios?
Migrar para microsserviços significa uma mudança estrutural na empresa, o que impacta não só o time de desenvolvimento, mas a organização em geral. São times sendo desfeitos, geralmente grandes em arquiteturas clássicas, em diversos times menores, funcionários demitidos e recrutados. A mudança também não acontece de uma hora para outra, tem que se manter a antiga infraestrutura ao mesmo tempo que se criam novas, o que muitas vezes significava trabalho duplo, problemas de replicação, bugs, etc.
Para a Amazon, que foi a pioneira nesta arquitetura, não existia conhecimento de como fazer o que se queria, não foi da primeira vez que acertaram, passaram do monolito para uma arquitetura mais distribuída, mas as comunicações entre os serviços ainda estava muito acoplada, foi outro passo para chegar numa estrutura de microsserviços que conhecemos hoje.
Mesmo começando a migração num período posterior, onde já se tinha conhecimentos de arquitetura e boas práticas de microsserviços, a Netflix teve seus problemas nessa tarefa complexa. Eles tiveram grandes problemas com suas bases de dados, desmembrar data centers físicos nas diversas novas bases na nuvem criou problemas pela nova dinâmica mais distribuída, precisando adicionar cache para não sobrecarregar. Problemas de latência e desempenho, falhas em instâncias, etc. são infelizmente comuns em grandes migrações.
Me fale sobre os ganhos.
Neste ponto, ambas empresas queriam estar disponíveis 24 horas por dia, trabalhar rápido e escalar facilmente, e ganham isso rapidamente com o uso de microserviços. Isso se dá pelo fato de que seus engenheiros tiveram a oportunidade de desenvolver, testar e implantar serviços de forma independente, o que lhes permitiu ter equipes que poderiam trabalhar em diferentes partes do sistema sem ter que esperar que o outro terminasse.
Na amazon, como cada time é responsável por todo o processo do seu serviço, eles perceberam que desenvolvedores estavam gastando muito tempo com infraestrutura para manter seus serviços ativos, foi quando eles tiveram a ideia de criar a Amazon Web Services, então além de todos os benefícios citados, ainda criaram um produto muito lucrativo.
Já no caso específico da netflix, uma arquitetura de microsserviços é o que permitiu dimensionar de forma independente certos serviços em vez de dimensionar todo o sistema monolítico. Isso também significa que eles pagam apenas pelos recursos que usam e nunca pagam a mais pelo que não precisam, como ocorria antes quando tinham que manter seu próprio data center.
E os apredizados?
Em todo processo de migração e definição de arquitetura, as lições aprendidas são contínuas, de modo que seja impossível captar todas, porém, algumas são cruciais na consolidação do artefatos construídos seguindo nova metodologia.
Em ambas as empresas houve uma mudança na cultura organizacional: enquanto que a Amazon tornou seus processos mais leves para que as equipes pudessem desenvolver sem muitos impedimentos e trouxe um novo conceito na divisão dos times e estrutura hierárquica, de forma que estes se dividiam de acordo com as features do produto, a Netflix focou em ter rastreabilidade para prevenção de erros, uma vez que a manutenção de microsserviços precisa ser controlada de maneira efetiva. Em ambas as empresas, o conceito ownership (sentimento de dono do produto) foi trabalhado.
Tanto a Amazon quanto a Netflix aprenderam que não é bom que haja forte acoplamento entre os serviços, implicando na dificuldade em prover escalabilidade e rastreabilidade. Além de evitar falhas em cascata e indisponibilidade em geral. Outro fator importante que eles aprenderam foi que processos de deploy e recuperação a falhas precisam ser automatizados, para que o foco humano seja no desenvolvimento e rápida disponibilização dos serviços.
Portanto, ambas aprenderam lições em relação à automação e tiveram que se adaptar organizacionalmente para atender às novas demandas do mercado.
Referências
https://www.hys-enterprise.com/blog/why-and-how-netflix-amazon-and-uber-migrated-to-microservices-learn-from-their-experience/
https://www.youtube.com/watch?v=CZ3wIuvmHeM&ab_channel=InfoQ
https://www.youtube.com/watch?v=57UK46qfBLY&ab_channel=GOTOConferences