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

Modular Monoliths - Como é possível organizar sua aplicação para habilitar uma arquitetura distribuída

Modular Monoliths - Como é possível organizar sua aplicação para habilitar uma arquitetura distribuída

O objetivo desta palestra é mostrar como é possível construir uma aplicação baseada na idéia de MonolithFirst e atrasar a decisão de separar em microserviços. A ideia de modular monoliths vem da organização e separação da sua aplicação em módulos ou componentes autônomos que se relacionam entre si, mas estão dentro de uma mesma base de código. Nesta palestra será mostrado como identificar e separar estes módulos, além de um processo que permite extrair um módulo e distribuir como um microserviço.

Luiz Costa

July 20, 2018
Tweet

More Decks by Luiz Costa

Other Decks in Programming

Transcript

  1. Globalcode – Open4education Modular Monoliths Luiz Costa [email protected] / @gutomcosta

    Como é possível organizar sua aplicação para habilitar uma arquitetura distribuída
  2. A monolithic application is self-contained, and independent from other computing

    applications. The design philosophy is that the application is responsible not just for a particular task, but can perform every step needed to complete a particular function. Wikipedia -Monolithic application
  3. A monolithic application is self-contained, and independent from other computing

    applications. The design philosophy is that the application is responsible not just for a particular task, but can perform every step needed to complete a particular function. Wikipedia -Monolithic application
  4. A monolithic application is self-contained, and independent from other computing

    applications. The design philosophy is that the application is responsible not just for a particular task, but can perform every step needed to complete a particular function. Wikipedia -Monolithic application
  5. …The system is divided into a number of relatively independent

    modules with well defined interfaces; each one is small enough and simple enough to be thoroughly understood and well programmed… On the criteria to be used in decomposing systems into modules - David Parnas, 1971
  6. …The system is divided into a number of relatively independent

    modules with well defined interfaces; each one is small enough and simple enough to be thoroughly understood and well programmed… On the criteria to be used in decomposing systems into modules - David Parnas, 1971
  7. …The system is divided into a number of relatively independent

    modules with well defined interfaces; each one is small enough and simple enough to be thoroughly understood and well programmed… On the criteria to be used in decomposing systems into modules - David Parnas, 1971
  8. Total unification of the domain model for a large system

    will not feasible or cost-effective “Domain Driven Design, Chapter 14 - Maintaining Model Integrity", pág: 332 Eric Evans - Blue Book
  9. Bounded Context …delimits the applicability of a particular model so

    that team members have a clear and shared understanding of what has to be consistent and how it relates to other contexts. “Domain Driven Design, Chapter 14 - Maintaining Model Integrity", pág: 336 Eric Evans - Blue Book
  10. Paciente Atendimento + qual nome, nascimento…? + qual dia do

    agendamento? + qual endereço de atendimento? Paciente Vacinação + como a caderneta de vacinação está organizada? + qual a próxima vacina? + qual vacina foi aplicada? Paciente Financeiro + qual custo das vacinas aplicadas? +alguma condição de desconto? +qual meio de pagamento utilizado? É responsabilidade de cada contexto modelar os dados da melhor maneira, de acordo com a as suas responsabilidades.
  11. Hexagonal Architecture Uncle Bob’s Clean Architecture Diagrama - https:/ /stefanoalletti.wordpress.com/2017

    /10/27 /hexagonal-architecture/ https:/ /staging.cockburn.us/hexagonal-architecture/ https:/ /8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
  12. Bounded Context Domain Application use case use case use case

    Repository Entity Value Object Infrastructure Entity DAO Logger Service Domain driven design module
  13. Implementação de um Caso de Uso o fluxo de execução

    é simples e limpo todas as dependências são declaradas no construtor
  14. Todas as regras de negócio são programadas aqui. Normalmente são

    objetos puros, sem relação com persistência ou infra-estrutura Expostas através de casos de uso
  15. ANTI-CURRUPTION LAYER SHARED KERNEL OPEN HOST SERVICE PUBLISHED LANGUAGE CONFORMIST

    CUSTOMER / SUPPLIER … Existe vida além parte 1 do livro azul
  16. Deve permitir o paciente agendar a aplicação de vacina. Ao

    fazer o agendamento deve-se efetuar o pagamento e reservar o estoque dos produtos agendados. User Story
  17. User Story Deve permitir o paciente agendar a aplicação de

    vacina. Ao fazer o agendamento deve-se efetuar o pagamento e reservar o estoque dos produtos agendados.
  18. O ideal é que um contexto só exponha objetos de

    fronteira. Ex: Use Cases, Services ou Repositories Se precisar retornar um conjunto de dados mais complexo, dê preferência para Hashs ou Tuplas Mantenha o domain model protegido dentro do contexto. O ideal é não deixar “vazar" do contexto os objetos de domínio
  19. 1.

  20. Gestão De Agendas Pagamentos Neste caso os contextos se falam

    através dos objetos de fronteira: Services e Casos de Uso
  21. Construa uma arquitetura que te permita atrasar as decisões https:/

    /8thlight.com/blog/uncle-bob/2011/11/22/Clean-Architecture.html
  22. 2.

  23. Gestão De Agendas Gestão de Estoque Os dois contextos se

    falam através de um domain event AgendamentoCriado
  24. Contexto de pagamento como microserviço O único ponto de contato

    com o contexto de pagamento no agendamento, era o objeto de fronteira Pagamento. Este objeto vai precisar ser alterado, e ao invés de chamar o contexto diretamente, vamos introduzir uma service layer para implementar a chamada remota ao microserviço de pagamento O contexto de pagamento foi extraído e adicionado em uma nova aplicação rails. Foi necessário expor uma api para disponibilizar o acesso aos casos de uso. Neste caso, provavelmente os respositórios deverão ser alterados para conectar no banco de dados diferente.
  25. Contexto de pagamento como microserviço O único ponto de contato

    com o contexto de pagamento no agendamento, era o objeto de fronteira Pagamento. Este objeto vai precisar ser alterado, e ao invés de chamar o contexto diretamente, vamos introduzir uma service layer para implementar a chamada remota ao microserviço de pagamento O contexto de pagamento foi extraído e adicionado em uma nova aplicação rails. Foi necessário expor uma api para disponibilizar o acesso aos casos de usos. Neste caso, provavelmente os respositórios deverão ser alterados para conectar no banco de dados diferente.
  26. Como extrair o contexto de Gestão de Estoque? Como lidar

    com o Domain Event AgendamentoCriado?
  27. Contexto de estoque como microserviço O contexto de agendamento continua

    publicando o domain event AgendamentoCriado da mesma forma que antes, nada muda aqui. O Event Handler original é substituído por outro que public o evento em um Broker de mensagem. Ex: RabbitMQ, Kafka, ActveMQ No microserviço de estoque, é necessário adicionar na ACL, handlers que serão estimulados pelas mensagens entregues pelo broker. Estes handlers, delegam a execução para os caso de uso.
  28. Contexto de estoque como microserviço O contexto de agendamento continua

    publicando o domain event AgendamentoCriado da mesma forma que antes, nada muda aqui. O Event Handler original é substituído por outro que public o evento em um Broker de mensagem. Ex: RabbitMQ, Kafka, ActveMQ No microserviço de estoque, é necessário adicionar na ACL, handlers que serão estimulados pelas mensagens entregues pelo broker. Estes handlers, delegam a execução para os casos de uso.
  29. É possível evoluir e construir um monolito de maneira organizada.

    Considere MonolithFirst https:/ /martinfowler.com/bliki/MonolithFirst.html