SlideShare uma empresa Scribd logo
1 de 89
Baixar para ler offline
Globalcode – Open4education
Modular Monoliths
Luiz Costa
gutomcosta@gmail.com / @gutomcosta
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
Monoliths, Modular, Microservice?
Antes, as definições.
Monolito?
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
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
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
Modular?
…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
…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
…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
Microservices?
Módulos separados em unidades
de deploy independentes - aka
Distribuídos
Módulos separados em unidades
de deploy independentes - aka
Distribuídos
Distribuir é complicado
Modular Monoliths - Como é possível organizar sua aplicação para habilitar uma arquitetura distribuída
Segurança? Apis?
Versionamento?
Servidores?
Transações
distribuídas?
Containers?
Monitoramento?
Fowler’s First Law of
Distributed Object Design
Don’t distribute your objects.
http://martinfowler.com/books/eaa.html
Modular Monoliths
Modular Monoliths - Como é possível organizar sua aplicação para habilitar uma arquitetura distribuída
O que é?
Monolith
Service Based
architecture
(SOA, microservices)
Livre adaptação do diagrama de Simon Brown - https://goo.gl/tCCwZx
Monolith
Service Based
architecture
(SOA, microservices)
Modular
Monolith
Livre adaptação do diagrama de Simon Brown - https://goo.gl/tCCwZx
Como é organizado?
Modular Monoliths - Como é possível organizar sua aplicação para habilitar uma arquitetura distribuída
Módulos bem
definidos
promovem o
encapsulamento
Se comunicam
através de
interfaces bem
definidas
Podem acessar
mais de um banco
de dados
Como implementar uma
arquitetura modular assim?
Domain Driven Design
the blue and the red book
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
Um típico “domain model” ou tabelas de
banco de dados
Como dividir o domínio?
Contexto A Contexto B Contexto C
Strategic Design
Bounded Context
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
Bounded Context
Delimita o significado e a
aplicabilidade de um domain model.
Modular Monoliths - Como é possível organizar sua aplicação para habilitar uma arquitetura distribuída
Mesmo objeto de domínio
em diferentes contextos
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.
Um módulo é a
implementação de um
Bounded Context
Como implementar?
Anatomia de um Bounded
Context
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
Bounded Context
DomainApplication
use case
use case
use case
Repository
Entity
Value Object
Infrastructure
Entity
DAO
Logger
Service
Domain driven design module
Application Domain
Atendimento.Fila
Infrastructure
Implementação de um Caso de Uso
o fluxo de execução é simples e limpo
todas as
dependências são
declaradas no
construtor
Foco total no Domain Model
Domain Model != Model
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
Como o projeto fica
organizado?
Modular Monoliths - Como é possível organizar sua aplicação para habilitar uma arquitetura distribuída
Código da aplicação vive aqui.
Frameworks estão em Web App.
Cada Bounded Context
é implementado como
um módulo dentro da
aplicação
Como bounded contexts se
relacionam?
As relações entre Bounded
Contexts acontecem através
de um conjunto patterns
conhecidos como Context
Mappers
ANTI-CURRUPTION LAYER
SHARED KERNEL
OPEN HOST SERVICE
PUBLISHED LANGUAGE
CONFORMIST
CUSTOMER / SUPPLIER
…
Existe vida além parte 1 do livro azul
Implementando uma 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.
User Story
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.
Bounded Contexts
Como um contexto executa
uma ação em outro
contexto?
Boundarieshttps://martinfowler.com/bliki/ApplicationBoundary.html
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
public class
Deve se reduzir o número de classes públicas para promover o
encapsulamento
Exemplo
Context Maps Open Host
Service (OHS)
Anti Corruption
Layer (ACL)
Event Publisher
(EP)
1.
Gestão De Agendas
Pagamentos
Neste caso os contextos se falam
através dos objetos de fronteira:
Services e Casos de Uso
Construa uma arquitetura
que te permita atrasar as
decisões
https://8thlight.com/blog/uncle-bob/2011/11/22/Clean-Architecture.html
Indireção para o contexto de
pagamento
Injeção de Dependências
Único ponto de
contato com
contexto de
pagamento
Efetuar Agendamento
Tradução do
modelo entre
os dois
contextos
2.
Gestão De Agendas
Gestão de Estoque
Os dois contextos se falam através
de um domain event
AgendamentoCriado
Publica o
evento
através da EP
Contato com o
contexto de
gestão de
estoque
Como tirar vantagem e
extrair para um
microservice?
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.
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.
Como extrair o contexto de
Gestão de Estoque?
Como lidar com o Domain Event AgendamentoCriado?
Publish/Subscribe ou
Observershttps://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern
https://en.wikipedia.org/wiki/Observer_pattern
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.
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.
Considerações Finais
É possível evoluir e construir um
monolito de maneira organizada.
Considere MonolithFirst
https://martinfowler.com/bliki/MonolithFirst.html
Mas lembre-se:
https://martinfowler.com/articles/dont-start-monolith.html
Obrigado!
Luiz Costa - gutomcosta@gmail.com - @gutomcosta

Mais conteúdo relacionado

Mais procurados

Monitoring Apache Kafka
Monitoring Apache KafkaMonitoring Apache Kafka
Monitoring Apache Kafkaconfluent
 
(DVO201) Scaling Your Web Applications with AWS Elastic Beanstalk
(DVO201) Scaling Your Web Applications with AWS Elastic Beanstalk(DVO201) Scaling Your Web Applications with AWS Elastic Beanstalk
(DVO201) Scaling Your Web Applications with AWS Elastic BeanstalkAmazon Web Services
 
Streaming all over the world Real life use cases with Kafka Streams
Streaming all over the world  Real life use cases with Kafka StreamsStreaming all over the world  Real life use cases with Kafka Streams
Streaming all over the world Real life use cases with Kafka Streamsconfluent
 
Api gateway in microservices
Api gateway in microservicesApi gateway in microservices
Api gateway in microservicesKunal Hire
 
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsi
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsiRoom 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsi
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsiVietnam Open Infrastructure User Group
 
Flexible, hybrid API-led software architectures with Kong
Flexible, hybrid API-led software architectures with KongFlexible, hybrid API-led software architectures with Kong
Flexible, hybrid API-led software architectures with KongSven Bernhardt
 
Kafka Retry and DLQ
Kafka Retry and DLQKafka Retry and DLQ
Kafka Retry and DLQGeorge Teo
 
Azure DDoS Protection Standard
Azure DDoS Protection StandardAzure DDoS Protection Standard
Azure DDoS Protection Standardarnaudlh
 
Asynchronous API in Java8, how to use CompletableFuture
Asynchronous API in Java8, how to use CompletableFutureAsynchronous API in Java8, how to use CompletableFuture
Asynchronous API in Java8, how to use CompletableFutureJosé Paumard
 
Performance Comparison of Streaming Big Data Platforms
Performance Comparison of Streaming Big Data PlatformsPerformance Comparison of Streaming Big Data Platforms
Performance Comparison of Streaming Big Data PlatformsDataWorks Summit/Hadoop Summit
 
Microservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SREMicroservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SREAraf Karsh Hamid
 
Azure Durable Functions
Azure Durable FunctionsAzure Durable Functions
Azure Durable FunctionsKarthikeyan VK
 
An Introduction to VMware NSX
An Introduction to VMware NSXAn Introduction to VMware NSX
An Introduction to VMware NSXScott Lowe
 
High Availability for OpenStack
High Availability for OpenStackHigh Availability for OpenStack
High Availability for OpenStackKamesh Pemmaraju
 
Solr Exchange: Introduction to SolrCloud
Solr Exchange: Introduction to SolrCloudSolr Exchange: Introduction to SolrCloud
Solr Exchange: Introduction to SolrCloudthelabdude
 
Introduction to Azure IaaS
Introduction to Azure IaaSIntroduction to Azure IaaS
Introduction to Azure IaaSRobert Crane
 
The Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudThe Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudVMware Tanzu
 
Microservices in the Apache Kafka Ecosystem
Microservices in the Apache Kafka EcosystemMicroservices in the Apache Kafka Ecosystem
Microservices in the Apache Kafka Ecosystemconfluent
 

Mais procurados (20)

Servicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWSServicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWS
 
API Gateway report
API Gateway reportAPI Gateway report
API Gateway report
 
Monitoring Apache Kafka
Monitoring Apache KafkaMonitoring Apache Kafka
Monitoring Apache Kafka
 
(DVO201) Scaling Your Web Applications with AWS Elastic Beanstalk
(DVO201) Scaling Your Web Applications with AWS Elastic Beanstalk(DVO201) Scaling Your Web Applications with AWS Elastic Beanstalk
(DVO201) Scaling Your Web Applications with AWS Elastic Beanstalk
 
Streaming all over the world Real life use cases with Kafka Streams
Streaming all over the world  Real life use cases with Kafka StreamsStreaming all over the world  Real life use cases with Kafka Streams
Streaming all over the world Real life use cases with Kafka Streams
 
Api gateway in microservices
Api gateway in microservicesApi gateway in microservices
Api gateway in microservices
 
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsi
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsiRoom 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsi
Room 1 - 2 - Nguyễn Văn Thắng & Dzung Nguyen - Proxmox VE và ZFS over iscsi
 
Flexible, hybrid API-led software architectures with Kong
Flexible, hybrid API-led software architectures with KongFlexible, hybrid API-led software architectures with Kong
Flexible, hybrid API-led software architectures with Kong
 
Kafka Retry and DLQ
Kafka Retry and DLQKafka Retry and DLQ
Kafka Retry and DLQ
 
Azure DDoS Protection Standard
Azure DDoS Protection StandardAzure DDoS Protection Standard
Azure DDoS Protection Standard
 
Asynchronous API in Java8, how to use CompletableFuture
Asynchronous API in Java8, how to use CompletableFutureAsynchronous API in Java8, how to use CompletableFuture
Asynchronous API in Java8, how to use CompletableFuture
 
Performance Comparison of Streaming Big Data Platforms
Performance Comparison of Streaming Big Data PlatformsPerformance Comparison of Streaming Big Data Platforms
Performance Comparison of Streaming Big Data Platforms
 
Microservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SREMicroservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SRE
 
Azure Durable Functions
Azure Durable FunctionsAzure Durable Functions
Azure Durable Functions
 
An Introduction to VMware NSX
An Introduction to VMware NSXAn Introduction to VMware NSX
An Introduction to VMware NSX
 
High Availability for OpenStack
High Availability for OpenStackHigh Availability for OpenStack
High Availability for OpenStack
 
Solr Exchange: Introduction to SolrCloud
Solr Exchange: Introduction to SolrCloudSolr Exchange: Introduction to SolrCloud
Solr Exchange: Introduction to SolrCloud
 
Introduction to Azure IaaS
Introduction to Azure IaaSIntroduction to Azure IaaS
Introduction to Azure IaaS
 
The Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudThe Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring Cloud
 
Microservices in the Apache Kafka Ecosystem
Microservices in the Apache Kafka EcosystemMicroservices in the Apache Kafka Ecosystem
Microservices in the Apache Kafka Ecosystem
 

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

TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azuretdc-globalcode
 
Transformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoTransformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoDarlan Segalin
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de MicroservicesDeep Tech Brasil
 
COMPUTAÇÃO EM NUVEM: ESTUDO DE CASO EM UMA EMPRESA DE TECNOLOGIA DA INFORMAÇÃO
COMPUTAÇÃO EM NUVEM: ESTUDO DE CASO EM UMA EMPRESA DE TECNOLOGIA DA INFORMAÇÃOCOMPUTAÇÃO EM NUVEM: ESTUDO DE CASO EM UMA EMPRESA DE TECNOLOGIA DA INFORMAÇÃO
COMPUTAÇÃO EM NUVEM: ESTUDO DE CASO EM UMA EMPRESA DE TECNOLOGIA DA INFORMAÇÃOAllan Reis
 
O desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicosO desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicosGraziella Bonizi
 
Arquitetura de Microserviços
Arquitetura de MicroserviçosArquitetura de Microserviços
Arquitetura de MicroserviçosNorberto Enomoto
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixNatanael Fonseca
 
ThingProvider-Proposal
ThingProvider-ProposalThingProvider-Proposal
ThingProvider-ProposalKevin Martins
 
Desenvolvimento em Nuvem
Desenvolvimento em NuvemDesenvolvimento em Nuvem
Desenvolvimento em NuvemVitor Savicki
 
Microservices Architecture Workshop
Microservices Architecture WorkshopMicroservices Architecture Workshop
Microservices Architecture WorkshopClaudio Acquaviva
 
9.cloud computing v3.1_wl_stv
9.cloud computing v3.1_wl_stv9.cloud computing v3.1_wl_stv
9.cloud computing v3.1_wl_stvwilson_lucas
 
Treinamento Tropa de Elite Aws - Business - D1
Treinamento Tropa de Elite Aws - Business - D1Treinamento Tropa de Elite Aws - Business - D1
Treinamento Tropa de Elite Aws - Business - D1Jonathan Baraldi
 

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

TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
Transformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoTransformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualização
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
 
COMPUTAÇÃO EM NUVEM: ESTUDO DE CASO EM UMA EMPRESA DE TECNOLOGIA DA INFORMAÇÃO
COMPUTAÇÃO EM NUVEM: ESTUDO DE CASO EM UMA EMPRESA DE TECNOLOGIA DA INFORMAÇÃOCOMPUTAÇÃO EM NUVEM: ESTUDO DE CASO EM UMA EMPRESA DE TECNOLOGIA DA INFORMAÇÃO
COMPUTAÇÃO EM NUVEM: ESTUDO DE CASO EM UMA EMPRESA DE TECNOLOGIA DA INFORMAÇÃO
 
O desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicosO desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicos
 
Arquitetura de Microserviços
Arquitetura de MicroserviçosArquitetura de Microserviços
Arquitetura de Microserviços
 
Monolith - An epic journey
Monolith - An epic journeyMonolith - An epic journey
Monolith - An epic journey
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
Microserviços
MicroserviçosMicroserviços
Microserviços
 
Open nebula
Open nebulaOpen nebula
Open nebula
 
ThingProvider-Proposal
ThingProvider-ProposalThingProvider-Proposal
ThingProvider-Proposal
 
Desenvolvimento em Nuvem
Desenvolvimento em NuvemDesenvolvimento em Nuvem
Desenvolvimento em Nuvem
 
Microservices Architecture Workshop
Microservices Architecture WorkshopMicroservices Architecture Workshop
Microservices Architecture Workshop
 
Microservices 2
Microservices 2Microservices 2
Microservices 2
 
9.cloud computing v3.1_wl_stv
9.cloud computing v3.1_wl_stv9.cloud computing v3.1_wl_stv
9.cloud computing v3.1_wl_stv
 
Treinamento Tropa de Elite Aws - Business - D1
Treinamento Tropa de Elite Aws - Business - D1Treinamento Tropa de Elite Aws - Business - D1
Treinamento Tropa de Elite Aws - Business - D1
 
Microservices
MicroservicesMicroservices
Microservices
 
Semac
SemacSemac
Semac
 

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