{"id":2760,"date":"2022-07-25T21:03:29","date_gmt":"2022-07-26T00:03:29","guid":{"rendered":"https:\/\/elemarjr.com\/arquiteturadesoftware\/?p=2760"},"modified":"2024-01-12T18:19:16","modified_gmt":"2024-01-12T21:19:16","slug":"projetando-sistemas-com-microsservicos","status":"publish","type":"volume-1","link":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/","title":{"rendered":"Cap 3.6 Projetando sistemas com microsservi\u00e7os"},"content":{"rendered":"<strong>Desde 2010, &#8220;microsservi\u00e7os&#8221; \u00e9 t\u00f3pico &#8220;quente&#8221; em arquitetura de software.<\/strong> Com a promessa de facilitar a implementa\u00e7\u00e3o de mudan\u00e7as, reduzindo\u00a0<em>lead-times,\u00a0<\/em>melhorando a frequ\u00eancia de deploy, controlando taxas de erros e reduzindo o MTTR, o estilo arquitetural parece ter o <em>fit\u00a0<\/em>ideal com as modernas demandas de engenharia.\n<hr \/>\nH\u00e1 in\u00fameros <em>cases\u00a0<\/em>de implementa\u00e7\u00f5es bem-sucedidas de sistemas compostos por microsservi\u00e7os, entretanto, \u00e9 importante destacar que a abordagem n\u00e3o constitui uma uma solu\u00e7\u00e3o &#8220;bala de prata&#8221;. Entretanto, tem m\u00e9ritos e dem\u00e9ritos que, se bem ponderados, tem poder de transformar organiza\u00e7\u00f5es para melhor.\n<h2>Conceito fundamental<\/h2>\n<p><strong>Microsservi\u00e7os s\u00e3o (surpresa) servi\u00e7os com interfaces p\u00fablicas enxutas e extremamente coesas.<\/strong><\/p>\n<div style=\"background-color: #f0eef4; width: 100%; padding: 35px 30px 20px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px;\">\r\n<p style=\"font-size: 24px; font-weight: bold; line-height: 28px; font-family: Montserrat; color: #432b75;\">Defini\u00e7\u00e3o: Servi\u00e7o<\/p>\r\n<p style=\"font-size: 16px; font-weight: Regular; line-height: 20px; font-family: Roboto; color: #45365d;\"><\/p>\n<p>Um servi\u00e7o \u00e9 um mecanismo que permite acesso a uma ou mais\u00a0<em>capabilities <\/em>atrav\u00e9s de uma interface p\u00fablica expl\u00edcita.<\/p>\n<p><\/p>\r\n<\/div>\n<p>A interface p\u00fablica de um servi\u00e7o habilita a &#8220;entrada e sa\u00edda&#8221; de informa\u00e7\u00f5es, tanto de forma s\u00edncrona &#8211; em um modelo baseado em\u00a0<em>request\/response\u00a0<\/em>&#8211; quanto ass\u00edncrona &#8211; atrav\u00e9s de troca de mensagens com comandos ou\u00a0eventos.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-5244 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Imagem-01.png\" alt=\"\" width=\"678\" height=\"155\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Imagem-01.png 2865w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Imagem-01-300x68.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Imagem-01-1024x234.png 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Imagem-01-768x175.png 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Imagem-01-1536x351.png 1536w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Imagem-01-2048x468.png 2048w\" sizes=\"(max-width: 678px) 100vw, 678px\" \/><\/p>\n<p>Interfaces p\u00fablica enxutas e coesas, bem delimitadas, fazem com que microsservi\u00e7os sejam mais f\u00e1ceis de entender, tanto em sua l\u00f3gica interna quanto em demandas de integra\u00e7\u00e3o\/coopera\u00e7\u00e3o.<\/p>\n<p>A arquitetura de software em sistemas inteiros, empregando microsservi\u00e7os, objetiva ponderar complexidades na manuten\u00e7\u00e3o de cada componente isoladamente &#8211; ou seja, a <span style=\"text-decoration: underline;\">complexidade local<\/span> -, sem ignorar as intera\u00e7\u00f5es desses componentes com o restante do sistema &#8211; ou seja, a <span style=\"text-decoration: underline;\">complexidade global<\/span>.<\/p>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-livro-coluna-1\" valign=\"top\"><img decoding=\"async\" src=\"https:\/\/sd.arquiteturadesoftware.online\/wp-content\/uploads\/2022\/06\/livro-arquitetura-sd.png\" alt=\"\" width=\"150\" \/><\/td>\r\n<td class=\"nota-livro-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"https:\/\/sd.arquiteturadesoftware.online\/wp-content\/uploads\/2022\/06\/livro-arquitetura-sd.png\" alt=\"\" width=\"150\" \/>\r\n<p style=\"font-size: 24px; font-weight: bold; color: #4c4c4c; line-height: 1.0; font-family: Lufga; margin-bottom: 10px;\">Determinando a granularidade ideal para microsservi\u00e7os<\/p>\r\n<p style=\"font-size: 20px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Lufga; margin-bottom: 10px;\">Manual do Arquiteto de Software - Sistemas distribu\u00eddos<\/p>\r\nInteressado em como determinar o &#8220;tamanho&#8221; de um microsservi\u00e7o? Nesse cap\u00edtulo, trato de aspectos relevantes para a modulariza\u00e7\u00e3o e, ent\u00e3o, granularidade.\r\n<p><a class=\"botao-livro\" href=\"https:\/\/sd.arquiteturadesoftware.online\/determinando-a-granularidade-ideal-para-microsservicos-capitulo-3-v-1-2\/\" target=\"_blank\" rel=\"noopener\">Ler cap\u00edtulo<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">REST (HTTP resource API) ou gRPC<\/p>\r\n<\/p>\n<p>Comunica\u00e7\u00e3o intensiva entre servi\u00e7os utilizando a combina\u00e7\u00e3o HTTP\/1.1 e JSON \u00e9 um &#8220;pedido&#8221; para problemas de performance. Seja pelas limita\u00e7\u00f5es do protocolo de comunica\u00e7\u00e3o ou pela &#8220;verbosidade&#8221; do formato JSON.<\/p>\n<p>Recentemente, t\u00eam ganho destaque a utiliza\u00e7\u00e3o de gRPC (que opera sobre HTTP\/2) combinada <em>protocol buffers<\/em>.<\/p>\n<p><\/div>\n<div class=\"nota-insight\">\r\n<table class=\"tabelainsight\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img decoding=\"async\" class=\"img-insight\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/> Adote REST para comunica\u00e7\u00e3o &#8220;com o mundo exterior&#8221; e outro padr\u00e3o, mais eficiente, para comunica\u00e7\u00e3o &#8220;interna&#8221;.<\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">API Layer<\/p>\r\n<\/p>\n<p>A maioria das arquiteturas baseadas em microsservi\u00e7os implementa alguma forma de &#8220;camada de API&#8221;, muitas vezes implementadas por um API Gateway, conectando usu\u00e1rios externos (interfaces ou sistemas de terceiros) aos microsservi\u00e7os. Trata-se de uma abordagem opcional, mas recomendada.<\/p>\n<p>Essa estrat\u00e9gia permite a cria\u00e7\u00e3o facilitada de APIs externas, facilitando a ado\u00e7\u00e3o, al\u00e9m de poder implementar\u00a0<em>shared concerns\u00a0<\/em>como autentica\u00e7\u00e3o e localiza\u00e7\u00e3o. Entretanto, \u00e9 importante destacar que n\u00e3o devem ser atribu\u00eddas a essa camada responsabilidades de orquestra\u00e7\u00e3o.<\/p>\n<p><\/div>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-livro-coluna-1\" valign=\"top\"><img decoding=\"async\" src=\"https:\/\/m.media-amazon.com\/images\/I\/519hB5niytL.jpg\" alt=\"\" width=\"150\" \/><\/td>\r\n<td class=\"nota-livro-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"https:\/\/m.media-amazon.com\/images\/I\/519hB5niytL.jpg\" alt=\"\" width=\"150\" \/>\r\n<p style=\"font-size: 20px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">Building Microservices<\/p>\r\nA primeira edi\u00e7\u00e3o desse livro, de Sam Newman foi, talvez,\u00a0 a primeira obra relevante sobre microsservi\u00e7os. Na segunda edi\u00e7\u00e3o, o livro foi praticamente reescrito. \r\n<p><a class=\"botao-livro\" href=\"https:\/\/www.amazon.com.br\/Building-Microservices-English-Sam-Newman-ebook\/dp\/B09B5L4NVT\" target=\"_blank\" rel=\"noopener\">Acessar livro<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h2>Rela\u00e7\u00e3o com <em>Squads<\/em><\/h2>\nN\u00e3o \u00e9 recomend\u00e1vel formar <em>squads\u00a0<\/em>em uma organiza\u00e7\u00e3o, sem revisar a arquitetura do software que ela produz. Tampouco \u00e9 respons\u00e1vel iniciar um projeto baseado em (micros)servi\u00e7os sem, antes, fazer uma revis\u00e3o da estrutura organizacional.\n<hr \/>\n<p>A\u00a0<a href=\"https:\/\/www.eximia.co\/pt\/2019\/08\/21\/conways-law\/\">lei de Conway \u00e9 categ\u00f3rica<\/a>\u00a0e suas implica\u00e7\u00f5es s\u00e3o \u00f3bvias:\u00a0<strong>Uma organiza\u00e7\u00e3o monol\u00edtica n\u00e3o consegue produzir microsservi\u00e7os. Empresas que produzem softwares monol\u00edticos n\u00e3o deveriam ter \u201csquads\u201d.<\/strong><\/p>\n<div class=\"nota-techbiz\">\r\n<table class=\"tabelatechbiz\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-techbiz-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/avatar-tech-biz-2.png\" alt=\"\" width=\"100\" height=\"120\" \/><\/td>\r\n<td class=\"nota-techbiz-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/avatar-tech-biz-2.png\" alt=\"\" width=\"100\" height=\"120\" \/>\r\n<p style=\"font-size: 24px; font-weight: bold; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">Lei de Conway<\/p>\r\nQuerendo saber mais sobre a lei de Conway? Assista esse epis\u00f3dio do Tech &amp; Biz.\r\n<p><a class=\"botao\" href=\"https:\/\/technbiz.eximia.co\/a-lei-de-conway-2\/\" target=\"_blank\" rel=\"noopener\">Acessar epis\u00f3dio<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">Squad<\/p>\r\n<\/p>\n<p><em>Squads\u00a0<\/em>s\u00e3o times pequenos, com grande autonomia, multi-disciplinares que operam dando \u00eanfase a agilidade no lugar metodologias e, tamb\u00e9m, princ\u00edpios no lugar pr\u00e1ticas. Eles resultam produtos, n\u00e3o projetos, por isso s\u00e3o respons\u00e1veis por todo o ciclo de vida (<em>end-to-end<\/em>) .<\/p>\n<p>O termo foi lan\u00e7ado pelo Spotify e \u00e9 conceito central da celebrada cultura de engenharia da empresa.<\/p>\n<p><\/div>\n<em>Squads<\/em> s\u00e3o times multifuncionais, que conseguem desempenhar atividades organizacionais de ponta-a-ponta, com\u00a0<a href=\"https:\/\/www.eximia.co\/pt\/2019\/07\/31\/o-que-considerar-antes-de-adotar-squads-em-sua-organizacao\/\">autonomia e alinhamento<\/a>.\u00a0\u00a0<strong>Eles reduzem a burocracia da organiza\u00e7\u00e3o pois reduzem a necessidade de\u00a0<a href=\"https:\/\/www.eximia.co\/pt\/2019\/07\/12\/quando-nao-ha-confianca-emerge-a-burocracia\/\">documentos que nascem da falta de confian\u00e7a<\/a>.\u00a0<\/strong>Afinal, pessoas de um mesmo time costumam confiar mais umas nas outras.\n<hr \/>\n<p>Para ter autonomia, as \u201centregas\u201d de um <em>squad\u00a0<\/em>devem ocorrer de forma independente.\u00a0Se as entregas de um\u00a0<em>squad\u00a0<\/em>precisarem ser feitas com as de outros, acordos s\u00e3o necess\u00e1rios e a burocracia-para-confian\u00e7a emerge.<\/p>\n<p><strong>Apenas times realmente aut\u00f4nomos conseguem produzir (micros)servi\u00e7os com baixo acoplamento.\u00a0<\/strong>Microsservi\u00e7os com alto acoplamento n\u00e3o se justificam pois s\u00e3o, apenas, um pesadelo para a opera\u00e7\u00e3o.<\/p>\n<p><strong>S\u00e3o necess\u00e1rios times realmente independentes para produzir (micros)servi\u00e7os que n\u00e3o compartilham banco de dados.<\/strong><\/p>\nA comunica\u00e7\u00e3o entre (micros)servi\u00e7os ser\u00e1 naturalmente ass\u00edncrona, se a comunica\u00e7\u00e3o entre os times que os produzem tamb\u00e9m for. <strong>Comunica\u00e7\u00e3o s\u00edncrona entre (micros)servi\u00e7os revela, mais que poss\u00edvel falha de design de software, falha de design organizacional.<\/strong>\n<hr \/>\n<h4>Quando um <em>squad<\/em> desenvolve muitos microsservi\u00e7os<\/h4>\n<p>Por mais que se tome cuidado no processo de elabora\u00e7\u00e3o da arquitetura, muitas vezes s\u00e3o as estruturas organizacionais, formadas a partir de \u00e1reas de especialidade, que levam times a desenvolver microsservi\u00e7os que atendem apenas demandas locais.<\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Community_structure#\/media\/File:Network_Community_Structure.svg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3054 aligncenter\" src=\"https:\/\/www.eximia.co\/wp-content\/uploads\/sites\/2\/2020\/05\/Network_Community_Structure.jpg\" alt=\"\" width=\"383\" height=\"406\" \/><\/a><\/p>\n<p>Na pr\u00e1tica, as \u201ccomunidades\u201d da organiza\u00e7\u00e3o tendem a se replicar na estrutura dos servi\u00e7os criando pontos de interface restritos com alta centralidade.<\/p>\n<div class=\"card-insight\">\n<p>De qualquer forma, \u00e9 importante recordar que microsservi\u00e7os de boa qualidade implementam, de forma desacoplada,\u00a0<em>capabilities\u00a0<\/em>das organiza\u00e7\u00f5es. Logo, deveriam ser \u00fateis muito al\u00e9m das fronteiras dos times que os desenvolveram, reduzindo a centralidade e, de maneira geral, colaborando para mitiga\u00e7\u00e3o de pontos de fragilidade.<\/p>\n<p><strong>A identifica\u00e7\u00e3o de \u201ccomunidades de microsservi\u00e7os\u201d pode e deve ser facilitada pelo acompanhamento din\u00e2mico e cont\u00ednuo dos coeficientes de agrupamento local.<\/strong><\/p>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">Coeficiente de agrupamento local<\/p>\r\n<\/p>\n<p>Na\u00a0<a title=\"Teoria dos grafos\" href=\"https:\/\/pt.wikipedia.org\/wiki\/Teoria_dos_grafos\">teoria dos grafos<\/a>, o\u00a0<b>coeficiente de agrupamento<\/b>\u00a0(<i>clustering coefficient<\/i>) mede o grau com que os n\u00f3s de um\u00a0<a class=\"mw-redirect\" title=\"Grafo\" href=\"https:\/\/pt.wikipedia.org\/wiki\/Grafo\">grafo<\/a>\u00a0tendem a agrupar-se.<\/p>\n<p>O coeficiente de agrupamento local de um v\u00e9rtice (n\u00f3) num grafo mede o qu\u00e3o perto os seus vizinhos est\u00e3o de serem um clique (grafo completo). Por outras palavras, pode dizer-se que o coeficiente de agrupamento local mede o grau da densidade de liga\u00e7\u00f5es da vizinhan\u00e7a de um determinado n\u00f3, isto \u00e9, corresponde ao grau com que os vizinhos de um n\u00f3 se interligam.<\/p>\n<p><\/div>\n<p>O coeficiente de agrupamento local de um microsservi\u00e7o \u00e9 calculado como sendo a propor\u00e7\u00e3o das liga\u00e7\u00f5es existentes entre os microsservi\u00e7os que este acessa em rela\u00e7\u00e3o com o total das liga\u00e7\u00f5es poss\u00edveis. Quando maior for o coeficiente, maiores s\u00e3o os ind\u00edcios de forma\u00e7\u00e3o de \u201ccomunidade\u201d.<\/p>\n<\/div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5261 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-01-scaled.jpg\" alt=\"\" width=\"581\" height=\"218\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-01-scaled.jpg 2560w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-01-300x113.jpg 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-01-1024x384.jpg 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-01-768x288.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-01-1536x577.jpg 1536w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-01-2048x769.jpg 2048w\" sizes=\"(max-width: 581px) 100vw, 581px\" \/><\/p>\n<div class=\"card-insight\">\n<p>Quanto maiores forem os coeficientes de agrupamento local, por correla\u00e7\u00e3o, maiores s\u00e3o as chances de\u00a0<em>changing coupling\u00a0<\/em>que podem ser verificados nos controles de vers\u00e3o. Consequentemente, mais intensos devem ser os questionamentos quanto ao \u201creagrupamento\u201d das bases de c\u00f3digo.<\/p>\n<p>A comprova\u00e7\u00e3o sistem\u00e1tica e recorrente de coeficientes de agrupamento elevados deve implicar em estudos mais aprofundados das causas. N\u00e3o \u00e9 incomum que a forma\u00e7\u00e3o de \u201ccomunidades de microsservi\u00e7os\u201d indique deteriora\u00e7\u00e3o no relacionamento entre os times da organiza\u00e7\u00e3o e, disto, a demanda por revis\u00f5es da estrutura organizacional. Outra possibilidade \u00e9 que o \u201colhar\u201d dos times, embora com sistemas distribu\u00eddos, permane\u00e7a \u201cviciado\u201d em uma estrutura monol\u00edtica, indicando a\u00e7\u00f5es de desenvolvimento de pessoas das equipes t\u00e9cnicas.<\/p>\n<h2>Rela\u00e7\u00e3o com DevOps<\/h2>\nN\u00e3o \u00e9 exagero dizer que sistemas baseados em microsservi\u00e7os transferem a complexidade do desenvolvimento, reduzindo o tamanho do c\u00f3digo, para as opera\u00e7\u00f5es, pelo aumento da dimensionalidade.\n<hr \/>\n<p><strong>N\u00e3o percamos de vista que microsservi\u00e7os tem como objetivo central reduzir acoplamento. Estruturas organizacionais desfavor\u00e1veis, entretanto, acabam &#8220;for\u00e7ando&#8221; acoplamento emergente.<\/strong> Por exemplo, times centralizados para gerenciar bancos de dados e opera\u00e7\u00f5es &#8220;gargalam&#8221; a estrutura, &#8220;monolitizando&#8221; administra\u00e7\u00e3o dos bancos e gest\u00e3o do ambiente produtivo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5264 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-04-scaled.jpg\" alt=\"\" width=\"478\" height=\"349\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-04-scaled.jpg 2560w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-04-300x219.jpg 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-04-1024x748.jpg 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-04-768x561.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-04-1536x1122.jpg 1536w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-04-2048x1496.jpg 2048w\" sizes=\"(max-width: 478px) 100vw, 478px\" \/><\/p>\n<p>O esfor\u00e7o em microsseriv\u00e7os implica na elimina\u00e7\u00e3o dessas &#8220;barreiras&#8221;. Logo, segundo Conway, o idela \u00e9 trazer opera\u00e7\u00f5es para dentro das <em>Squads<\/em>, conciliando com atividades de desenvolvimento.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5265 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-05-scaled.jpg\" alt=\"\" width=\"478\" height=\"370\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-05-scaled.jpg 2560w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-05-300x232.jpg 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-05-1024x792.jpg 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-05-768x594.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-05-1536x1189.jpg 1536w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-05-2048x1585.jpg 2048w\" sizes=\"(max-width: 478px) 100vw, 478px\" \/><\/p>\n<\/div>\n<h2>Implica\u00e7\u00f5es para a reutiliza\u00e7\u00e3o<\/h2>\n<p>Uma das &#8220;fontes inocentes&#8221; para acoplamento \u00e9 a insist\u00eancia por alternativas para reutiliza\u00e7\u00e3o.<\/p>\n<div class=\"nota-alerta\">\r\n<table class=\"tabelaalerta\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" class=\"img-citacao\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/> <\/p>\n<p><em>O trade-off negativo da reutiliza\u00e7\u00e3o \u00e9 o acoplamento. Quando um arquiteto projeta um sistema favorecendo o reuso, ele tamb\u00e9m favorece ao acoplamento para permitir esse reuso, seja por heran\u00e7a ou composi\u00e7\u00e3o.<\/em><\/p>\n<p>\r\n<p><strong>Neil Ford<\/strong><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p>Toda alternativa de reutiliza\u00e7\u00e3o faz emergir um componente com acoplamento aferente elevado que, mais cedo ou mais tarde, se converte em &#8220;gargalo&#8221; para o desenvolvimento.<\/p>\nSegundo Conway, componentes &#8220;gargalo&#8221; se traduzem em times gargalo, caso se d\u00ea atribui\u00e7\u00e3o de &#8220;propriedade&#8221; a algum, ou em pontos cr\u00edticos de falha devido a alta difus\u00e3o de responsabilidade.\n<hr \/>\n<p>A emerg\u00eancia por alternativas para a gest\u00e3o de componentes deu origem a iniciativas de <em>inner sourcing.<\/em><\/p>\n<h4>Reutiliza\u00e7\u00e3o de recursos operacionais<\/h4>\n<p>A op\u00e7\u00e3o por duplica\u00e7\u00e3o frente a reutiliza\u00e7\u00e3o \u00e9 v\u00e1lida para artefatos funcionais, mas n\u00e3o para recursos operacionais (tais como\u00a0<em>logging\u00a0<\/em>e monitoramento).\u00a0A abordagem comum \u00e9 manter recursos funcionais &#8220;dentro&#8221; dos microsservi\u00e7os, duplicados sempre que necess\u00e1rio, e recursos operacionais &#8220;fora&#8221;, em\u00a0<em>sidecars.<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5262 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-02.jpg\" alt=\"\" width=\"165\" height=\"314\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-02.jpg 1132w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-02-158x300.jpg 158w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-02-538x1024.jpg 538w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-02-768x1461.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-02-807x1536.jpg 807w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-02-1076x2048.jpg 1076w\" sizes=\"(max-width: 165px) 100vw, 165px\" \/><\/p>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\"><em>Sidecar Pattern<\/em><\/p>\r\n<\/p>\n<p>O padr\u00e3o\u00a0<em>sidecar\u00a0<\/em>prop\u00f5e a &#8220;entrega&#8221; de uma solu\u00e7\u00e3o (no nosso contexto, microsservi\u00e7o) composta por dois cont\u00eaineres.<\/p>\n<p>O primeiro cont\u00eainer contem a l\u00f3gica\u00a0<em>core\u00a0<\/em>da aplica\u00e7\u00e3o. Sem este cont\u00eainer a solu\u00e7\u00e3o simplesmente n\u00e3o existe. O segundo cont\u00eainer \u00e9 o <em>sidecar. <\/em>Ele amplia ou melhora os entreg\u00e1veis do cont\u00eainer de aplica\u00e7\u00e3o, muitas vezes sem o conhecimento deste.<\/p>\n<p><\/div>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-livro-coluna-1\" valign=\"top\"><img decoding=\"async\" src=\"https:\/\/sd.arquiteturadesoftware.online\/wp-content\/uploads\/2022\/06\/livro-arquitetura-sd.png\" alt=\"\" width=\"150\" \/><\/td>\r\n<td class=\"nota-livro-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"https:\/\/sd.arquiteturadesoftware.online\/wp-content\/uploads\/2022\/06\/livro-arquitetura-sd.png\" alt=\"\" width=\"150\" \/>\r\n<p style=\"font-size: 24px; font-weight: bold; color: #4c4c4c; line-height: 1.0; font-family: Lufga; margin-bottom: 10px;\">Padr\u00f5es e crit\u00e9rios de design para (de)composi\u00e7\u00e3o em single-node<\/p>\r\n<p style=\"font-size: 20px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Lufga; margin-bottom: 10px;\">Manual do Arquiteto de Software - Sistemas distribu\u00eddos<\/p>\r\nInteressado em padr\u00f5es de composi\u00e7\u00e3o\/decomposi\u00e7\u00e3o? Nesse cap\u00edtulo apresento alguns padr\u00f5es importantes para sistemas distribu\u00eddos, incluindo <em>Sidecar<\/em>\r\n<p><a class=\"botao-livro\" href=\"https:\/\/sd.arquiteturadesoftware.online\/padroes-e-criterios-de-design-para-decomposicao-em-single-node-capitulo-2-v-1-0\/\" target=\"_blank\" rel=\"noopener\">Ler cap\u00edtulo<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p>A &#8220;padroniza\u00e7\u00e3o&#8221; de um \u00fanico <em>sidecar\u00a0<\/em>em dois ou mais microsservi\u00e7os permite a inclus\u00e3o de componentes para administra\u00e7\u00e3o.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5263 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-03-scaled.jpg\" alt=\"\" width=\"480\" height=\"374\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-03-scaled.jpg 2560w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-03-300x234.jpg 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-03-1024x798.jpg 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-03-768x598.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-03-1536x1197.jpg 1536w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-03-2048x1595.jpg 2048w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/p>\n<p>A &#8220;predomin\u00e2ncia&#8221; de um \u00fanico <em>sidecar <\/em>habilita a forma\u00e7\u00e3o de <em>service meshs<\/em>.<\/p>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">Istio<\/p>\r\n<\/p>\n<p>Uma das plataformas mais utilizadas para ado\u00e7\u00e3o de <em>Service Mesh<\/em> \u00e9 o Istio.\u00a0 Ele estende o Kubernetes para estabelecer uma rede program\u00e1vel, usando o <em>proxy<\/em> de servi\u00e7o Envoy. Ele oferece gerenciamento de tr\u00e1fego universal, telemetria e seguran\u00e7a para implanta\u00e7\u00f5es complexas.<\/p>\n<p><\/div>\n<h2>Arquitetura naturalmente distribu\u00edda<\/h2>\n<p>Em produ\u00e7\u00e3o, microsservi\u00e7os operam em forma naturalmente distribu\u00edda. Afinal, cada servi\u00e7o &#8220;roda&#8221; em um processo independente, originalmente, em um computador dedicado, mas, atualmente, em m\u00e1quinas virtuais ou cont\u00eaineres.<\/p>\n<p>Quando muitos servi\u00e7os compartilham recursos computacionais em demasia, rodando em uma \u00fanica plataforma operacional, t\u00eam-se, inicialmente, melhor aproveitamento da largura de banda da rede, mem\u00f3ria, discos, etc. Entretanto, na medida em que as demandas de cada servi\u00e7o crescem, ocorrem restri\u00e7\u00f5es que podem levar a problemas de disponibilidade e aumentam a import\u00e2ncia de adotar t\u00e1ticas de resili\u00eancia.<\/p>\n<p>Sem o devido cuidado, aplica\u00e7\u00f5es baseadas em microsservi\u00e7os podem ter, devido a natureza distribu\u00edda, problemas de performance. Afinal de contas, chamadas na rede s\u00e3o muito mais custosas que chamadas a m\u00e9todos, al\u00e9m de todo o <em>overhead\u00a0<\/em>de seguran\u00e7a e governan\u00e7a.<\/p>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">Oito fal\u00e1cias da computa\u00e7\u00e3o distribu\u00edda<\/p>\r\n<\/p>\n<p>Em 1994, Peter Deutsch, que trabalhou na Sun Microsystems, consolidou uma lista de 7 fal\u00e1cias frequentemente associadas a sistemas distribu\u00eddos. Mais tarde, em 1997, James Gosling adicionou um item a essa lista, criando a comumente conhecida rela\u00e7\u00e3o das oito fal\u00e1cias da computa\u00e7\u00e3o distribu\u00edda. S\u00e3o elas:<\/p>\n<ul>\n<li>A rede \u00e9 confi\u00e1vel<\/li>\n<li>A lat\u00eancia \u00e9 zero<\/li>\n<li>A largura de banda \u00e9 infinita<\/li>\n<li>A rede \u00e9 segura<\/li>\n<li>A topologia da rede nunca muda<\/li>\n<li>Existe um administrador<\/li>\n<li>Custo de transfer\u00eancia de dados \u00e9 zero<\/li>\n<li>A rede \u00e9 homog\u00eanea<\/li>\n<\/ul>\n<p><\/div>\nPela &#8220;sensibilidade&#8221; dos sistemas distribu\u00eddos, \u00e9 fator chave estruturar as solu\u00e7\u00f5es minimizando transa\u00e7\u00f5es que extrapolem os limites dos servi\u00e7os, impactando na granularidade.\n<h2>Rela\u00e7\u00e3o com <em>Domain-driven Design<\/em><\/h2>\nA decomposi\u00e7\u00e3o de um sistema em microsservi\u00e7os implica em tolerar duplica\u00e7\u00e3o como ant\u00eddoto para o acoplamento. Al\u00e9m disso, devido aos problemas comuns \u00e0 sistemas distribu\u00eddos, implica em organizar componentes de forma a minimizar a quantidade de transa\u00e7\u00f5es envolvendo servi\u00e7os. Da\u00ed a import\u00e2ncia de utilizar estrat\u00e9gias cuidadosas para definir n\u00edveis de granularidade e crit\u00e9rios de decomposi\u00e7\u00e3o.\n<hr \/>\n<p>Uma abordagem que tem ganho em popularidade \u00e9 a utiliza\u00e7\u00e3o de\u00a0<em>Domain-driven Design,\u00a0<\/em>fazendo com que microsservi\u00e7os implementem total ou parcialmente elementos de um contexto delimitado (<em>bounded context<\/em>).<\/p>\n<p><span style=\"vertical-align: inherit;\"><span style=\"vertical-align: inherit;\">Em um mon\u00f3lito, \u00e9 comum que os desenvolvedores compartilhem classes comuns, com baixo valor sem\u00e2ntico, entre partes distintas do aplicativo. <\/span><span style=\"vertical-align: inherit;\">No entanto, em sistemas baseados microsservi\u00e7os, com vistas a evitar o acoplamento, a duplica\u00e7\u00e3o \u00e9 prefer\u00edvel.<\/span><\/span><\/p>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">Origem do termo monol\u00edtico<\/p>\r\n<\/p>\n<p>O termo &#8220;monol\u00edtico&#8221;, bastante utilizado para designar sistemas projetados em oposi\u00e7\u00e3o aos conceitos relacionados a microsservi\u00e7os, foi inicialmente utilizado por Eric Raymond no cl\u00e1ssico &#8220;<em>The Art of Unix Programming<\/em>&#8220;.<\/p>\n<p><\/div>\n<h2>Implica\u00e7\u00f5es para governan\u00e7a<\/h2>\n<p><strong>A natureza distribu\u00edda, do software e dos times, estabelece uma tend\u00eancia a n\u00e3o-padroniza\u00e7\u00e3o das tecnologias adotadas.<\/strong> Por um lado, isso \u00e9 uma coisa boa, afinal, fica mais f\u00e1cil utilizar a tecnologia certa para cada problema. Por outro, pode acender &#8220;resist\u00eancias&#8221; em empresas com culturas passionais ou burocr\u00e1ticas.<\/p>\nNo lugar de &#8220;regras escritas em pedra&#8221;, ou melhor, em algum peda\u00e7o de papel ou em um documento digital, o caminho mais eficiente tem sido a &#8220;poliniza\u00e7\u00e3o&#8221; de tecnologias e ferramentas, com pr\u00e1ticas de governan\u00e7a mais leves, como por exemplo, a elabora\u00e7\u00e3o de radares mos moldes propostos pela ThoughtWorks.\n<hr \/>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">O radar de tecnologia<\/p>\r\n<\/p>\n<p>Um radar de tecnologia \u00e9 um guia com opini\u00f5es sobre tecnologias e tend\u00eancias que impactam a ind\u00fastria. O m\u00e9todo foi criado pela ThoughtWorks e t\u00eam edi\u00e7\u00f5es fornecidos pela consultoria. Entretanto, \u00e9 livre para confec\u00e7\u00e3o dentro de cada empresa indicando t\u00e9cnicas, ferramentas, plataformas, linguagens &amp; <em>frameworks<\/em>.<\/p>\n<p><\/div>\n<h2>Rela\u00e7\u00e3o com\u00a0<em>Cloud Native Computing<\/em><\/h2>\n<p><strong>Uma solu\u00e7\u00e3o\u00a0<em>cloud native\u00a0<\/em>utiliza\u00a0<em>stacks\u00a0<\/em>de tecnologia <em>open source\u00a0<\/em>para distribuir aplica\u00e7\u00f5es, como microsservi\u00e7os, colocando suas partes em cont\u00eaineres apropriados, dinamicamente orquestrados como forma de otimizar a utiliza\u00e7\u00e3o de recursos.<\/strong> N\u00e3o se trata de como s\u00e3o organizados servidores (que est\u00e3o &#8220;na nuvem&#8221;), mas, sim, como s\u00e3o organizados os servi\u00e7os.<\/p>\n<p>Pr\u00e1ticas\u00a0<em>cloud native\u00a0<\/em>s\u00e3o mais f\u00e1ceis de implementar em aplica\u00e7\u00f5es desenvolvidas com microsservi\u00e7os. Ali\u00e1s, h\u00e1 quem considere princ\u00edpio essencial junto como ado\u00e7\u00e3o de plataformas, cont\u00eaineres, orquestradores e automa\u00e7\u00e3o.<\/p>\n<h2>Evoluindo solu\u00e7\u00f5es baseadas em SOA com ESBs<\/h2>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-livro-coluna-1\" valign=\"top\"><img decoding=\"async\" src=\"https:\/\/m.media-amazon.com\/images\/I\/51QKwzDE4FL.jpg\" alt=\"\" width=\"150\" \/><\/td>\r\n<td class=\"nota-livro-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"https:\/\/m.media-amazon.com\/images\/I\/51QKwzDE4FL.jpg\" alt=\"\" width=\"150\" \/>\r\n<p style=\"font-size: 20px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">Monolith to Microservices<\/p>\r\nPrecisa faze a migra\u00e7\u00e3o de um monolito para microsservi\u00e7os? A obra de Sam Newman \u00e9 um &#8220;manual seguro&#8221; de como proceder.\r\n<p><a class=\"botao-livro\" href=\"https:\/\/www.amazon.com.br\/Monolith-Microservices-Evolutionary-Patterns-Transform-ebook\/dp\/B081TKSSNN\" target=\"_blank\" rel=\"noopener\">Acessar livro<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h4>Ponto de partida<\/h4>\n<p>Embora se confronte muito a ideia de arquiteturas baseadas em microsservi\u00e7os com aplica\u00e7\u00f5es monol\u00edticas, este n\u00e3o \u00e9 o debate mais comum na maioria das organiza\u00e7\u00f5es de maior porte. Estas, com frequ\u00eancia, t\u00eam hist\u00f3rico de implanta\u00e7\u00e3o de alguma variante de arquitetura baseada em servi\u00e7os (SOA).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2729 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/soa.jpeg\" alt=\"\" width=\"740\" height=\"450\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/soa.jpeg 1031w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/soa-300x182.jpeg 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/soa-1024x623.jpeg 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/soa-768x467.jpeg 768w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/p>\n<p>Embora existam pequenas varia\u00e7\u00f5es, as implementa\u00e7\u00f5es legadas geralmente est\u00e3o associadas as seguintes caracer\u00edsticas:<\/p>\n<ul>\n<li>Um conjunto de\u00a0<strong>sistemas<\/strong>, geralmente em tecnologia legada, junto com sistemas mais novos, alguns at\u00e9 rodando na nuvem, suportam o neg\u00f3cio da organiza\u00e7\u00e3o.<\/li>\n<li>Sobre o conjunto de aplica\u00e7\u00f5es legadas, um conjunto de\u00a0<strong>servi\u00e7os<\/strong>\u00a0apresentam interfaces de neg\u00f3cio para suportar processos, inicialmente de integra\u00e7\u00e3o, que \u201cexp\u00f5e\u201d os sistemas de base com algum n\u00edvel de governan\u00e7a<\/li>\n<li>A comunica\u00e7\u00e3o entre os diversos sistemas legados \u00e9 viabilizado por um\u00a0<strong>ESB<\/strong>\u00a0(geralmente corporativo, bem \u201ccaro\u201d, e de um fornecedor de grande nome). Esse \u201cESB\u201d entrega um conjunto de\u00a0<em>features\u00a0<\/em>incluindo, al\u00e9m de mensageria, pol\u00edticas de governan\u00e7a, transforma\u00e7\u00e3o de dados, seguran\u00e7a (autentica\u00e7\u00e3o e autoriza\u00e7\u00e3o), etc.<\/li>\n<li>Um conjunto de <strong>aplica\u00e7\u00f5es clientes<\/strong>\u00a0se comunica com os servi\u00e7os, geralmente atrav\u00e9s da ESB.<\/li>\n<\/ul>\n<hr \/>\n<p>Cada um dos\u00a0<strong>sistemas\u00a0<\/strong>da empresa e, muitas vezes, muitos dos\u00a0<strong>servi\u00e7os<\/strong>\u00a0s\u00e3o mantidos como monol\u00edticos locais, cada um com seu banco de dados.<\/p>\n<p>N\u00e3o \u00e9 raro que os\u00a0<strong>sistemas\u00a0<\/strong>sejam desenvolvidos em tecnologias legadas (MUMPS, COBOL, etc.) Os <strong>servi\u00e7os<\/strong> geralmente est\u00e3o implantados usando protocolos pesados, como <a href=\"https:\/\/pt.wikipedia.org\/wiki\/SOAP\">SOAP<\/a>.<\/p>\n<p>Recentemente, as press\u00f5es da Transforma\u00e7\u00e3o Digital tem levado as empresas a adicionarem uma camada extra a arquitetura indicada acima. <strong>Na tentativa de se tornarem mais \u201cabertas\u201d, conectadas e digitais, as empresas est\u00e3o fornecendo APIs para facilitar a conex\u00e3o com seus clientes.<\/strong><\/p>\n<h4><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2730 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/api_gateway.png\" alt=\"\" width=\"740\" height=\"638\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/api_gateway.png 1031w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/api_gateway-300x259.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/api_gateway-1024x883.png 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/api_gateway-768x662.png 768w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/>Problemas a superar<\/h4>\n<p><strong>Considerando que a lei de Conway seja v\u00e1lida, \u00e9 bem dif\u00edcil suportar uma organiza\u00e7\u00e3o para manter a arquitetura descrita acima.<\/strong><\/p>\n<p><strong>Invariavelmente, os sistemas legados, cedo ou tarde, se convertem em gargalos<\/strong>\u00a0e acabam sendo mantidos por \u201csilos\u201d, as vezes bem intencionados, com gente que se esfor\u00e7a para suportar o ritmo de modifica\u00e7\u00e3o de dados demandado pelas \u201cnovas APIs\u201d. Entretanto,<strong>\u00a0n\u00e3o \u00e9 raro que recursos de \u201ccontingenciamento\u201d precisem ser implantados de forma que os modifica\u00e7\u00f5es fiquem represadas por mais tempo que o ideal para o neg\u00f3cio.<\/strong><\/p>\n<p>Tamb\u00e9m n\u00e3o \u00e9 incomum que o ESB acabe assumindo muito mais tarefas do que deveria (sobretudo aplica\u00e7\u00e3o de regra de neg\u00f3cio).<\/p>\n<h4 id=\"por-que-microsservicos-sao-recomendados-nesse-cenario-5dd7cf8637cb6\"><span id=\"Por_que_microsservicos_sao_recomendados_nesse_cenario\">Por que microsservi\u00e7os s\u00e3o recomendados nesse cen\u00e1rio?<\/span><\/h4>\n<p><strong>Para cen\u00e1rios descritos acima, microsservi\u00e7os parecem fazer sentido<\/strong>,\u00a0<a href=\"https:\/\/www.eximia.co\/pt\/2019\/09\/12\/relacao-entre-squads-e-microsservicos\/\">primeiro pelo aspecto organizacional (autorizando a ideia de eliminar silos de TI).<\/a><\/p>\n<p>Outro ponto importante e que n\u00e3o pode ser ignorado \u00e9 que a arquitetura descrita acima \u00e9 cara para manter e, sobretudo, para atualizar. N\u00e3o \u00e9 incomum encontrarmos\u00a0<a href=\"https:\/\/www.eximia.co\/pt\/2019\/09\/10\/empresa-que-nao-aprende-a-mudar-rapido-morre\/\">empresas onde o \u201cneg\u00f3cio\u201d deseja acelerar o ritmo das mudan\u00e7as (o que \u00e9 um imperativo)<\/a>\u00a0mas n\u00e3o conseguem em fun\u00e7\u00e3o do \u201cpeso\u201d da tecnologia.<\/p>\n<h4><span id=\"Abaixo_a_ESB\">Abaixo a ESB!<\/span><\/h4>\n<p><strong>Boa parte da complexidade vista at\u00e9 aqui reside no fato de termos \u201cdois mundos\u201d (APIs e \u201csistemas pesados\u201d) separados por uma fronteira bem demarcada (a ESB e os servi\u00e7os).<\/strong><\/p>\n<p>Em uma an\u00e1lise simples, essa separa\u00e7\u00e3o em \u201cdois mundos\u201d deixa os sistemas dif\u00edceis de manter. Geralmente, altera\u00e7\u00f5es de neg\u00f3cio come\u00e7am nas aplica\u00e7\u00f5es \u201cconsumidoras\u201d e s\u00e3o desencadeadas \u201cAPI\u201d abaixo, geralmente travando nos \u201csistemas pesados\u201d que s\u00e3o \u201cmicro-monolitos\u201d.<\/p>\n<p><strong>Por todo o exposto, parece l\u00f3gico que, para acabar com a \u201csepara\u00e7\u00e3o dos mundos\u201d ou, pelo menos, reduzir as barreiras, o primeiro passo seja derrubar a fronteira! Ou seja, colocar fim no ESB.<\/strong><\/p>\n<p>As ESBs, ao longo do tempo, foram acumulando \u201cintelig\u00eancia demais\u201d, ficando respons\u00e1veis por estrat\u00e9gias de roteamento, transforma\u00e7\u00e3o (enriquecimento e mudan\u00e7a de formato) e at\u00e9 mesmo a aplica\u00e7\u00e3o de l\u00f3gica de neg\u00f3cio.<\/p>\n<p>O bom design de microsservi\u00e7os faz com que eles n\u00e3o utilizem mais a ESB como estrat\u00e9gia de comunica\u00e7\u00e3o. Toda a l\u00f3gica de neg\u00f3cio e t\u00e9cnicas de transforma\u00e7\u00e3o que, tradicionalmente, residem na ESB s\u00e3o transferidas para microsservi\u00e7os.<\/p>\n<h4><span id=\"Smart_endpoints_Dumb_Pipes\">Adotando &#8220;Smart endpoints &amp; Dumb Pipes&#8221;<\/span><\/h4>\n<p>A vis\u00e3o de \u201cderrubar\u201d o ESB usando microsservi\u00e7os, n\u00e3o \u00e9 nova, nem original. <a href=\"https:\/\/martinfowler.com\/articles\/microservices.html#SmartEndpointsAndDumbPipes\">Martin Fowler j\u00e1 descreveu essa estrat\u00e9gia anos atr\u00e1s<\/a>.<\/p>\n<p>Em uma arquitetura baseada em microsservi\u00e7os, a comunica\u00e7\u00e3o ocorre sempre por meio de protocolos leves ou por mecanismos mais \u201cpuros\u201d de mensageria (<em>dumb pipes<\/em>). Enquanto isso,\u00a0<em>routing\u00a0<\/em>e transforma\u00e7\u00e3o de mensagens acontecem atrav\u00e9s de microsservi\u00e7os (<em>smart endpoints<\/em>).<\/p>\n<p>Logo, o primeiro passo para \u201caliviar\u201d a estrutura seja substituir o combinado de ESB + servi\u00e7os por uma camada de microsservi\u00e7os.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2733 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/goodbye_esb.png\" alt=\"\" width=\"740\" height=\"529\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/goodbye_esb.png 1037w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/goodbye_esb-300x214.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/goodbye_esb-1024x732.png 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/07\/goodbye_esb-768x549.png 768w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/p>\n<p>Essa estrat\u00e9gia tem, obviamente, seus pr\u00f3s e contras. Sendo que o principal \u201ccontra\u201d, talvez, seja o aumento da complexidade para a governan\u00e7a. Por outro lado, a ado\u00e7\u00e3o dos microsservi\u00e7os no lugar da combina\u00e7\u00e3o ESB + Servi\u00e7os, aproxima a implementa\u00e7\u00e3o dos sistemas base das APIs e tende a reduzir o peso da infraestrutura.<\/p>\n<h4><span id=\"Fala_Conway\">Implica\u00e7\u00f5es para a organiza\u00e7\u00e3o dos times<\/span><\/h4>\n<p><strong>Toda mudan\u00e7a na estrutura de comunica\u00e7\u00e3o de um software implica em modifica\u00e7\u00f5es na estrutura de comunica\u00e7\u00e3o da empresa que o desenvolve.<\/strong> Logo, uma altera\u00e7\u00e3o como a que estamos propondo no software acaba mudando o <em>shape <\/em>da organiza\u00e7\u00e3o.<\/p>\n<p>Ter APIs, ESB+servi\u00e7os e sistemas legados leva a maior parte das organiza\u00e7\u00f5es a ter, pelo menos tr\u00eas categorias de time: 1) Desenvolvedores de API, 2) Especialistas em Integra\u00e7\u00e3o e 3) Desenvolvedores dos sistemas legados.<\/p>\n<p>A mudan\u00e7a da arquitetura proposta, substituindo ESB + servi\u00e7os, por microsservi\u00e7os tende a fundir os times de desenvolvimento de APIs com os especialistas de integra\u00e7\u00e3o simplificando as estruturas de comunica\u00e7\u00e3o da organiza\u00e7\u00e3o.<\/p>\n<h2>Transformando mon\u00f3litos em microsservi\u00e7os passo-a-passo<\/h2>\n<div class=\"nota-youtube\">\r\n<table class=\"tabelayoutube\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-youtube-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/youtube.png\" alt=\"\" width=\"80\" height=\"80\" \/><\/td>\r\n<td class=\"nota-youtube-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/youtube.png\" alt=\"\" width=\"80\" height=\"80\" \/>\r\n<p style=\"font-size: 24px; font-weight: bold; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">Monolith Decomposition Patterns - Sam Newman<\/p>\r\n<\/p>\n<p>Nesta palestra, Sam Newman compartilha alguns princ\u00edpios-chave e v\u00e1rios padr\u00f5es para decompor incrementalmente um sistema existente em microsservi\u00e7os. Tamb\u00e9m aborda padr\u00f5es que podem funcionar para migrar funcionalidades de sistemas que voc\u00ea n\u00e3o pode alterar, que s\u00e3o \u00fateis ao trabalhar com sistemas muito antigos ou produtos de fornecedores.<\/p>\n<p>\r\n<p><a class=\"botao-youtube\" href=\"https:\/\/www.youtube.com\/watch?v=9I9GdSQ1bbM\" target=\"_blank\" rel=\"noopener\" style=\"margin-top: 20px;\">Acessar v\u00eddeo<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-contribuicao-2\">\r\n<p style=\"font-size: 22px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">MonolithFirst<\/p>\r\nArtigo interessante, escrito por Martin Fowler, sobre a constata\u00e7\u00e3o de que boa parte dos projetos bem-sucedidos com microsservi\u00e7os s\u00e3o &#8220;migra\u00e7\u00f5es&#8221; mon\u00f3litos.\r\n<p><a class=\"botao-livro\" href=\"https:\/\/martinfowler.com\/bliki\/MonolithFirst.html\" target=\"_blank\" rel=\"noopener\">Acessar<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h4>Proxy HTTP: um primeiro passo seguro<\/h4>\n<p><strong>Um dos grandes desafios para migra\u00e7\u00e3o de sistemas monol\u00edticos para arquiteturas baseadas em microsservi\u00e7os \u00e9 o uso ampliado dos recursos de rede.\u00a0<\/strong>Por isso, em uma migra\u00e7\u00e3o gradual, um \u00f3timo primeiro passo \u00e9 assegurar que a infraestrutura utilizada pela organiza\u00e7\u00e3o n\u00e3o ser\u00e1 um empecilho.<\/p>\n<p><strong>Nesse contexto, quando um sistema monol\u00edtico exp\u00f5e funcionalidades atrav\u00e9s de APIs HTTP (ou qualquer outro protocolo formal de comunica\u00e7\u00e3o), \u00e9 recomend\u00e1vel que implementemos um\u00a0<em>proxy.\u00a0\u00a0<\/em><\/strong>Caber\u00e1 a ele interceptar todas as requisi\u00e7\u00f5es para esse servi\u00e7o, transmitindo-as para ele na sequ\u00eancia, aguardando seus retornos, para, ent\u00e3o, retornar para as aplica\u00e7\u00f5es clientes.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5266 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-06.jpg\" alt=\"\" width=\"400\" height=\"390\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-06.jpg 2132w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-06-300x293.jpg 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-06-1024x1000.jpg 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-06-768x750.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-06-1536x1500.jpg 1536w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-06-2048x2000.jpg 2048w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/p>\n<p>Essa recomenda\u00e7\u00e3o, formalizada recentemente por\u00a0<a href=\"https:\/\/samnewman.io\/\">Sam Newman \u2013 uma das maiores autoridades mundiais em microsservi\u00e7os \u2013<\/a>\u00a0permite identificar muito cedo eventuais problemas de infraestrutura al\u00e9m de possuir custo m\u00ednimo, tanto t\u00e9cnico quanto para o neg\u00f3cio. Al\u00e9m disso, tem complexidade minimizada por sua alta reversibilidade.<\/p>\n<p>Eventualmente, o\u00a0<em>proxy\u00a0<\/em>poder\u00e1 redirecionar requisi\u00e7\u00f5es para que sejam atendidas por um microsservi\u00e7o que implementar\u00e1 uma funcionalidade extra\u00edda do mon\u00f3lito. Tudo isso de maneira transparente tanto para as aplica\u00e7\u00f5es clientes quanto para a pr\u00f3pria aplica\u00e7\u00e3o monol\u00edtica que mant\u00e9m (por algum tempo) a implementa\u00e7\u00e3o original.<\/p>\n<p>Finalmente, com o tempo, o\u00a0<em>proxy<\/em>\u00a0tamb\u00e9m poder\u00e1 evoluir e se adaptar melhor as necessidades das aplica\u00e7\u00f5es clientes, operando como uma API externa.<\/p>\n<h4 class=\"card-insight\">Segregando funcionalidades<\/h4>\nA transforma\u00e7\u00e3o de um sistema monol\u00edtico, potencialmente legado, para microsservi\u00e7os n\u00e3o \u00e9 atividade simples. Buscar uma \u201cprimeira implementa\u00e7\u00e3o perfeita\u201d poder\u00e1 atrapalhar mais do que ajudar. Al\u00e9m disso, \u00e9 grande o risco de paralisia por an\u00e1lise.\n<hr \/>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">Paralisia por an\u00e1lise<\/p>\r\n<\/p>\n<p>A paralisia de an\u00e1lise (ou paralisia por an\u00e1lise) descreve um processo individual ou de grupo quando a an\u00e1lise excessiva ou o pensamento excessivo de uma situa\u00e7\u00e3o podem fazer com que o movimento para a frente ou a tomada de decis\u00e3o se tornem &#8220;paralisados&#8221;, significando que nenhuma solu\u00e7\u00e3o ou curso de a\u00e7\u00e3o \u00e9 decidido. <strong>Uma situa\u00e7\u00e3o pode ser considerada muito complicada e uma decis\u00e3o nunca \u00e9 tomada, devido ao medo de que um problema potencialmente maior possa surgir. <\/strong><\/p>\n<p>Uma pessoa pode desejar uma solu\u00e7\u00e3o perfeita, mas pode temer tomar uma decis\u00e3o que possa resultar em erro, enquanto est\u00e1 no caminho para uma solu\u00e7\u00e3o melhor.<\/p>\n<p><\/div>\n<p><strong>Uma vez que se constate que a ado\u00e7\u00e3o de microsservi\u00e7os se justifica, quanto antes houver algo que se assemelhe a um microsservi\u00e7o em produ\u00e7\u00e3o, melhor.<\/strong>\u00a0Afinal, antes ser\u00e3o discutidos aspectos relacionados com a opera\u00e7\u00e3o, fazendo com que pr\u00e1ticas de\u00a0<em>DevOps<\/em>\u00a0aconte\u00e7am por necessidade e n\u00e3o por imposi\u00e7\u00e3o.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5267 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-07-scaled.jpg\" alt=\"\" width=\"541\" height=\"455\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-07-scaled.jpg 2560w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-07-300x252.jpg 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-07-1024x861.jpg 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-07-768x645.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-07-1536x1291.jpg 1536w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-07-2048x1721.jpg 2048w\" sizes=\"(max-width: 541px) 100vw, 541px\" \/><\/p>\n<p><strong><a href=\"https:\/\/samnewman.io\/\">Sam Newman<\/a>\u00a0indica que a primeira implementa\u00e7\u00e3o de um microsservi\u00e7o, em um processo de migra\u00e7\u00e3o, pode ser uma extra\u00e7\u00e3o simples de l\u00f3gica da aplica\u00e7\u00e3o monol\u00edtica, ainda compartilhando a mesma base de dados.\u00a0\u00a0<\/strong>Essa \u201cpreserva\u00e7\u00e3o\u201d do esquema original, ali\u00e1s, facilita a separa\u00e7\u00e3o dos processos de\u00a0<em>deploy\u00a0<\/em>e\u00a0<em>release\u00a0<\/em>permitindo que o microsservi\u00e7o seja \u201cdesligado\u201d com preju\u00edzos m\u00ednimos\u00a0<del>quando<\/del> se algo der errado.<\/p>\n<p><strong>Em um cen\u00e1rio ideal, o acionamento do microsservi\u00e7o ser\u00e1 responsabilidade de um\u00a0<em>proxy http\u00a0<\/em>que esteja interceptando todas as requisi\u00e7\u00f5es para o sistema.<\/strong>\u00a0Esse\u00a0<em>proxy<\/em>, por sua vez, dever\u00e1 condicionar a utiliza\u00e7\u00e3o do microsservi\u00e7o a uma ou mais\u00a0<em>feature toogles.\u00a0<\/em><\/p>\n<div class=\"card-insight\"><\/div>\n<p><strong>Por algum tempo, atividades de consulta sem modifica\u00e7\u00e3o de estado podem, inclusive, ocorrer simultaneamente no microsservi\u00e7o e no mon\u00f3lito. Dessa forma, ser\u00e1 poss\u00edvel verificar no\u00a0<em>proxy<\/em>\u00a0se a nova implementa\u00e7\u00e3o est\u00e1 em conformidade com a antiga.<\/strong><\/p>\n<div class=\"nota-alerta\">\r\n<table class=\"tabelaalerta\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" class=\"img-citacao\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/> <\/p>\n<p><em>Voc\u00ea n\u00e3o apreciar\u00e1 o verdadeiro horror, dor e sofrimento dos microsservi\u00e7os at\u00e9 que esteja executando-os em produ\u00e7\u00e3o<\/em><\/p>\n<p>\r\n<p><strong>Sam Newman<\/strong><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p>O esfor\u00e7o para colocar um microsservi\u00e7o em produ\u00e7\u00e3o antecipa e explicita as debilidades do sistema monol\u00edtico que se est\u00e1 evoluindo, sobretudo os pontos de acoplamento.<\/p>\n<h4 class=\"card-insight\">Isolando o banco de dados<\/h4>\n<p>\u00c9 plenamente razo\u00e1vel que uma primeira implementa\u00e7\u00e3o ainda acesse diretamente, por exemplo, a base de dados do sistema monol\u00edtico. Al\u00e9m disso, \u00e9 muito importante que o acesso ao microsservi\u00e7o aconte\u00e7a atrav\u00e9s de um <em>proxy http\u00a0<\/em>que possa redirecionar a carga em caso de problemas.<\/p>\n<div class=\"card-insight\">\n<p>O sucesso no cumprimento dessas recomenda\u00e7\u00f5es indica que j\u00e1 foram identificados e resolvidos eventuais limita\u00e7\u00f5es do ambiente, sobretudo na rede. Al\u00e9m disso, \u00e9 indicativo de que a organiza\u00e7\u00e3o j\u00e1 acumulou volume de experi\u00eancia para operar em sistemas cada vez mais distribu\u00eddos.<\/p>\n<\/div>\n<p>Essa estrat\u00e9gia, entretanto, tem como principal ponto negativo o grande acoplamento entre o mon\u00f3lito e o microsservi\u00e7o em fun\u00e7\u00e3o do acesso direto do banco de dados. Afinal, nenhum dos times (mon\u00f3lito e microsservi\u00e7o) poder\u00e1, por exemplo, fazer ajustes no\u00a0<em>schema\u00a0<\/em>das bases sem causar um problema em potencial para o outro.<\/p>\n<p><strong>O pr\u00f3ximo passo l\u00f3gico passa a ser, ent\u00e3o, \u201ctrocar d\u00edvidas t\u00e9cnicas caras por outras mais baratas\u201d. Come\u00e7ando por restringir acesso a base de dados do sistema monol\u00edtico!<\/strong>\u00a0Para que isso ocorra rapidamente, como se tempo e dinheiro fossem importantes,\u00a0 o time que mant\u00e9m o mon\u00f3lito dever\u00e1 fornecer uma API de consulta especificamente para atender as demandas do novo microsservi\u00e7o.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5268 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-08-scaled.jpg\" alt=\"\" width=\"542\" height=\"455\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-08-scaled.jpg 2560w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-08-300x252.jpg 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-08-1024x861.jpg 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-08-768x645.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-08-1536x1291.jpg 1536w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-08-2048x1721.jpg 2048w\" sizes=\"(max-width: 542px) 100vw, 542px\" \/><\/p>\n<p>Com o microsservi\u00e7o acessando dados exclusivamente atrav\u00e9s de uma API, sem ir diretamente ao banco de dados, o time que mant\u00e9m o mon\u00f3lito recupera a liberdade de promover modifica\u00e7\u00f5es de\u00a0<em>schema<\/em>\u00a0com chances menores de quebras. Eventualmente, o microsservi\u00e7o pode adotar, do seu lado, alguma estrat\u00e9gia de\u00a0<em>caching<\/em>\u00a0come\u00e7ando a materializar o que poder\u00e1 vir a ser, em futuro pr\u00f3ximo, seu pr\u00f3prio banco de dados.<\/p>\n<p>\u00c9 recomend\u00e1vel, que esse \u201cdirecionamento a API\u201d seja controlado, no microsservi\u00e7o, por uma\u00a0<em>feature toggle<\/em>. Ou seja, o microsservi\u00e7o deve poder redirecionar seu consumo novamente para a base de dados em casos de instabilidade.<\/p>\n<div class=\"card-insight\">\n<p>A partir da modelagem da API fornecida pelo mon\u00f3lito ser\u00e1 poss\u00edvel identificar 1) dados consumidos exclusivamente no mon\u00f3lito; 2) dados consumidos exclusivamente pelo novo microsservi\u00e7o e 3) Dados usados tanto no mon\u00f3lito quanto no microsservi\u00e7o. Em nossa experi\u00eancia, esse \u00e9 um exerc\u00edcio muito \u00fatil para identificar falhas evidentes de segrega\u00e7\u00e3o de responsabilidades.<\/p>\n<\/div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2611 aligncenter\" src=\"https:\/\/www.eximia.co\/wp-content\/uploads\/sites\/2\/2020\/03\/dados_monolito_microsservico.png\" alt=\"\" width=\"417\" height=\"321\" \/><\/p>\n<p><strong>Importante destacar que o que estamos recomendando aqui \u00e9 a troca uma d\u00edvida t\u00e9cnica mais cara (o acesso direto do microsservi\u00e7o ao banco de dados do mon\u00f3lito) por uma mais barata (aumento da rede).<\/strong>\u00a0Entretanto, esse \u00e9 um\u00a0<u>passo intermedi\u00e1rio<\/u>\u00a0importante, tanto para valida\u00e7\u00e3o da modelagem, como para confirmar a \u201csa\u00fade\u201d da infraestrutura.<\/p>\n<h4 class=\"card-insight\">Removendo implementa\u00e7\u00f5es em duplicidade<\/h4>\n<p>Uma vez que um time, transformando um mon\u00f3lito em microsservi\u00e7os, tenha efetivamente, 1) adotado pr\u00e1ticas e t\u00e9cnicas para desassociar os processos de\u00a0<em>deploy<\/em>\u00a0e\u00a0<em>release<\/em>; 2) colocado um \u201cprimeiro\u201d microsservi\u00e7o\u00a0<del>imperfeito<\/del>\u00a0em produ\u00e7\u00e3o e 3) controlado acessos a base de dados; devemos garantir que todo \u201cc\u00f3digo morto\u201d no mon\u00f3lito seja eliminado e garantir que os times t\u00e9cnicos estejam devidamente estruturados para suportar a evolu\u00e7\u00e3o.<\/p>\n<p>Na pr\u00e1tica,\u00a0<em>features\u00a0<\/em>originalmente providas pelo mon\u00f3lito, agora s\u00e3o providas pelo novo microsservi\u00e7o e devem ser removidas do sistema original o quanto antes. O momento ideal \u00e9 quando j\u00e1 houverem evid\u00eancias de que a nova implementa\u00e7\u00e3o j\u00e1 \u00e9 confi\u00e1vel o suficiente.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5269 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-09-scaled.jpg\" alt=\"\" width=\"542\" height=\"455\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-09-scaled.jpg 2560w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-09-300x252.jpg 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-09-1024x861.jpg 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-09-768x645.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-09-1536x1291.jpg 1536w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-09-2048x1721.jpg 2048w\" sizes=\"(max-width: 542px) 100vw, 542px\" \/><\/p>\n<p>Para reduzir a chance de \u201cquebras\u201d em outros sistemas, entretanto, \u00e9 aconselh\u00e1vel n\u00e3o remover imediatamente o acesso \u00e0s\u00a0<em>features\u00a0<\/em>fornecido pelas APIs internas do mon\u00f3lito. No lugar disso, \u00e9 coerente modificar essas APIs para que consumam o novo microsservi\u00e7o.<\/p>\n<div class=\"card-insight\">\n<p>Importante indicar que todas as medidas adotadas at\u00e9 aqui aumentam consideravelmente a press\u00e3o sobre a rede. Entretanto, sistematicamente, est\u00e3o sendo superadas etapas de transforma\u00e7\u00e3o e a condi\u00e7\u00e3o atual \u00e9 intermedi\u00e1ria. Daqui para frente, as medidas t\u00e9cnicas v\u00e3o na dire\u00e7\u00e3o de reduzir essa press\u00e3o.<strong>\u00a0O processo de transforma\u00e7\u00e3o de um mon\u00f3lito em microsservi\u00e7os consiste na troca, cont\u00ednua e sistem\u00e1tica, de d\u00edvidas t\u00e9cnicas mais caras por outras mais baratas.<\/strong><\/p>\n<\/div>\n<p><strong>A press\u00e3o sobre a infraestrutura \u201cgrita\u201d pela ado\u00e7\u00e3o de pr\u00e1ticas efetivas de DevOps. N\u00e3o consideramos vi\u00e1vel, nem mesmo respons\u00e1vel, adotar microsservi\u00e7os sem reduzir as dist\u00e2ncias entre desenvolvimento e opera\u00e7\u00e3o.<\/strong><\/p>\n<p>Em termos organizacionais, a evolu\u00e7\u00e3o da arquitetura deve impactar na \u201cforma\u201d da \u00e1rea t\u00e9cnica. A mesma segmenta\u00e7\u00e3o que for aplicada nos sistemas deve estar sendo replicada naturalmente nos times que precisam buscar operar da maneira mais independente poss\u00edvel. Geralmente, a parte do time que mantinha o c\u00f3digo eliminado do mon\u00f3lito, agora deve se concentrar em manter o microsservi\u00e7o da forma mais independente poss\u00edvel.\u00a0<strong>\u00c9 fundamental que seja compreendido que se a estrutura de comunica\u00e7\u00e3o da organiza\u00e7\u00e3o n\u00e3o refletir, da forma mais direta poss\u00edvel, a estrutura do software que ela produz, o fracasso \u00e9 uma certeza!<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5270\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-10-scaled.jpg\" alt=\"\" width=\"539\" height=\"465\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-10-scaled.jpg 2560w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-10-300x259.jpg 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-10-1024x884.jpg 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-10-768x663.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-10-1536x1326.jpg 1536w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-10-2048x1768.jpg 2048w\" sizes=\"(max-width: 539px) 100vw, 539px\" \/><\/p>\n<p>Por outro lado,\u00a0<strong>quanto maior a rela\u00e7\u00e3o entre as estruturas de comunica\u00e7\u00e3o dos times t\u00e9cnicos e a estrutura de componentes do software sendo desenvolvido, maiores as chances de sucesso.<\/strong><\/p>\n<p>Todo acoplamento que persistir entre mon\u00f3lito e o novo microsservi\u00e7o se refletir\u00e1 em dificuldades de comunica\u00e7\u00e3o entre os times e isso \u00e9 \u00f3timo! Afinal, aumentar\u00e1 a urg\u00eancia por revis\u00f5es na arquitetura para \u201creduzir a dor\u201d. Toda a\u00e7\u00e3o ir\u00e1 refletir em iniciativas para reduzir a \u201cdepend\u00eancia\u201d, sobretudo para o deploy, e o impacto sobre o\u00a0<em>velocity<\/em>\u00a0\u00e9 potencialmente brutal.<\/p>\n<div class=\"card-insight\">\n<h4 class=\"card-insight\">Implementando observabilidade<\/h4>\n<p><strong>O racional de converter um mon\u00f3lito em microsservi\u00e7os \u00e9 transferir parte da complexidade do desenvolvimento para a opera\u00e7\u00e3o.<\/strong> Afinal, microsservi\u00e7os tem menos c\u00f3digo para entender, logo, desde que pouco acoplados, individualmente, s\u00e3o mais baratos de manter. Em compensa\u00e7\u00e3o, quanto mais processos para \u201coperar\u201d, mais complexa se torna a opera\u00e7\u00e3o. Da\u00ed a emerg\u00eancia para, em contextos com microsservi\u00e7os, adotar t\u00e9cnicas modernas compat\u00edveis com DevOps.<\/p>\n<p>Em produ\u00e7\u00e3o, quando diversos microsservi\u00e7os s\u00e3o necess\u00e1rios para atender requisi\u00e7\u00f5es ou demandas de processamento concorrentes, se amplificam os desafios de entender, justificar e solucionar problemas de performance ou falhas.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-634 size-full\" src=\"https:\/\/www.eximia.co\/wp-content\/uploads\/sites\/2\/2019\/07\/distributed_concurrency.png\" alt=\"\" width=\"254\" height=\"322\" \/><\/p>\n<p><strong>A ado\u00e7\u00e3o de t\u00e9cnicas convencionais de\u00a0<em>logging\u00a0<\/em>em cada microsservi\u00e7o torna a an\u00e1lise quase imposs\u00edvel, principalmente em sistemas sob stress, gerando mais ru\u00eddo do que sinal da comunica\u00e7\u00e3o.<\/strong>\u00a0Para agravar o problema, a ado\u00e7\u00e3o de microsservi\u00e7os tem o efeito colateral, geralmente desej\u00e1vel e positivo, da reestrutura\u00e7\u00e3o dos times de desenvolvimento, em grupos menores e mais segmentados. N\u00e3o \u00e9 raro, em condi\u00e7\u00f5es de stress, onde \u201calgo n\u00e3o vai bem\u201d, brotarem acusa\u00e7\u00f5es e fugas de responsabilidade.<\/p>\n<p>A solu\u00e7\u00e3o \u00e9 substituir t\u00e9cnicas convencionais de\u00a0<em>logging\u00a0<\/em>por abordagens mais sofisticadas.<strong>\u00a0Em sistemas distribu\u00eddos, como os baseados em microsservi\u00e7os, o\u00a0<em>tracing<\/em>\u00a0precisa ser consolidado.<\/strong>\u00a0Ou seja, \u00e9 necess\u00e1rio adotar t\u00e9cnicas e tecnologias que permitam verificar a hist\u00f3ria completa de cada requisi\u00e7\u00e3o e processamento, passando por todos os microsservi\u00e7os, mostrando claramente os intervalos de tempo transcorridos entre o in\u00edcio e o fim de cada intera\u00e7\u00e3o, de forma integrada e centralizada.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-791 size-large\" src=\"https:\/\/www.eximia.co\/wp-content\/uploads\/sites\/2\/2019\/07\/1_spans-1024x551.png\" alt=\"\" width=\"1024\" height=\"551\" \/><\/p>\n<p>H\u00e1 diversas iniciativas para produzir esse tipo de an\u00e1lise. Modernamente, h\u00e1 uma tend\u00eancia consolida\u00e7\u00e3o de padr\u00f5es e protocolos abertos que devem ser seguidos e implementados, como o\u00a0<a href=\"https:\/\/opentracing.io\/\">OpenTracing<\/a>.<\/p>\n<p>Bem implementadas, essas tecnologias permitem identificar rapidamente origens de lentid\u00e3o ou de falhas de processamento.<\/p>\n<p><strong>Manter sistemas distribu\u00eddos sem uso de ferramentas eficientes para observabilidade \u00e9 como dirigir, a noite, com chuva, em uma estrada cheia de curvas, com far\u00f3is apagados.<\/strong><\/p>\n<h4>Estrat\u00e9gias para iniciar a segrega\u00e7\u00e3o de dados<\/h4>\n<div class=\"elementor-element elementor-element-d507267 elementor-widget elementor-widget-theme-post-content is-mac\" data-id=\"d507267\" data-element_type=\"widget\" data-widget_type=\"theme-post-content.default\">\n<div class=\"elementor-widget-container\">\n<p><strong>Extrair um microsservi\u00e7o de um mon\u00f3lito implica, invariavelmente, na revis\u00e3o de como os dados s\u00e3o organizados e armazenados. Entretanto, \u00e9 razo\u00e1vel postergar mudan\u00e7as mais concretas at\u00e9 o \u00faltimo momento respons\u00e1vel.<\/strong><\/p>\n<p>At\u00e9 a estabiliza\u00e7\u00e3o funcional do sistema, \u00e9 recomend\u00e1vel que nenhuma altera\u00e7\u00e3o duradoura seja feita. Isso significa que os dados devem permanecer, majoritariamente, na base de dados do mon\u00f3lito. Dessa forma, fica mais vi\u00e1vel, inclusive, desvincular os processos de\u00a0<em>deploy\u00a0<\/em>e\u00a0<em>release\u00a0<\/em>do novo microsservi\u00e7o, direcionando o tratamento das requisi\u00e7\u00f5es ao mon\u00f3lito ou ao microsservi\u00e7o, atrav\u00e9s de\u00a0<em>feature toggles.<\/em><\/p>\n<p>Inicialmente, as demandas de acesso a dados do microsservi\u00e7o podem ser atendidas com consultas diretas a base de dados original. Entretanto, assim que poss\u00edvel, o fluxo de dados deve ocorrer por uma API interna, desenvolvida para esse prop\u00f3sito. Nesse caso, estrat\u00e9gias agressivas de\u00a0<em>caching\u00a0<\/em>, se bem implementadas, reduzem o impacto na rede.<\/p>\n<div class=\"card-insight\">\n<p>Com o tempo, entretanto, assim que for poss\u00edvel remover blocos de c\u00f3digo que implementam <em>features\u00a0<\/em>do mon\u00f3lito que foram desativadas em fun\u00e7\u00e3o do novo microsservi\u00e7o, ficar\u00e1 dif\u00edcil justificar o \u201ctelefone sem fio\u201d, sobretudo em fun\u00e7\u00e3o da interdepend\u00eancia desnecess\u00e1ria entre os sistemas e, mais grave, entre os times.<\/p>\n<\/div>\n<p>Assumindo o mon\u00f3lito e o microsservi\u00e7o como dois processos distintos, h\u00e1 dados que:<\/p>\n<ol>\n<li>continuam fazendo sentido apenas para o mon\u00f3lito;<\/li>\n<li>fazem sentido apenas para o microsservi\u00e7o;<\/li>\n<li>dados que s\u00e3o de uso nos dois contextos.<\/li>\n<\/ol>\n<hr \/>\n<p>A partir dessa classifica\u00e7\u00e3o, fica um pouco mais f\u00e1cil estabelecer estrat\u00e9gias para a segrega\u00e7\u00e3o de bases, promovendo isolamento adequado.<\/p>\n<h5 id=\"tratamento-de-dados-de-uso-exclusivo-do-monolito-ou-do-microsservico-5e95b9780cb21\"><span id=\"Tratamento_de_dados_de_uso_exclusivo_do_monolito_ou_do_microsservico\">Tratamento de dados de uso exclusivo do mon\u00f3lito ou do microsservi\u00e7o<\/span><\/h5>\n<p>Idealmente, a modifica\u00e7\u00e3o de dados no sistema acontece acompanhando a execu\u00e7\u00e3o dos processos da organiza\u00e7\u00e3o. Nesses casos, as interfaces com o usu\u00e1rio s\u00e3o naturalmente desvinculadas e os dados, associados ao microsservi\u00e7o ou ao mon\u00f3lito, se estes estiverem bem modelados, s\u00e3o \u201c<em>inputados<\/em>\u201d de forma independente.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5272 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-11-scaled.jpg\" alt=\"\" width=\"447\" height=\"470\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-11-scaled.jpg 2432w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-11-285x300.jpg 285w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-11-973x1024.jpg 973w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-11-768x808.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-11-1459x1536.jpg 1459w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-11-1945x2048.jpg 1945w\" sizes=\"(max-width: 447px) 100vw, 447px\" \/><\/p>\n<p>H\u00e1, entretanto, cen\u00e1rios onde as interfaces \u201cacoplam\u201d a inclus\u00e3o de dados de interesse do mon\u00f3lito e do microsservi\u00e7o a uma \u00fanica opera\u00e7\u00e3o. Isso \u00e9 especialmente comum em sistemas grandes com \u201ctelas de cadastro\u201d gigantescas. Sempre que poss\u00edvel, o ideal seria \u201credefinir\u201d a experi\u00eancia do usu\u00e1rio conforme o processo. Entretanto, a adequa\u00e7\u00e3o da interface nem sempre est\u00e1 sob comando e controle dos times internos. Em cen\u00e1rios assim, o jeito \u00e9 desenvolver uma API externa que continue oferecendo a \u201cinterface unificada\u201d para os\u00a0<em>frontends,\u00a0<\/em>enquanto o controle da \u201csaga\u201d fica a cargo de uma camada de media\u00e7\u00e3o que orquestra as APIs internas.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5271\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-12-scaled.jpg\" alt=\"\" width=\"470\" height=\"587\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-12-scaled.jpg 2051w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-12-240x300.jpg 240w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-12-821x1024.jpg 821w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-12-768x958.jpg 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-12-1231x1536.jpg 1231w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/07\/EximiaCo-Img-12-1641x2048.jpg 1641w\" sizes=\"(max-width: 470px) 100vw, 470px\" \/><\/p>\n<h5 id=\"tratamento-de-dados-de-compartilhado-pelo-monolito-e-pelo-microsservico-5e95b9780cbc9\"><span id=\"Tratamento_de_dados_de_compartilhado_pelo_monolito_e_pelo_microsservico\">Tratamento de dados compartilhados pelo mon\u00f3lito e pelo microsservi\u00e7o<\/span><\/h5>\n<p>Quando um dado \u00e9 relevante tanto para o mon\u00f3lito quanto para o microsservi\u00e7o, \u00e9 necess\u00e1rio identificar em qual contexto ele \u201cnasce\u201d. Deve ser nesse contexto que, por padr\u00e3o, o dado dever\u00e1 ficar armazenado. Em caso de d\u00favidas razo\u00e1veis, recomendamos que a op\u00e7\u00e3o padr\u00e3o seja gravar os dados no mon\u00f3lito.<\/p>\n<p>A disponibiliza\u00e7\u00e3o de dados de um contexto para outro pode acontecer de diferentes formas. A mais simples, \u00e9 atrav\u00e9s do fornecimento de uma API interna para consulta combinada, se poss\u00edvel, com alguma estrat\u00e9gia agressiva de\u00a0<em>caching.<\/em><\/p>\n<p>Invariavelmente, nesses cen\u00e1rios, \u00e9 relevante considerar a implementa\u00e7\u00e3o de modelos de atualiza\u00e7\u00e3o baseados em notifica\u00e7\u00f5es por eventos.<\/p>\n<h2><span id=\"Indicacoes_e_contraindicacoes\">Indica\u00e7\u00f5es e contraindica\u00e7\u00f5es<\/span><\/h2>\n<p>O estilo Microsservi\u00e7os<em>\u00a0<\/em>\u00e9 uma abstra\u00e7\u00e3o poderosa que autoriza o desenvolvimento de sistemas robustos e distribu\u00eddos, com \u00eanfase em reduzir o acoplamento, tanto no c\u00f3digo quanto para os times. Entretanto, como \u00e9 sempre o caso, n\u00e3o \u00e9 uma solu\u00e7\u00e3o \u201cbala de prata\u201d.<\/p>\n<p>A redu\u00e7\u00e3o do acoplamento n\u00e3o acontece &#8220;de gra\u00e7a&#8221;. H\u00e1 um bocado de implica\u00e7\u00f5es na estrutura da organiza\u00e7\u00e3o que podem tornar a ado\u00e7\u00e3o do estilo proibitiva. Se times monol\u00edticos n\u00e3o implementam microsservi\u00e7os, ent\u00e3o ser\u00e1 muito dif\u00edcil que um time pequeno o consiga.<\/p>\n<p>Tamb\u00e9m \u00e9 importante informar que microsservi\u00e7os demandam pr\u00e1ticas de DevOps em &#8220;n\u00edvel <em>hard<\/em>&#8220;. Ou seja, \u00e1reas de opera\u00e7\u00e3o tremendamente maduras.<\/p>\n<p>A segrega\u00e7\u00e3o de um sistema em microsservi\u00e7os tamb\u00e9m representa um grande desafio. Se feita de forma equivocada, comprometer\u00e1, pelo menos, a performance.<\/p>\n<h2><span id=\"TODO\">\/\/ TODO<\/span><\/h2>\n<p>Antes de avan\u00e7ar para o pr\u00f3ximo cap\u00edtulo, recomendo as seguintes reflex\u00f5es:<\/p>\n<ul>\n<li>Acoplamento \u00e9 um problema, hoje, para sua equipe?<\/li>\n<li>Que benef\u00edcios, para o neg\u00f3cio, podem ser destacados ao se desenvolver uma aplica\u00e7\u00e3o\u00a0<em>cloud native?<\/em><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"featured_media":3830,"parent":0,"comment_status":"open","ping_status":"closed","template":"","url":[72],"sessoes":[59],"apendices":[],"capitulos":[47],"class_list":["post-2760","volume-1","type-volume-1","status-publish","has-post-thumbnail","hentry","url-permanente","sessoes-secao-3","capitulos-capitulo-3-6"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cap 3.6 Projetando sistemas com microsservi\u00e7os - Manual do Arquiteto de Software<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cap 3.6 Projetando sistemas com microsservi\u00e7os - Manual do Arquiteto de Software\" \/>\n<meta property=\"og:description\" content=\"Conceito fundamental Microsservi\u00e7os s\u00e3o (surpresa) servi\u00e7os com interfaces p\u00fablicas enxutas e extremamente coesas. A interface p\u00fablica de um servi\u00e7o habilita a &#8220;entrada e sa\u00edda&#8221; de informa\u00e7\u00f5es, tanto de forma s\u00edncrona &#8211; em um modelo baseado em\u00a0request\/response\u00a0&#8211; quanto ass\u00edncrona &#8211; atrav\u00e9s de troca de mensagens com comandos ou\u00a0eventos. Interfaces p\u00fablica enxutas e coesas, bem delimitadas, fazem [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/\" \/>\n<meta property=\"og:site_name\" content=\"Manual do Arquiteto de Software\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/eximiaco\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-12T21:19:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/2.5.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"338\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@eximiaco\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"33 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/\",\"name\":\"Cap 3.6 Projetando sistemas com microsservi\u00e7os - Manual do Arquiteto de Software\",\"isPartOf\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/2.5.jpg\",\"datePublished\":\"2022-07-26T00:03:29+00:00\",\"dateModified\":\"2024-01-12T21:19:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/#primaryimage\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/2.5.jpg\",\"contentUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/2.5.jpg\",\"width\":600,\"height\":338},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Volume 1\",\"item\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cap 3.6 Projetando sistemas com microsservi\u00e7os\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\",\"name\":\"Manual do Arquiteto de Software\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization\",\"name\":\"EximiaCo\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg\",\"contentUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg\",\"width\":150,\"height\":150,\"caption\":\"EximiaCo\"},\"image\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/eximiaco\",\"https:\/\/x.com\/eximiaco\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cap 3.6 Projetando sistemas com microsservi\u00e7os - Manual do Arquiteto de Software","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/","og_locale":"pt_BR","og_type":"article","og_title":"Cap 3.6 Projetando sistemas com microsservi\u00e7os - Manual do Arquiteto de Software","og_description":"Conceito fundamental Microsservi\u00e7os s\u00e3o (surpresa) servi\u00e7os com interfaces p\u00fablicas enxutas e extremamente coesas. A interface p\u00fablica de um servi\u00e7o habilita a &#8220;entrada e sa\u00edda&#8221; de informa\u00e7\u00f5es, tanto de forma s\u00edncrona &#8211; em um modelo baseado em\u00a0request\/response\u00a0&#8211; quanto ass\u00edncrona &#8211; atrav\u00e9s de troca de mensagens com comandos ou\u00a0eventos. Interfaces p\u00fablica enxutas e coesas, bem delimitadas, fazem [&hellip;]","og_url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/","og_site_name":"Manual do Arquiteto de Software","article_publisher":"https:\/\/facebook.com\/eximiaco","article_modified_time":"2024-01-12T21:19:16+00:00","og_image":[{"width":600,"height":338,"url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/2.5.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_site":"@eximiaco","twitter_misc":{"Est. tempo de leitura":"33 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/","name":"Cap 3.6 Projetando sistemas com microsservi\u00e7os - Manual do Arquiteto de Software","isPartOf":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website"},"primaryImageOfPage":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/#primaryimage"},"image":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/#primaryimage"},"thumbnailUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/2.5.jpg","datePublished":"2022-07-26T00:03:29+00:00","dateModified":"2024-01-12T21:19:16+00:00","breadcrumb":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/#primaryimage","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/2.5.jpg","contentUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/2.5.jpg","width":600,"height":338},{"@type":"BreadcrumbList","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/projetando-sistemas-com-microsservicos\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/"},{"@type":"ListItem","position":2,"name":"Volume 1","item":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/"},{"@type":"ListItem","position":3,"name":"Cap 3.6 Projetando sistemas com microsservi\u00e7os"}]},{"@type":"WebSite","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/","name":"Manual do Arquiteto de Software","description":"","publisher":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization","name":"EximiaCo","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg","contentUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg","width":150,"height":150,"caption":"EximiaCo"},"image":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/eximiaco","https:\/\/x.com\/eximiaco"]}]}},"_links":{"self":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/volume-1\/2760","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/volume-1"}],"about":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/types\/volume-1"}],"replies":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/comments?post=2760"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/media\/3830"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/media?parent=2760"}],"wp:term":[{"taxonomy":"url","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/url?post=2760"},{"taxonomy":"sessoes","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/sessoes?post=2760"},{"taxonomy":"apendices","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/apendices?post=2760"},{"taxonomy":"capitulos","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/capitulos?post=2760"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}