<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hennan Gadelha</title>
    <description>The latest articles on DEV Community by Hennan Gadelha (@hennangadelha).</description>
    <link>https://dev.to/hennangadelha</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F672384%2F76136c42-93ab-4d50-90ff-bf6cedc970d2.jpeg</url>
      <title>DEV Community: Hennan Gadelha</title>
      <link>https://dev.to/hennangadelha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hennangadelha"/>
    <language>en</language>
    <item>
      <title>Partner SAGA</title>
      <dc:creator>Hennan Gadelha</dc:creator>
      <pubDate>Mon, 14 Feb 2022 17:34:39 +0000</pubDate>
      <link>https://dev.to/hennangadelha/partner-saga-13g3</link>
      <guid>https://dev.to/hennangadelha/partner-saga-13g3</guid>
      <description>&lt;p&gt;Como falado no post anterior, o uso da arquitetura baseada em micro serviços vem crescendo ao longo dos últimos anos. É inquestionável os benefícios do uso desta arquitetura, entretanto o uso dela traz consigo algumas problemáticas e uma delas é o gerenciamento de dados.&lt;/p&gt;

&lt;p&gt;O padrão SAGA é uma das possíveis soluções para este problema, há duas maneiras de implementação de um SAGA, são elas: &lt;strong&gt;Coreografia&lt;/strong&gt; e &lt;strong&gt;Orquestração&lt;/strong&gt;. No decorrer do post irei explicar um pouco mais sobre cada uma delas.&lt;/p&gt;

&lt;p&gt;Com o partner  SAGA, todo serviço que realiza a transação publicará um evento. O serviço seguinte que executa a próxima transação em cadeias será acionado pela saída da transação anterior e continuará até a última transação encadeadas (Coreografia) ou também podemos ter uma micro serviço responsável por gerenciar todas as chamadas para  as transações existentes (Orquestração), um ponto importante sobre o SAGA é que toda transação deverá ser desfeita caso encontre algum problema, dentro do panorama SAGA essa ação de desfazer é chamada de:  &lt;strong&gt;Compensação&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coreografia
&lt;/h2&gt;

&lt;p&gt;Nesta forma de implementação cada um dos micro serviços envia e ouve eventos de outros micro serviços, ou seja a decisão de ação que será feita dependerá do evento anterior. A seguir mostrarei em diagrama como funcionaria a implementação do SAGA seguindo a estratégia de coreografia.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j4WwN8dE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3z28mg4vrj5j8ry2zroe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j4WwN8dE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3z28mg4vrj5j8ry2zroe.png" alt="Image description" width="880" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O fluxo em azul são as operações responsáveis por envio de eventos (linhas tracejadas) e persistência no banco de dados, já o fluxo em vermelho são as ações compensatórias aquelas que tem como função de desfazer uma ação já realizada.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Orquestração&lt;/p&gt;

&lt;p&gt;Uma outra implementação do padrão SAGA é a orquestração, nela teremos um serviço responsável por publicar e ouvir eventos para os outros micro serviços. Esse micro serviço orquestrador deverá ter a inteligência para que dependendo do retorno que receba, realizar a compensação de uma ação. A seguir um diagrama representando a implementação da SAGA em Orquestração.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5-tId8ej--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8a2pqbzpalzl275xety2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5-tId8ej--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8a2pqbzpalzl275xety2.png" alt="Image description" width="880" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O orquestrador envia e escuta eventos de todos os outros micro serviços e dependendo da resposta, ele realiza uma solicitação de compensação. Por exemplo: Caso o pagamento não for aprovado o orquestrador vai solicitar compensações para o o micro serviço de estoque devolver o item, o micro serviço de entrega cancelar a entrega e o micro serviços de pedidos ter seu status alterado. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Por fim, SAGA é uma das muitas soluções para quando se trabalha com micro serviços. Entretanto, há muitas outras tão boas quanto, por isso é necessário analisar qual partner aplicar, todos eles terão seus prós e contras.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;links úteis: &lt;a href="https://bit.ly/3HJwdW1"&gt;https://bit.ly/3HJwdW1&lt;/a&gt; &lt;br&gt;
&lt;a href="https://bit.ly/34JrXHH"&gt;https://bit.ly/34JrXHH&lt;/a&gt; &lt;br&gt;
&lt;a href="https://bit.ly/3LrgVHE"&gt;https://bit.ly/3LrgVHE&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Escrito por: Hennan Gadelha&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Arquitetura baseada em micro serviços</title>
      <dc:creator>Hennan Gadelha</dc:creator>
      <pubDate>Wed, 02 Feb 2022 03:07:52 +0000</pubDate>
      <link>https://dev.to/hennangadelha/arquitetura-baseada-em-micro-servicos-di8</link>
      <guid>https://dev.to/hennangadelha/arquitetura-baseada-em-micro-servicos-di8</guid>
      <description>&lt;p&gt;&lt;strong&gt;O que é?&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A arquitetura de micro serviços é uma abordagem na qual a aplicação é fragmentada em componentes mínimos e independentes, onde estes quando unidos formam a aplicação final.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6a4m0Ck8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wz577a7p3wjb8zctlqe7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6a4m0Ck8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wz577a7p3wjb8zctlqe7.png" alt="Image description" width="768" height="756"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qual objetivo da utilização?&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Construir um conjunto de pequenas aplicações, cada uma responsável por executar uma função.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Principais características:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;- Componentização via serviços&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Componente é uma unidade de software &lt;br&gt;
independente que pode ser substituída ou atualizada, ou seja, na arquitetura de micro serviços os serviços são divididos em unidades independentes que nas quais comunicam-se gerando um serviço maior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;- Organização em torno de capacidades de negócios&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Na arquitetura em de micro serviços a organização tem que ser em torno do negócio e não técnica. Então, cada micro serviço é um&lt;br&gt;
produto e esses produtos precisam estar organizados dentro do contexto do produto. Visando essas características pode-se&lt;br&gt;
observar pontos importantes a serem adotados: squads de desenvolvimento por produtos, squads multidisplinar (imagine uma squad formada por: front-ends, back-end, designer, QA, product&lt;br&gt;
owner e scrum master)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;- Produtos não Projetos&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Micro serviços devem ser orientados a produtos e não ao projeto em si, quando a orientação é focada no projeto normalmente temos uma equipe com objetivo de concluir o desenvolvimento do software e normalmente quando essa equipe conclui o software ela é dissolvida ou diminuída restando alguns integrantes para a manutenção, já quando a arquitetura é focado no produto temos uma equipe com toda responsabilidade daquele produto desde a codificação quanto a manutenção. A equipe ficará com responsabilidade de manter esse serviço funcionando e evoluindo de acordo com as necessidades.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;- Smart endpoints and dumb pipes&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Há diversas formas dos sistemas se comunicarem, quando falamos de micro serviços temos que entender que essa forma de comunicação deverá ser simples e rápida. Quando falamos em smart endpoints queremos dizer que: são endpoints onde sejam possíveis enviar e receber informações de maneira rápida, um exemplo disso seria comunicação via REST. Entretanto, o que são dump pipes? São os serviços que não tem uma lógica em si (por isso o dump que em tradução livre seria canos burros), eles apenas tem as responsabilidades de enviar informação para uma&lt;br&gt;
fila ou escutar informação de uma fila, esses serviços são também conhecidos como serviços de mensageria (rabbitMQ ou Kafka, por&lt;br&gt;
exemplo)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;- Governança descentralizada&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Conforme falado em princípios anteriores os micro serviços são baseados em produtos e cada produto tem sua necessidade diferente no que concerne a tecnologia e padrões de desenvolvimento. Com isso, o conceito da governança descentralizada chega para oferecer que cada micro serviço tenha um arsenal de ferramentas diferentes de acordo com sua&lt;br&gt;
necessidade.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;- Gerenciamento de dados descentralizado&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Na arquitetura baseada em micro serviços temos cada micro serviço sendo capaz de gerenciar seu próprio banco de dados. Sejam instancias diferentes do mesmo banco de dados ou até&lt;br&gt;
banco de dados diferentes, também é possível que um outro micro serviço não tenha a necessidade persistir dados. Contudo, há&lt;br&gt;
outras implicações em abordagens como esta, apesar de ganharmos em velocidade, podemos perder em consistência. Entretanto, há varias maneiras que possibilitam gerenciar as&lt;br&gt;
inconsistências, recuperando ou corrigindo os erros que possam surgir.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;- Automação de infraestrutura&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Quando se é adotado a arquitetura de micro serviços é necessário haver uma agilidade no que concerne a infraestrutura dos serviços&lt;br&gt;
construídos, ou seja é preciso haver uma velocidade ao fazer o deploy dos serviços em produção. É necessário haver um processo&lt;br&gt;
para que seja possível escalar rapidamente os micro serviços, por exemplo: Caso uma aplicação tenha pico de acessos a infra precisa estar preparada para esse contexto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;- Projetado para falhas&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Uma das consequências da componentizaçao dos serviços é que esses precisam serem projetados para que possam tolerar eventuais falhas, qualquer serviço pode cair e provavelmente&lt;br&gt;
haverá outros serviços que dependem dele. É preciso ter um plano mapeado caso um cenário como este aconteça. Essas decisões variam também por negocio, imagine o seguinte cenário: Temos uma loja virtual e o serviço de estoque por algum motivo está fora do ar. Uma das decisões seria fazer com que o cliente prossiga&lt;br&gt;
com a venda e quando o serviço voltar, dar baixa no estoque (caso não tenha o produto em questão, gerar um estorno para o cliente&lt;br&gt;
cancelando a venda). Perceba que do ponto de vista negocial não faria sentido cancelar a venda do cliente apenas porque o serviço&lt;br&gt;
de estoque caiu.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;- Design Evolutivo&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Os seus serviços/produtos tem que estar bem definidos e preparados para possíveis evoluções, no ponto de vista negocial os produtos podem ser extintos ou evoluídos. Quando se fala em design evolutivo é imprescindível falar em gerenciamento&lt;br&gt;
de versões, ou seja, tenho um e-commerce e preciso atualizar o serviço da pagamentos, entretanto esse serviço não pode ficar “offline” para a alteração. É preciso disponibilizarmos uma nova versão do serviço (que será modificada) enquanto a antiga ainda continuará funcionando, apenas depois que a nova versão tiver sido implementada e testada que faremos a troca dos serviços.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Fonte: Microservices by Martin Fowler - &lt;a href="https://bit.ly/32NdkSN"&gt;https://bit.ly/32NdkSN&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Escrito por: Hennan Gadelha&lt;/em&gt;&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
