{"id":1686,"date":"2024-10-03T07:40:00","date_gmt":"2024-10-03T10:40:00","guid":{"rendered":"https:\/\/www.erudio.com.br\/blog\/?p=1686"},"modified":"2024-10-05T20:02:21","modified_gmt":"2024-10-05T23:02:21","slug":"arquitetura-de-aplicacoes-baseadas-em-conteineres-e-microsservicos","status":"publish","type":"post","link":"https:\/\/www.erudio.com.br\/blog\/arquitetura-de-aplicacoes-baseadas-em-conteineres-e-microsservicos\/","title":{"rendered":"Arquitetura de Aplica\u00e7\u00f5es Baseadas em Cont\u00eaineres e Microsservi\u00e7os"},"content":{"rendered":"\n<p><strong>Introdu\u00e7\u00e3o<\/strong><\/p>\n\n\n\n<p>O passado recente testemunhou uma transforma\u00e7\u00e3o significativa no ciclo de vida do desenvolvimento de software. Arquitetar aplica\u00e7\u00f5es baseadas em containers e microsservi\u00e7os \u00e9 uma abordagem crucial e eficiente para eliminar aplica\u00e7\u00f5es monol\u00edticas fortemente acopladas.<\/p>\n\n\n\n<p>A <em>containeriza\u00e7\u00e3o<\/em> \u00e9 um processo de encapsulamento de aplica\u00e7\u00f5es em uma unidade que oferece suporte ao ambiente para construir, executar e implantar aplica\u00e7\u00f5es. Trata-se de um ambiente leve e port\u00e1til para componentes de software. O <strong>Docker<\/strong> \u00e9 uma plataforma bem conhecida para containerizar uma aplica\u00e7\u00e3o, fornecendo virtualiza\u00e7\u00e3o em n\u00edvel de sistema operacional e entregando software em pacotes chamados containers.<\/p>\n\n\n\n<p>A moderniza\u00e7\u00e3o de aplica\u00e7\u00f5es e arquiteturas baseadas em microsservi\u00e7os oferecem maior flexibilidade, dividindo uma aplica\u00e7\u00e3o em servi\u00e7os menores e independentes. Essa abordagem melhora a estabilidade e resulta em uma arquitetura fracamente acoplada, em contraste com as aplica\u00e7\u00f5es monol\u00edticas tradicionais.<\/p>\n\n\n\n<p>Cada servi\u00e7o \u00e9 projetado com base em uma l\u00f3gica de neg\u00f3cios espec\u00edfica e pode interagir com outros servi\u00e7os internamente usando chamadas de <strong>API<\/strong> (<em>Application Programming Interface<\/em>) ou diferentes protocolos. Assim, o design oferece muito mais flexibilidade em termos de desenvolvimento, implanta\u00e7\u00e3o e balanceamento de carga.<\/p>\n\n\n\n<p>Neste artigo, exploraremos os componentes fundamentais, benef\u00edcios, desafios e a arquitetura de microsservi\u00e7os containerizados, juntamente com uma dica b\u00f4nus sobre como criar o primeiro servi\u00e7o containerizado usando a plataforma Docker.<\/p>\n\n\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker\" target=\"_blank\" rel=\"noopener\"><br>\n\t<img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker do 0 \u00e0 Maestria: Cont\u00eaineres Desmistificados mais 3 B\u00d4NUS\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/09-docker.png\"><br>\n<\/a>\n\n\n\n<p><strong>Componentes de Microsservi\u00e7os Containerizados<\/strong><br><strong>Servi\u00e7os<\/strong><\/p>\n\n\n\n<p>Os servi\u00e7os s\u00e3o os componentes individuais que s\u00e3o containerizados com a l\u00f3gica de neg\u00f3cios e capacidades espec\u00edficas. Cada servi\u00e7o \u00e9 implantado individualmente usando containers. Esses servi\u00e7os s\u00e3o fracamente acoplados e t\u00eam capacidade de se comunicar entre si de maneira escal\u00e1vel.<\/p>\n\n\n\n<p><strong>Containers<\/strong><\/p>\n\n\n\n<p>Os containers s\u00e3o unidades leves, port\u00e1teis e individualmente constru\u00eddas que fornecem um ambiente para executar a aplica\u00e7\u00e3o junto com as depend\u00eancias. Eles oferecem capacidades de computa\u00e7\u00e3o em tempo de execu\u00e7\u00e3o e flexibilidade para serem implantados em v\u00e1rias plataformas. Existem v\u00e1rias ferramentas e plataformas dispon\u00edveis, como <strong>Docker<\/strong>, <strong>Kubernetes<\/strong> e <strong>Amazon ECS<\/strong>, que cuidam da containeriza\u00e7\u00e3o de aplica\u00e7\u00f5es para implanta\u00e7\u00e3o e escalabilidade.<\/p>\n\n\n\n<p><strong>API Gateway<\/strong><\/p>\n\n\n\n<p>Um ponto de entrada comum para as solicita\u00e7\u00f5es que acessam a arquitetura de microsservi\u00e7os. Os <strong>API gateways<\/strong> cuidam do roteamento de solicita\u00e7\u00f5es, autoriza\u00e7\u00e3o, configura\u00e7\u00e3o de protocolos e uma interface comum para os consumidores finais.<\/p>\n\n\n\n<p><strong>Load Balancer<\/strong><\/p>\n\n\n\n<p>O <strong>Load balancer<\/strong> \u00e9 um componente respons\u00e1vel pela escalabilidade dos microsservi\u00e7os ao distribuir as solicita\u00e7\u00f5es recebidas de v\u00e1rias fontes. Ele ajuda a manter a utiliza\u00e7\u00e3o m\u00ednima dos recursos do servidor, identificando registros de servi\u00e7os e roteamentos configurados.<\/p>\n\n\n\n<p><strong>Streaming de Mensagens ou Eventos<\/strong><\/p>\n\n\n\n<p>Um sistema de mensagens confi\u00e1vel que facilita a transmiss\u00e3o ass\u00edncrona entre microsservi\u00e7os. Seu padr\u00e3o de design de arquitetura orientada a eventos permite a transmiss\u00e3o escal\u00e1vel e robusta de mensagens. Esses componentes incluem dois subcomponentes: o <strong>message broker<\/strong>, que cuida da comunica\u00e7\u00e3o entre servi\u00e7os, e a <strong>message queue<\/strong>, que mant\u00e9m os eventos\/mensagens temporariamente e garante a entrega bem-sucedida com toler\u00e2ncia a falhas.<\/p>\n\n\n\n<p><strong>Seguran\u00e7a<\/strong><\/p>\n\n\n\n<p>Este componente gerencia identidades de usu\u00e1rios, autentica\u00e7\u00e3o e autoriza\u00e7\u00e3o dentro da arquitetura de microsservi\u00e7os, identificando os pap\u00e9is e a\u00e7\u00f5es permitidas de uma solicita\u00e7\u00e3o recebida. Ele garante a prote\u00e7\u00e3o completa contra a\u00e7\u00f5es executadas usando os endpoints de API. <strong>RBAC<\/strong>, seguran\u00e7a do API gateway, <strong>Transport Layer Security<\/strong> (TLS), armazenamento seguro, prote\u00e7\u00e3o em tempo de execu\u00e7\u00e3o e trilhas de auditoria e registro s\u00e3o os principais componentes de seguran\u00e7a.<\/p>\n\n\n\n<p><strong>Logging e Monitoramento<\/strong><\/p>\n\n\n\n<p>Um servi\u00e7o dedicado que cuida de agregar e armazenar os logs e dados em um reposit\u00f3rio comum, ajudando no monitoramento, logging e solu\u00e7\u00e3o de problemas. O monitoramento \u00e9 o processo de coletar os logs armazenados e insights da aplica\u00e7\u00e3o para verificar a sa\u00fade do sistema, insights da aplica\u00e7\u00e3o, utiliza\u00e7\u00e3o de recursos e desempenho.<\/p>\n\n\n\n<p><strong>Integra\u00e7\u00e3o Cont\u00ednua\/Implanta\u00e7\u00e3o Cont\u00ednua (CI\/CD)<\/strong><\/p>\n\n\n\n<p><strong>CI\/CD<\/strong> \u00e9 um processo automatizado para containerizar e construir uma aplica\u00e7\u00e3o, testar e implantar servi\u00e7os. Ele possibilita uma entrega de software r\u00e1pida e robusta para a plataforma desejada com m\u00ednimo esfor\u00e7o e em menos tempo. Isso elimina a interfer\u00eancia humana b\u00e1sica e os riscos durante a implanta\u00e7\u00e3o da aplica\u00e7\u00e3o.<\/p>\n\n\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microservices do 0 com Spring Cloud, Spring Boot e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/14-microservices-java.png\">\n<\/a>\n\n\n\n<p><strong>Diagrama Arquitetural<\/strong><br>O diagrama da arquitetura de microsservi\u00e7os e containeriza\u00e7\u00e3o demonstra uma arquitetura moderna de software utilizando microsservi\u00e7os e solu\u00e7\u00f5es containerizadas para construir aplica\u00e7\u00f5es escal\u00e1veis, robustas e eficientes. Ele inclui v\u00e1rios componentes conforme mostrado abaixo no diagrama.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/09\/Docker-Host-1024x665.png\" alt=\"\" class=\"wp-image-1697\" width=\"512\" height=\"333\" srcset=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/09\/Docker-Host-1024x665.png 1024w, https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/09\/Docker-Host-300x195.png 300w, https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/09\/Docker-Host-768x499.png 768w, https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/09\/Docker-Host.png 1250w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p>Esta arquitetura cont\u00e9m quatro componentes principais:<\/p>\n\n\n\n<ol>\n<li><strong>Consumer<\/strong>: O usu\u00e1rio final ou sistema interage com os endpoints do servi\u00e7o para trocar dados entre cliente e servidor. O consumidor \u00e9 respons\u00e1vel por enviar solicita\u00e7\u00f5es ao <strong>API gateway<\/strong> em um formato especificado, incluindo detalhes de autentica\u00e7\u00e3o e protocolo necess\u00e1rios.<\/li>\n\n\n\n<li><strong>Container Host<\/strong>: Serve como uma plataforma para executar servi\u00e7os ou c\u00f3digo dentro de um sistema operacional virtual, contendo todas as depend\u00eancias essenciais espec\u00edficas do ambiente. O container host gerencia todo o ciclo de vida de uma aplica\u00e7\u00e3o, incluindo a inicia\u00e7\u00e3o do servi\u00e7o, tratamento de atualiza\u00e7\u00f5es over-the-air (OTA) e encerramento da aplica\u00e7\u00e3o. Ele oferece flexibilidade para gerenciar o comportamento da aplica\u00e7\u00e3o especificando as vari\u00e1veis de ambiente e par\u00e2metros de configura\u00e7\u00e3o no arquivo de configura\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Microservices<\/strong>: Microservices s\u00e3o uma cole\u00e7\u00e3o de servi\u00e7os individuais projetados para objetivos de neg\u00f3cios espec\u00edficos, interagindo por meio de endpoints ou protocolos internos configurados em um <em>event bus<\/em>. Esses servi\u00e7os s\u00e3o projetados para permitir a escalabilidade independente de cada componente, minimizando a interrup\u00e7\u00e3o dos outros. No caso de uma falha de servi\u00e7o, o impacto \u00e9 limitado ao servi\u00e7o e l\u00f3gica de neg\u00f3cios espec\u00edficos, garantindo resili\u00eancia em todo o ecossistema. A solu\u00e7\u00e3o de problemas torna-se muito f\u00e1cil com essa abordagem modular. No diagrama, quatro servi\u00e7os est\u00e3o operacionais dentro de um host Docker. Esses servi\u00e7os se comunicam entre si por meio de um <em>event bus<\/em> e s\u00e3o acess\u00edveis aos consumidores por meio de endpoints espec\u00edficos. Cada servi\u00e7o \u00e9 equipado com sua pr\u00f3pria l\u00f3gica de neg\u00f3cios e banco de dados, resultando na distribui\u00e7\u00e3o do tr\u00e1fego de consumidores de acordo. A escalabilidade e o balanceamento de carga podem ser gerenciados independentemente para cada servi\u00e7o com base no volume de tr\u00e1fego de consumidores ou na frequ\u00eancia de solicita\u00e7\u00f5es.<\/li>\n<\/ol>\n\n\n\n<ol start=\"4\">\n<li><strong>Event Bus ou Canal de Mensagens<\/strong>: Um microsservi\u00e7o \u00e9 uma plataforma descentralizada operando em v\u00e1rios containers ou m\u00e1quinas virtuais, necessitando de intera\u00e7\u00e3o entre v\u00e1rios processos ou servi\u00e7os para cumprir objetivos de neg\u00f3cios espec\u00edficos. Esse m\u00e9todo de comunica\u00e7\u00e3o varia com base na natureza dos servi\u00e7os, adaptando-se aos requisitos e implementa\u00e7\u00f5es. Protocolos poss\u00edveis incluem <strong>HTTP<\/strong>, <strong>TCP<\/strong>, <strong>MQTT<\/strong>, <strong>AMQP<\/strong>, <strong>WebSocket<\/strong>, entre outros. O <em>event bus<\/em> desempenha um papel crucial ao permitir uma comunica\u00e7\u00e3o desacoplada, ass\u00edncrona e intera\u00e7\u00f5es orientadas a eventos dentro da arquitetura de microsservi\u00e7os, promovendo escalabilidade, flexibilidade e resili\u00eancia em sistemas distribu\u00eddos. No geral, microsservi\u00e7os baseados em containers oferecem vantagens significativas em termos de flexibilidade, escalabilidade, efici\u00eancia de recursos, monitoramento e resili\u00eancia, tornando-os uma abordagem arquitet\u00f4nica preferida para aplica\u00e7\u00f5es <em>cloud-native<\/em> modernas.<\/li>\n<\/ol>\n\n\n\n<p><strong>Desafios e Considera\u00e7\u00f5es em Microsservi\u00e7os Containerizados<\/strong><br>Microsservi\u00e7os containerizados oferecem muito mais flexibilidade e vantagens, embora tamb\u00e9m tragam seus pr\u00f3prios desafios e considera\u00e7\u00f5es. Existem alguns desafios-chave que precisam ser considerados ao optar por microsservi\u00e7os containerizados.<\/p>\n\n\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices-dotnet\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Arquitetura de Microsservi\u00e7os do 0 com ASP.NET, .NET 6 e C#\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/15-microservices-dotnet.png\">\n<\/a>\n\n\n\n<p><strong>Complexidade Arquitetural<\/strong><\/p>\n\n\n\n<p>Gerenciar m\u00faltiplos servi\u00e7os usando plataformas containerizadas como <strong>Docker<\/strong> e <strong>Kubernetes<\/strong> requer habilidades e expertise espec\u00edficas para lidar com isso de forma tranquila. Pode se tornar complexo containerizar m\u00faltiplos servi\u00e7os com seus pr\u00f3prios conjuntos de depend\u00eancias.<\/p>\n\n\n\n<p><strong>Rede e Comunica\u00e7\u00e3o<\/strong><\/p>\n\n\n\n<p>A rede se torna desafiadora ao se comunicar com a aplica\u00e7\u00e3o, especialmente quando servi\u00e7os espec\u00edficos continuam a escalar para cima e para baixo, dependendo dos requisitos. \u00c0s vezes, o encaminhamento de portas, mapeamento de portas, mapeamento de volumes e exposi\u00e7\u00e3o de elementos fora de um container se tornam desafiadores.<\/p>\n\n\n\n<p><strong>Seguran\u00e7a<\/strong><\/p>\n\n\n\n<p>Microsservi\u00e7os containerizados oferecem considera\u00e7\u00f5es adicionais de seguran\u00e7a, como vulnerabilidades em containers e seguran\u00e7a de rede. Ao implantar c\u00f3digo containerizado, pode ser necess\u00e1rio prestar aten\u00e7\u00e3o \u00e0s pr\u00e1ticas de codifica\u00e7\u00e3o, <strong>scanning<\/strong> de imagens de containers e controle de acesso para eliminar riscos de seguran\u00e7a.<\/p>\n\n\n\n<p><strong>Gerenciamento de Dados<\/strong><\/p>\n\n\n\n<p>Gerenciar dados em ambientes de microsservi\u00e7os containerizados pode ser desafiador, pois cada servi\u00e7o pode usar bancos de dados distribu\u00eddos. Portanto, implementar m\u00e9todos de armazenamento, backup e recupera\u00e7\u00e3o de dados torna-se um gargalo para garantir a integridade dos dados.<\/p>\n\n\n\n<p><strong>Monitoramento e Solu\u00e7\u00e3o de Problemas<\/strong><\/p>\n\n\n\n<p>Monitorar e solucionar problemas em uma aplica\u00e7\u00e3o containerizada exige ferramentas ou expertise especializadas devido ao encapsulamento dentro de um container no host. Consequentemente, identificar logs, erros ou rastreamentos pode ser desafiador, exigindo a configura\u00e7\u00e3o adequada de recursos de logging e monitoramento para solu\u00e7\u00e3o eficaz de problemas da aplica\u00e7\u00e3o.<\/p>\n\n\n\n<p><strong>Gerenciamento de Custos<\/strong><\/p>\n\n\n\n<p>Ambientes de microsservi\u00e7os containerizados podem exigir custos adicionais associados \u00e0 infraestrutura, orquestra\u00e7\u00e3o, monitoramento e ferramentas de solu\u00e7\u00e3o de problemas. Considera\u00e7\u00f5es como utiliza\u00e7\u00e3o de recursos, metodologias de escalabilidade, licenciamento e ferramentas de solu\u00e7\u00e3o de problemas devem ser levadas em conta durante o desenvolvimento dos microsservi\u00e7os.<\/p>\n\n\n\n<p><strong>Integra\u00e7\u00e3o Cont\u00ednua\/Implanta\u00e7\u00e3o Cont\u00ednua (CI\/CD)<\/strong><\/p>\n\n\n\n<p>Microsservi\u00e7os containerizados podem ter v\u00e1rias aplica\u00e7\u00f5es, apresentando desafios para a <strong>CI\/CD<\/strong> para garantir compatibilidade entre as imagens e o c\u00f3digo-fonte. Medidas adequadas de versionamento e compatibilidade devem ser implementadas para lidar com essa complexidade de forma eficaz.<\/p>\n\n\n\n<p>Adotar microsservi\u00e7os containerizados pode exigir uma equipe DevOps habilidosa para lidar com a implanta\u00e7\u00e3o, potencialmente requerendo aloca\u00e7\u00e3o adicional de recursos para suporte adequado.<\/p>\n\n\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ms_kotlin\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microsservi\u00e7os do 0 com Spring Cloud, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/22-ms-kotlin.png\">\n<\/a>\n\n\n\n<p><strong>Conclus\u00e3o<\/strong><\/p>\n\n\n\n<p>Arquitetar aplica\u00e7\u00f5es com containers e microsservi\u00e7os oferece flexibilidade, escalabilidade e efici\u00eancia para o desenvolvimento moderno de software, superando limita\u00e7\u00f5es das arquiteturas monol\u00edticas. Ferramentas como <strong>Docker<\/strong> e <strong>Kubernetes<\/strong> facilitam a containeriza\u00e7\u00e3o, permitindo integra\u00e7\u00e3o \u00e1gil de servi\u00e7os e independ\u00eancia entre eles.<\/p>\n\n\n\n<p>Entretanto, essa arquitetura tamb\u00e9m traz desafios, como a complexidade, seguran\u00e7a, e custos de infraestrutura, que requerem aten\u00e7\u00e3o especializada. Com o uso adequado de <strong>CI\/CD<\/strong> e planejamento estrat\u00e9gico, as organiza\u00e7\u00f5es podem aproveitar os benef\u00edcios dessa abordagem, criando solu\u00e7\u00f5es resilientes, \u00e1geis e escal\u00e1veis.<\/p>\n\n\n\n<h2>Treinamentos relacionados com essa postagem<\/h2>\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0  AWS com Spring Boot 3, Java e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/07-rest-spring-java.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker\" target=\"_blank\" rel=\"noopener\"><br>\n\t<img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker do 0 \u00e0 Maestria: Cont\u00eaineres Desmistificados mais 3 B\u00d4NUS\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/09-docker.png\"><br>\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microservices do 0 com Spring Cloud, Spring Boot e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/14-microservices-java.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ms_kotlin\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microsservi\u00e7os do 0 com Spring Cloud, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/22-ms-kotlin.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices-dotnet\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Arquitetura de Microsservi\u00e7os do 0 com ASP.NET, .NET 6 e C#\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/15-microservices-dotnet.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_tests_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Java Unit Testing com Spring Boot 3, TDD, Junit 5 e Mockito\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/24-tests_java.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ci_cd_java_aws\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Java Continuous Integration e Continuous Delivery com AWS e Github Actions\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/27_CICD_JavaAWS.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ci_cd_java_azure\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Java Continuous Integration e Continuous Delivery com Microsoft Azure e Github Actions\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/28_CICD_JavaAzure.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_asp_net\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 Azure com ASP.NET Core 5 e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/01-rest-asp.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_kotlin\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 AWS com Spring Boot 3, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/18-rest-spring-kotlin.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker_para_aws\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker para Amazon AWS Implante Apps Java e .NET com Travis CI\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/10-docker-to-aws.png\"><br>\n<\/a>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o O passado recente testemunhou uma transforma\u00e7\u00e3o significativa no ciclo de vida do desenvolvimento de software. Arquitetar aplica\u00e7\u00f5es baseadas em containers e microsservi\u00e7os \u00e9 uma abordagem crucial e eficiente para eliminar aplica\u00e7\u00f5es monol\u00edticas fortemente acopladas. A containeriza\u00e7\u00e3o \u00e9 um processo de encapsulamento de aplica\u00e7\u00f5es em uma unidade que oferece suporte ao ambiente para construir, executar [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1726,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[305,307,295,27,290,306],"tags":[309,310,151,292,308,300],"_links":{"self":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/1686"}],"collection":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1686"}],"version-history":[{"count":9,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/1686\/revisions"}],"predecessor-version":[{"id":1710,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/1686\/revisions\/1710"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/media\/1726"}],"wp:attachment":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1686"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1686"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}