We may earn an affiliate commission when you visit our partners.
Course image
Udemy logo

Arquitetura de Microsserviços

Padrão Saga Orquestrado

Victor Hugo Negrisoli
  • Neste curso, serão abordados os conceitos de padrões de desenvolvimento de arquitetura de microsserviços em um de seus quesitos mais importantes: lidar com transações distribuídas e tratamento de falhas.

  • Iremos abordar os conceitos teóricos por trás de transações distribuídas, two-phase commit protocol (2PC), padrão Saga Orquestrado e Coreografado, e padrão Outbox.

  • Neste curso, implementaremos o padrão Saga Orquestrado em uma arquitetura de microsserviços com Java 17 e Spring Boot 3.

  • Para isso, utilizaremos Docker e docker-compose para subir toda a nossa arquitetura com facilidade.

  • Utilizaremos 2 bancos de dados, PostgreSQL e MongoDB.

  • Utilizaremos o Apache Kafka para a comunicação dos eventos e orquestração da nossa saga.

  • Criaremos 5 APIs, em que uma será apenas o orquestrador da saga, 3 microsserviços participantes e um microsserviços de realização de pedido.

  • Ao final deste curso, você compreenderá as diferenças entre os padrões de microsserviços, os conceitos de transações distribuídas, e como realizar tratativa de erros em diversos serviços, assim como sua implementação.

  • Você também estará apto a desenvolver aplicações distribuídas com orientação a eventos (Apache Kafka) e trabalhar com Java 17 e o framework Spring Boot na versão 3, porém, o conteúdo do curso é sobre um padrão de arquitetura, e não sobre uma tecnologia específica, ou seja, com o conhecimento adquirido, você conseguirá aplicar a mesma abordagem em qualquer outra tecnologia que permita o desenvolvimento de microsserviços.

  • SEÇÃO BÔNUS

  • Foi adicionada a Seção 11 como um bônus, realizando a conversão de toda a arquitetura desenvolvida para o Padrão Saga Coreografado, desta forma, os alunos terão o conhecimento de como implementar as duas abordagens do Padrão Saga, e também compreenderão quando implementar cada abordagem dependendo da necessidade.

Enroll now

What's inside

Syllabus

Nesta seção, teremos uma introdução teórica sobre o que são microsserviços, o que são transações distribuídas, arquitetura SAGA Orquestrada e Coreografada, padrão Outbox, vantagens e desvantagens.
Read more

Nesta primeira aula, irei dar uma introdução ao curso, quem sou eu e o que aprenderemos durante todo o curso!

Este vídeo tem como objetivo apresentar tudo que será desenvolvido no curso na parte prática, tanto em código quanto de executando os projetos rodando, mostrando respostas, como e o que faremos cada aplicação. Irei mostrar os serviços rodando com docker-compose e via Swagger.

Esta é a primeira aula teórica, e nela iremos abordar o tema do que são microsserviços, o porquê de existir essa arquitetura, quais problemas ela soluciona, e também quais problemas acabam acarretando.

Nesta aula, iremos entrar nos conceitos do que são Transações Distribuídas em uma arquitetura de microsserviços, os problemas que vêm com elas, maneiras possíveis de se tratar, e também falaremos um pouco sobre o problema do 2PC - Two-Phase Commit Protocol.

Nesta aula, serão abordados os conceitos do Padrão Saga na arquitetura de microsserviços, e também da abordagem Orquestrada, tanto em seus conceitos quanto em suas vantagens e desvantagens.

Nesta aula, será abordado o conceito do Padrão Saga Coreografado em um arquitetura de microsserviços, e também serão abordadas suas vantagens e desvantagens.

Nesta aula, abordaremos o conceito do Saga Execution Controller ou SEC, que é um dos agentes mais importantes de ambas as abordagens no padrão Saga, seja ela Orquestrada ou Coreografada.

Nesta aula, será abordado o conceito do Padrão Transactional Outbox em um arquitetura de microsserviços, assim como suas vantagens e desvantagens. Será também abordado como pode ser trabalhado em conjunto com o Padrão Saga.

Nesta seção, estudaremos os conceitos de Arquitetura Orientada a Eventos e também sobre o Apache Kafka, seus conceitos e aplicações.

Nesta aula, serão abordados conceitos da Event-Drive Architecture (EDA) ou Arquitetura Orientada a Eventos, e como o Padrão Saga e o Padrão Outbox se encaixam nesses conceitos.

Nesta aula, será abordado o conceito e aplicação do Apache Kafka, uma das maiores e mais robustas ferramentas para streaming de dados atualmente.

Nesta aula, serão abordados os conceitos de tópicos, producers, consumers, consumer groups, offsets, partições, réplicas, nós e cluster no Apache Kafka, assim como uma explicação de como se comportam.

Nesta aula, entraremos no conceito de idempotência e como ele se aplica ao Apache Kafka, os problemas que a falta de tratamento de eventos idempotentes podem trazer, e também estratégias de como tratar.

Para finalizar esta seção, faremos um breve comparativo entre o Apache Kafka e o RabbitMQ, e também especificar a diferença entre filas e tópicos.

Nesta seção, iremos preparar todo o ambiente de desenvolvimento, ou seja, conectaremos todos os serviços ao Kafka e ao PostgreSQL, e por fim, subiremos toda a arquitetura com docker-compose.

Nesta aula, irei apresentar os arquivos de base para começarmos o desenvolvimento do projeto, e também as ferramentas que serão utilizadas.

Nesta aula, irei mostrar como e de onde foi tirada as definições dos serviços do Kafka e do Redpanda Console, e também iremos criar os nossos 3 serviços de PostgreSQL e nosso serviço de MongoDB. Iremos acessar os 3 bancos de dados PostgreSQL com o DBeaver, e iremos acessar o MongoDB via cli (interface de linha de comando) diretamente do Docker.

Nesta aula, iremos conectar nossas aplicações Spring Boot ao MongoDB e ao PostgreSQL, e também já iremos configurar nossas conexões utilizando Variáveis de Ambiente.

Nesta aula, iremos apenas criar as configurações de acesso ao Apache Kafka nas aplicações Spring através do arquivo de configuração, application.yml.

Nesta aula, iremos definir os nomes de todos os tópicos existentes na nossa arquitetura, e já iremos inseri-los no nosso arquivo application.yml para deixar o mapeamento correto em cada serviço. Iremos também criar o enum ETopics no Orchestrator-Service para mapear todos os tópicos da arquitetura.

Nesta aula, criaremos a classe KafkaConfig, e também as configurações de Producers e Consumers, que serão replicadas em todos os demais projetos.

Com a classe KafkaConfig criada e os consumers/producers definidos, iremos apenas mapear e criar todos os tópicos que deverão subir assim que as aplicações forem inicializadas.

Nesta aula iremos criar o serviço dos 5 microsserviços no nosso docker-compose já aplicando as configurações das variáveis de ambiente.

Nesta aula, iremos simplesmente subir todas as aplicações e validar, via logs dos containers, se todas as aplicações se conectaram aos bancos de dados e ao Kafka com sucesso, totalmente dentro do Docker, e também validaremos se os tópicos foram criados com sucesso.

Nesta seção, iremos definir toda a estruturação de diretórios e camadas da aplicação, assim como também criaremos todas as classes em comum entre os serviços, como DTOs, entidades e utilitários.

Nesta aula, iremos estruturar os diretórios dos microsserviços, dividindo as camadas de configuração e core, assim como as divisões de responsabilidades nos serviços.

Nesta aula, iremos realizar a criação de todas as DTOs que serão compartilhadas entre os microsserviços, e que possuirão atributos em comum e necessários para o desenvolvimento.

Nesta aula, iremos realizar a criação do utilitário de JSON dos microsserviços, para converter String em JSON, e JSON em Objeto. Também iremos realizar a configuração de exception de validação de erros.

Nesta aula, criaremos os producers de todas as aplicações, que terão a mesma estrutura, apenas com tópicos diferentes.

Nesta aula, criaremos os consumers de todas as aplicações, que terão a mesma estrutura, apenas com tópicos diferentes. Também iremos rodar todas as aplicações testando os consumers criados.

Nesta seção, iremos desenvolver o microsserviço order-service, desde a geração de um pedido até o recebimento da finalização da saga. Iremos criar também os endpoints REST.

Nesta aula, serão criadas as DTOs das requisições realizadas pelos endpoints de Order (pedidos) e Events (notificações). Também já serão definidas as anotações do MongoDB nas classes de Document (Order e Event), e também já criaremos as classes Repository do Spring Data MongoDB.

Nesta aula, iremos criar a nossa classe OrderService e EventService, responsáveis por gerar um pedido, gerar um evento e enviar ao Producer do Kafka para iniciar toda a nossa Saga.

Nesta aula, iremos criar o método para salvar um evento de notificação, logo após ser consumido pelo tópico notify-ending.

Nesta aula, criaremos todos os Endpoints da API. Iremos criar o endpoint POST para criar um pedido, e também os endpoints GET para recuperar os eventos salvos, tanto pelos filtros de ID do Pedido (orderId) e ID da Transação (transactionId), e também para buscar todos os eventos em ordem de criação decrescente.

Nesta aula, iremos executar a aplicação após todo o desenvolvimento, e testaremos todos os endpoints: criar pedido, buscar pedido pelo ID do pedido, buscar pedido pelo ID da transação e buscar todos os pedidos. Iremos também testar nosso consumer simulando uma resposta da nossa saga, e vendo tudo sendo atualizado no MongoDB com sucesso.

Product-Validation-Service: microsserviço para validar os produtos

Nesta aula, criaremos nossas 2 entidades de banco de dados: Product e Validation, responsáveis por guardar os produtos existentes, e validar se um pedido está com os produtos corretos para seguir na saga.

Nesta rápida aula, iremos apenas criar um arquivo SQL que sempre será executado quando subirmos a aplicação, para que tenhamos nossos produtos já inseridos no banco de dados toda vez que a aplicação subir.

Nesta aula, iniciaremos a criação da nossa classe ProductValidationService, e também já estaremos criando toda a validação de sucesso dos produtos da saga.

Nesta aula, continuaremos o desenvolvimento da nossa classe ProductValidationService, e iremos finalizá-la criando a lógica para a realização do rollback da validação dos produtos da saga.

Nesta aula, iremos testar rodar a aplicação, e também iremos utilizar o Redpanda-Console para publicar eventos de sucesso e falha, para testar a lógica dos status de envio ao Producer. Iremos também validar os dados no PostgreSQL.

Payment-Service: microsserviço para realizar pagamentos

Nesta aula, iremos criar a nossa entidade de banco de dados Payment, que irá registrar dados de pagamento. E também já incluiremos o PaymentRepository para habilitar as funcionalidades de acesso ao banco de dados.

Nesta aula iremos criar nossa PaymentService, e já realizaremos toda a lógica para criar um pagamento com status PENDING (PENDENTE).

Nesta aula iremos continuar o desenvolvimento da PaymentService, e já realizaremos toda a lógica para criar atualizar um pagamento para o status SUCCESS (SUCESSO). Também já realizaremo o cálculo do total de itens do pedido, e do valor total do pedido.

Nesta aula, criaremos a lógica de realização de estorno (rollback), para mudar o status do pagamento para REFUND (reembolso). Iremos também

Testando o microsserviço com o Redpanda-Console

Essa aula é apenas um adendo à lógica de realização de estorno, o rollback do caso de falha, pois há um bug na lógica desenvolvida. Aqui, iremos basicamente realizar a correção e simular o problema que foi corrigido no ambiente.

Inventory-Service: microsserviço de inventário/estoque

Nesta aula, iremos criar as 2 entidades de banco de dados necessárias para este microsserviço, são elas Inventory e OrderInventory. Elas irão guardar dados dos valores disponíveis em estoque para cada produto. Já estaremos também criando as classes Repository de acesso ao banco de dados.

Nesta aula, iremos apenas criar o script SQL que irá inserir os valores de estoque disponíveis para cada produto. Assim que a aplicação subir, teremos os dados já definidos.

Nesta aula, criaremos a classe InventoryService, e desenvolveremos a lógica para criar os itens de estoque do pedido, que registrarão os dados necessários para informar a quantidade de itens do pedido, a quantidade de itens em estoque no momento, e a nova quantidade após a atualização, para mantermos o controle do pedido e do estoque.

Nesta aula, criaremos a lógica para atualizar o estoque (dar baixa). Iremos também validar quando um produto está fora de estoque conforme a quantidade desejada no pedido.

Nesta aula, implementaremos o método de rollback do inventário para voltar o estoque aos valores anteriores no caso de alguma falha, e já iremos também ligar o consumer com os métodos de atualização e rollback de estoque.

Nesta aula, iremos rodar a aplicação com o PostgreSQL, Kafka e Redpanda-Console para testar os consumers para atualizar e realizar rollback no estoque, e validar todos os casos que desenvolvemos.

Orchestrator-Service: microsserviço Orquestrador da saga

Nesta aula, iniciaremos o desenvolvimento da classe Saga Handler, que irá realizar o mapeamento de toda a lógica de orquestração dos tópicos para cada serviço em cada status diferente.

Nesta aula, iniciaremos o desenvolvimento da classe Saga Execution Controller, que irá realizar a lógica para logar a saga e recuperar o próximo tópico da execução.

Nesta aula, iniciaremos o desenvolvimento da classe OrchestratorService, que irá realizar a lógica para receber os dados da saga e redirecionar para o producer conforme a necessidade da execução atual.

Nesta aula, iremos apenas rodar o microsserviço de orquestração e verificar se o que desenvolvemos está devidamente obedecendo à lógica que esperamos.

Nesta aula, iremos executar toda nossa arquitetura desenvolvida até então, rodando com Docker-Compose, executando os endpoints e o Kafka, e visualizando tudo com o Redpanda-Console e as bases do PostgreSQL!

Finalização: analisando a arquitetura desenvolvida e o que continuar estudando

Nesta aula, iremos comparar tudo que foi desenvolvido no conteúdo prático do curso ao longo das 9 seções, e iremos comparar tudo que foi desenvolvido com os temas teóricos sobre Transações Distribuídas, Padrão Saga, Kafka e conceitos apresentados, para validar se o que foi implementado está condizente com o material de estudo teórico.

Nesta aula, irei dar algumas dicas de como encontrar, compreender e estudar a infinidade de padrões existentes para a implementação de arquitetura de microsserviços, e dicas do que continuar estudando neste tema, e nos demais que também foram abordados durante o curso.

SEÇÃO BÔNUS: convertendo a arquitetura para Saga Coreografado

Nesta aula, irei apresentar o que será feito nesta seção bônus, dando uma introdução à conversão do projeto atual em uma arquitetura Saga Coreografada, e também quais serão os objetivos dessa conversão.

Nesta aula, iremos criar o projeto de Saga Coreografado partindo do projeto Saga Orquestrado, iremos replicar a estrutura e realizar as importações das bibliotecas. Iremos também realizar o ajuste nas nomenclaturas dos arquivos base e diretórios principais dos projetos.

Nesta aula, definiremos no application.yml todos os tópicos responsáveis para cada aplicação, seguindo nosso desenho de arquitetura de Saga Coreografado.

Nesta aula, definiremos na classe KafkaConfig todos os beans de criação de tópicos responsáveis para cada aplicação, seguindo nosso desenho de arquitetura de Saga Coreografado.

Nesta aula, ajustaremos todos os producers e consumers para publicar/consumir os novos tópicos definidos.

Nesta aula, alteraremos o comportamento da aplicação Order-Service para criar e receber eventos, substituindo o papel que antes ficava com o orquestrador.

Nesta aula, criaremos a classe SagaExecutionController em cada um dos 3 microsserviços participantes da saga, ajustando os tópicos conforme necessário.

Nesta aula, por fim, iremos rodar toda nossa arquitetura com o padrão Saga Coreografado, verificar seu comportamento e funcionalidades.

Nesta aula, irei executar as 2 abordagens desenvolvidas e realizar comparações entre elas, baseando-se nos conceitos teóricos apresentados.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Desenvolvido por Victor Hugo Negrisoli, especialista no assunto
O curso aborda conceitos importantes para lidar com transações distribuídas e tratamento de falhas na arquitetura de microsserviços
Oferece implementação prática do padrão Saga Orquestrado em Java 17 e Spring Boot 3, utilizando Docker e docker-compose
Ensina conceitos teóricos e práticos sobre transações distribuídas, padrões Saga, e padrão Outbox
Fornece uma seção bônus com a implementação do padrão Saga Coreografado, permitindo que os alunos compreendam as duas abordagens

Save this course

Save Arquitetura de Microsserviços: Padrão Saga Orquestrado to your list so you can find it easily later:
Save

Activities

Coming soon We're preparing activities for Arquitetura de Microsserviços: Padrão Saga Orquestrado. These are activities you can do either before, during, or after a course.

Career center

Learners who complete Arquitetura de Microsserviços: Padrão Saga Orquestrado will develop knowledge and skills that may be useful to these careers:
Software Engineer
Software Engineers are responsible for designing, developing, and maintaining software systems. They use their knowledge of programming languages and software development tools to create new software applications or improve existing ones. This course will help you build a foundation in software development and prepare you for a career as a Software Engineer. You will learn about the principles of software design, coding techniques, and testing methodologies.
Web Developer
Web Developers are responsible for designing, developing, and maintaining websites. They use their knowledge of HTML, CSS, and JavaScript to create user-friendly and visually appealing websites. This course will help you build a foundation in web development and prepare you for a career as a Web Developer. You will learn about the principles of web design, coding techniques, and testing methodologies.
Data Analyst
Data Analysts are responsible for collecting, cleaning, and analyzing data. They use their knowledge of statistics and data analysis tools to identify trends, patterns, and insights. This course will help you build a foundation in data analysis and prepare you for a career as a Data Analyst. You will learn about the principles of data analysis, statistical techniques, and data visualization techniques.
Systems Analyst
Systems Analysts are responsible for analyzing and designing computer systems. They use their knowledge of systems analysis tools and techniques to identify and solve business problems. This course will help you build a foundation in systems analysis and prepare you for a career as a Systems Analyst. You will learn about the principles of systems analysis, systems design techniques, and systems implementation techniques.
Business Analyst
Business Analysts are responsible for analyzing business processes and identifying areas for improvement. They use their knowledge of business analysis tools and techniques to develop solutions that improve efficiency and effectiveness. This course will help you build a foundation in business analysis and prepare you for a career as a Business Analyst. You will learn about the principles of business analysis, process improvement techniques, and data analysis techniques.
Project Manager
Project Managers are responsible for planning, executing, and closing projects. They use their knowledge of project management tools and techniques to ensure that projects are completed on time, within budget, and to the required quality standards. This course will help you build a foundation in project management and prepare you for a career as a Project Manager. You will learn about the principles of project management, project planning techniques, and project control techniques.
Quality Assurance Analyst
Quality Assurance Analysts are responsible for testing and evaluating software products. They use their knowledge of testing tools and techniques to identify and fix defects. This course will help you build a foundation in quality assurance and prepare you for a career as a Quality Assurance Analyst. You will learn about the principles of quality assurance, testing techniques, and defect management techniques.
Database Administrator
Database Administrators are responsible for managing and maintaining databases. They use their knowledge of database management tools and techniques to ensure that databases are available, reliable, and secure. This course will help you build a foundation in database administration and prepare you for a career as a Database Administrator. You will learn about the principles of database management, database design techniques, and database security techniques.
Technical Writer
Technical Writers are responsible for creating documentation for software products. They use their knowledge of writing techniques and software development tools to create user manuals, technical white papers, and other documentation. This course will help you build a foundation in technical writing and prepare you for a career as a Technical Writer. You will learn about the principles of technical writing, writing techniques, and software development tools.
Computer Scientist
Computer Scientists are responsible for researching and developing new computer technologies. They use their knowledge of computer science principles and programming languages to create new software and hardware products. This course will help you build a foundation in computer science and prepare you for a career as a Computer Scientist. You will learn about the principles of computer science, programming languages, and software development tools.
Network Administrator
Network Administrators are responsible for managing and maintaining computer networks. They use their knowledge of networking tools and techniques to ensure that networks are available, reliable, and secure. This course will help you build a foundation in network administration and prepare you for a career as a Network Administrator. You will learn about the principles of network administration, networking tools, and network security techniques.
Security Analyst
Security Analysts are responsible for protecting computer systems from security threats. They use their knowledge of security tools and techniques to identify and mitigate security risks. This course will help you build a foundation in security analysis and prepare you for a career as a Security Analyst. You will learn about the principles of security analysis, security tools, and security risk management techniques.
Information Technology Specialist
Information Technology Specialists are responsible for providing technical support to users of computer systems. They use their knowledge of computer hardware and software to troubleshoot and resolve technical problems. This course will help you build a foundation in information technology and prepare you for a career as an Information Technology Specialist. You will learn about the principles of information technology, computer hardware, and software.
Data Engineer
Data Engineers are responsible for designing, building, and maintaining data pipelines. They use their knowledge of data engineering tools and techniques to ensure that data is available, reliable, and secure. This course will help you build a foundation in data engineering and prepare you for a career as a Data Engineer. You will learn about the principles of data engineering, data pipelines, and data quality techniques.
Machine Learning Engineer
Machine Learning Engineers are responsible for developing and deploying machine learning models. They use their knowledge of machine learning algorithms and programming languages to create models that can learn from data and make predictions. This course will help you build a foundation in machine learning and prepare you for a career as a Machine Learning Engineer. You will learn about the principles of machine learning, machine learning algorithms, and programming languages.

Reading list

We've selected six books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Arquitetura de Microsserviços: Padrão Saga Orquestrado.
Practical guide to designing and building data-intensive applications, covering topics such as data modeling, data storage, and data processing. It valuable resource for anyone who is looking to learn more about the fundamentals of data management.
Comprehensive guide to designing and building microservices, covering topics such as service design, API design, and deployment. It valuable resource for anyone who is looking to learn more about the principles and practices of microservices.
Collection of patterns for designing and implementing microservices, covering topics such as service discovery, load balancing, and fault tolerance. It valuable resource for anyone who is looking to learn more about the best practices for building microservices.
Comprehensive guide to Apache Kafka, covering topics such as Kafka architecture, Kafka operations, and Kafka development. It valuable resource for anyone who is looking to learn more about the principles and practices of Apache Kafka.
Practical guide to Java concurrency, covering topics such as thread safety, synchronization, and performance. It valuable resource for anyone who is looking to learn more about the principles and practices of Java concurrency.
Practical guide to Spring Boot, covering topics such as Spring Boot architecture, Spring Boot configuration, and Spring Boot development. It valuable resource for anyone who is looking to learn more about the principles and practices of Spring Boot.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Arquitetura de Microsserviços: Padrão Saga Orquestrado.
Desenvolvimento Web Completo - 20 cursos + 20 projetos
Most relevant
Criar interfaces do usuário (IU) dinâmicas para sites
Most relevant
Fundamentos de Arduino - Uma Abordagem Completa
Most relevant
Arduino Avançado – Circuitos E Projetos
Most relevant
Getting Started with Google Kubernetes Engine - Português...
Most relevant
Implementar um AWS EKS Cluster e uma Web App usando EKSCTL
Most relevant
Segurança de TI: Defesa Contra as Artes Obscuras do Mundo...
Most relevant
Processamento de Linguagem Natural com BERT e Python
Most relevant
Princípios básicos da publicidade em mídias sociais
Most relevant
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser