DevConf - Separando uma aplicação monolítica @Rafael Girolineto
Primeiro Evento organizado pelo Opensanca se trata do DevConf, tivemos a participação do Rafael Girolineto (https://www.linkedin.com/in/girolineto/) abordando sobre Microserviços
9 anos no mercado de TI Líder técnico no CasaeCafe.com Apreciador de cerveja e café (não necessariamente nesta ordem) Apaixonado por Fotografia (analógica e digital)
Integrações via chama de função • Integrações no banco de dados • Uso de uma stack única • Tendência a alto acoplamento • Tendência a baixa redundância de informação Fonte: https://martinfowler.com
• Integrações por chamadas remotas • Fronteira bem definida • Possibilidade de diversas stacks • Baixo acoplamento entre módulos • Tendência a alta redundância de informação Fonte: https://martinfowler.com
Atualizações / Deploys ◦ Escalabilidade • Descentralização dos dados (e do modelo de dados) • Propósito único: domínio a ser tratado • Fronteira: ◦ Codebase separada (uni / multi repositórios) ◦ API pública estável, versionada e bem definida ◦ Protocolo único de comunicação (RESTish)
com Microserviços deve ter equipes com: • Multidisciplinaridade • Autonomia sobre um domínio (ou mais) • Comunicação com times de domínios próximos e VICE-VERSA Fonte: https://www.thoughtworks.com/pt/insights/blog/demystifying-conways-law
rápido de infraestrutura: • Utilização de algum provedor de cloud 1 Capacidade de entregar em produção rapidamente • Testes automatizados, releases pequenas, automatização 2 Monitoria básica • Acesso aos logs, status da infraestrutura, status dos serviços 3
espera para obter uma resposta Circuit Breaker Gestão de disponibilidade de serviços através de medição de erros Bulkheads Capacidade de suportar a serviços indisponíveis de forma "graciosa"
• Cada serviço publica eventos sempre que algum dado muda. • Os subscribers destes eventos e podem executar ações após receberem • Após o processamento de toda a árvore de eventos, o sistema fica, novamente, consistente
alto para integração entre módulos • Multiplas stacks Vantagens • Times auto gerenciáveis • Times multifuncionais • Desacoplamento • Independência entre módulos • Arquitetura Evolutiva • Multiplas stacks DEPENDE
escala • Não existiu preocupação com qualidade de software • Lógica de negócio obscura ou desconhecida • Sistema escalou verticalmente • Indisponibilidade de serviço constante
isolada 1 Entender a regra de negócio associada à esta entidade 2 Criar um serviço completamente independente com a lógica de negócio implementada 3 Usar o sistema antigo como fallback até que a lógica toda fosse implementada 4 MICROSERVIÇOS
• Diminuição no tempo médio de transações envolvendo vagas • Fallback permitiu dupla convivência • Insuficiente para resolver problemas de escalabilidade da plataforma
Cluster Docker Swarm • AWS EC2 • Deploy de Imagens Docker • Bancos de Dados MongoDB (e um Cassandra perdido) • Comunicação síncrona (na maior parte) • PHP7 + NGINX