Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Construindo microsserviços a partir de um monolito

Construindo microsserviços a partir de um monolito

O termo microsserviço não é algo muito novo, mas como toda tendência muitas pessoas acabam pensando que aquilo é a solução para todos os problemas. Está cada vez mais comum empresas tentarem migrar seus monolitos para microsserviços, mas será que elas estão prontas para isso? Será que essa abordagem irá solucionar ou criar novos problemas? Como podem se preparar para isso? É isso que tentaremos responder nessa palestra.

Marcos Felipe

August 29, 2019
Tweet

More Decks by Marcos Felipe

Other Decks in Programming

Transcript

  1. “ Microsserviço é uma abordagem para desenvolver uma aplicação como

    uma suíte de serviços, cada um rodando em seu próprio processo e se comunicando através de mecanismos leves. Estes serviços são construídos em torno de recursos de negócio e publicados em produção de maneira independente através de processos de deploys automatizados. Existe um gerenciamento centralizado mínimo destes serviços, que podem ser escritos em diferentes linguagens e usarem diferentes tecnologias para armazenamento de dados.
  2. Características ◉ Dividido por recursos de négocio; ◉ Independentes; ◉

    Produtos e não projetos; ◉ Governança descentralizada; ◉ Gerenciamento de dados descentralizados; ◉ Automatização de infra-estrutura; ◉ Design para falhas; ◉ Design evolucionário. 12
  3. Vantagens ◉ Escalabilidade; ◉ Melhor utilização dos recursos; ◉ Facilidade

    de implantação; ◉ Diversidade tecnológica; ◉ Equipes focadas em serviços específicos; ◉ Isolamento de falhas. 16
  4. Desvantagens ◉ Desenvolvimento trabalhoso; ◉ Complexidade operacional; ◉ Chamadas remotas

    podem ser lentas; ◉ Duplicidade de dados; ◉ Necessidade de uma cultura DevOps forte; ◉ Inimigo do MVP. 18
  5. Requisitos ◉ Equipe madura; ◉ Processo maduro para implantação; ◉

    Familiaridade com o negócio da aplicação; ◉ Cultura DevOps; ◉ Monitoramento básico; ◉ Rápido provisionamento; ◉ Possibilidade de deploy automatizados; ◉ Estar pronto para perder produtividade agora e ganhar futuramente. 22
  6. Necessidades 1. Alguma parte precisa ser deployada e gerenciada de

    forma independente? 2. Alguma parte precisa de uma escalabilidade ou tecnologia diferente das demais? 3. As partes representam diferentes casos de negócio ou domínio? 4. As abordagens de arquitetura distribuída não resolvem o meu problema? 26
  7. Existe uma separação muito clara entre a lógica de apresentação

    em um lado e as regras de negócio e de dados em outro !
  8. “ Capacidades de negócio são o que uma empresa faz

    ou pode fazer. Capacidade de negócio
  9. Capacidades de negócio ◉ Filmes; ◉ Celebridades; ◉ Classificação e

    Comentários; ◉ Eventos; ◉ Notícias; ◉ Trailers; ◉ Usuários; ◉ Anúncios. 46
  10. “ Um subdomínio é uma parte específica do domínio, na

    qual alguns usuários usam um determinado idioma ubíquo. Capacidade de negócio
  11. Subdomínios ◉ Filmes: informações, classificação e comentários; ◉ Celebridades: informações

    classificação e comentários; ◉ Anúncios no site; ◉ Propaganda direcionada; ◉ Blog; ◉ Usuário. 51
  12. “Agora ficou fácil, já sei como fica a decomposição, é

    só começar a desenvolver, certo?” ?
  13. Requisitos ◉ Notícias no blog deve mostrar algumas informações sobre

    os filmes; ◉ Filmes devem mostrar títulos e links de notícias relacionadas. ◉ As informações apresentadas em um serviço sobre o outro serviço pode ser customizada. 55
  14. O ideal é confirmar se sua abordagem está seguindo as

    características de microsserviço !
  15. Características ◉ Dividido por recursos de négocio; ◉ Independentes; ◉

    Produtos e não projetos; ◉ Governança descentralizada; ◉ Gerenciamento de dados descentralizados; ◉ Automatização de infra-estrutura; ◉ Design para falhas; ◉ Design evolucionário. 58
  16. Efeitos colaterais ◉ Se uma query de um serviço travar

    o banco de dados, o outro serviço é afetado; ◉ Ninguém garante que um serviço não vai alterar o dado do outro serviço; ◉ A escalabilidade afeta todos os serviços. 60
  17. “Mas achei a solução, cada um com seu banco de

    dados e eles se comunicam por uma API”
  18. Características ◉ Dividido por recursos de négocio; ◉ Independentes; ◉

    Produtos e não projetos; ◉ Governança descentralizada; ◉ Gerenciamento de dados descentralizados; ◉ Automatização de infra-estrutura; ◉ Design para falhas; ◉ Design evolucionário. 63
  19. Efeitos colaterais ◉ Se um serviço cair o outro poderá

    não continuar funcionando normalmente; ◉ Se houver uma mudança em um serviço o outro é afetado. 65
  20. Características ◉ Dividido por recursos de négocio; ◉ Independentes; ◉

    Produtos e não projetos; ◉ Governança descentralizada; ◉ Gerenciamento de dados descentralizados; ◉ Automatização de infra-estrutura; ◉ Design para falhas; ◉ Design evolucionário. 68
  21. Padrões para resolver problemas de manipulação de dados ◉ Databases

    per Service; ◉ Shared Database; ◉ Saga; ◉ API Composition; ◉ CQRS; ◉ Domain event; ◉ Event sourcing. 74
  22. “Ok, acredito que a manipulação dos meus dados está bem

    desenvolvida e limitada, mas como meus serviços vão se comunicar?” ?
  23. Padrões para resolver problemas de service discovery ◉ Client-side discovery;

    ◉ Server-side discovery; ◉ Service registry; ◉ Self registration; ◉ 3rd party registration. 80
  24. Monolito - Se você é capaz de criar um bom

    monolito, talvez seja capaz de criar bons microsserviços; - Refatorar algo que é pequeno é mais fácil; - Ao começar com monolito é provável que as partes fiquem muito acopladas. Microsserviços - É difícil testar ideias de forma rápida; - Não consegue priorizar velocidade; - Dificuldade em definir limites de serviços no começo