- 1. Microsserviços explicados
- 2. Da arquitetura orientada a serviços aos microsserviços
- 3. Benefícios dos microsserviços
- 4. Quando usar microsserviços
- 5. Criação e implantação de aplicativos baseados em microsserviços
- 6. Práticas recomendadas de microsserviços
- 7. Adoção de microsserviços
- 8. Protegendo os microsserviços
- 9. Perguntas frequentes sobre microsserviços
- Microsserviços explicados
- Da arquitetura orientada a serviços aos microsserviços
- Benefícios dos microsserviços
- Quando usar microsserviços
- Criação e implantação de aplicativos baseados em microsserviços
- Práticas recomendadas de microsserviços
- Adoção de microsserviços
- Protegendo os microsserviços
- Perguntas frequentes sobre microsserviços
O que são microsserviços?
- Microsserviços explicados
- Da arquitetura orientada a serviços aos microsserviços
- Benefícios dos microsserviços
- Quando usar microsserviços
- Criação e implantação de aplicativos baseados em microsserviços
- Práticas recomendadas de microsserviços
- Adoção de microsserviços
- Protegendo os microsserviços
- Perguntas frequentes sobre microsserviços
Os microsserviços descrevem uma abordagem de arquitetura nativa da nuvem para o desenvolvimento de software que estrutura um aplicativo a partir de serviços frouxamente acoplados em comunicação uns com os outros por meio de APIs ou protocolos de mensagens. Cada serviço é autônomo e independente e executa um processo exclusivo. À medida que os desenvolvedores buscam criar aplicativos dimensionáveis e resilientes, os microsserviços se tornam cada vez mais populares.
Microsserviços explicados
Os microsserviços, também conhecidos como arquitetura de microsserviços, são um tipo de arquitetura de software usado no desenvolvimento de aplicativos nativos da nuvem. Os aplicativos projetados por esse design compreendem componentes de implantação pequenos, independentes e fracamente acoplados que, juntos, fornecem os recursos do aplicativo.
Cada serviço na arquitetura de microsserviços executa uma função comercial distinta e se comunica com outros microsserviços por meio de interfaces bem definidas, principalmente usando APIs Rest.
Ao contrário do aplicativo monolítico desenvolvido como uma única unidade, os microsserviços permitem que os desenvolvedores criem módulos que podem ser desenvolvidos, testados e implantados de forma independente, o que acelera o tempo de lançamento no mercado. Como a natureza de desacoplamento dos microsserviços permite que os desenvolvedores enviem novos códigos e funcionalidades com mais frequência do que seria possível, os aplicativos modernos são capazes de acompanhar a evolução das necessidades dos clientes.
Mais de três quartos das empresas migraram para microsserviços, substituindo seus aplicativos monolíticos hospedados em servidores da Web individuais por aplicativos nativos da nuvem em contêineres distribuídos em um cluster de servidores host.
Da arquitetura orientada a serviços aos microsserviços
A arquitetura orientada a serviços (SOA) existe desde o início dos anos 2000 como uma forma de criar sistemas grandes e distribuídos, decompondo-os em serviços menores e pouco acoplados. A arquitetura de microsserviços surgiu como uma evolução natural da SOA.
O conceito de microsserviços foi apresentado por Fred George em um workshop de 2011 sobre arquitetura de software. George estava tentando resolver problemas de escalabilidade com SOA enquanto trabalhava em um site de comércio eletrônico e teve a ideia de criar serviços pequenos e autônomos..
A arquitetura de microsserviços adotou os princípios de orientação de serviço da SOA e os refinou para aplicativos modernos nativos da nuvem. Os serviços de granulação grossa da SOA se tornaram "micro" serviços granulares de granulação fina, o que os tornou altamente eficientes e proporcionou a flexibilidade de combinar uma pilha de tecnologia com um determinado serviço. A arquitetura de microsserviços reduziu até mesmo a carga de comunicação ao substituir as pesadas APIs SOAP por opções mais leves, como APIs REST ou filas de mensagens.
Os microsserviços logo ganharam popularidade entre os arquitetos de software, e empresas como Netflix, Amazon, The Guardian e Spotify começaram a adotar essa arquitetura.

Figura 1: A arquitetura de microsserviços é a base para os benefícios associados ao aplicativo moderno e nativo da nuvem
Benefícios dos microsserviços
Os microsserviços fornecem uma estrutura para a criação de aplicativos nativos da nuvem que podem se adaptar aos requisitos comerciais em constante mudança. Os inúmeros benefícios decorrem da arquitetura do aplicativo.
Agilidade
A arquitetura de microsserviços se presta ao desenvolvimento e à implantação independentes. Ao contrário dos aplicativos monolíticos, em que a alteração de uma linha de código envolve a atualização de todo o aplicativo, os desenvolvedores podem modificar ou substituir serviços sem afetar o sistema distribuído. A capacidade de implantar serviços individuais facilita a adição de novos recursos ou a reversão de alterações em um aplicativo.
Escalabilidade
Dimensionar um aplicativo inteiro não é o ideal. Com os microsserviços, apenas os componentes que exigem escala são dimensionados. Os desenvolvedores podem abordar um serviço individual conforme necessário, o que, em última análise, facilita um melhor desempenho sob cargas pesadas, o uso eficiente de recursos e menores custos de infraestrutura.
Escolha
Na arquitetura de microsserviços, o aplicativo nativo da nuvem não compartilha uma pilha e um banco de dados comuns. Os desenvolvedores podem escolher as ferramentas que preferem e as tecnologias para atender aos requisitos distintos de serviços individuais.
Integração
Os desenvolvedores podem escrever microsserviços em qualquer linguagem e conectá-los a microsserviços programados em qualquer linguagem. Além disso, os microsserviços podem ser executados em qualquer plataforma, o que os torna disponíveis para integração com sistemas legados.
Reutilização de código
A arquitetura de microsserviços permite que os desenvolvedores criem serviços modulares que podem ser reutilizados em vários aplicativos. Ao trabalhar com componentes reutilizáveis, os programadores reduzem o tempo de desenvolvimento e melhoram a qualidade do código, pois investem em uma cultura de "escrever uma vez, reutilizar com frequência".
Tolerância a falhas
A arquitetura de microsserviços promove a resiliência. Com serviços projetados para operar de forma autônoma, a falha de um único serviço raramente desliga o aplicativo, como tende a acontecer com aplicativos monolíticos.
Colaboração
A arquitetura de microsserviços permite que as equipes trabalhem em diferentes serviços simultaneamente, o que se traduz em um tempo de colocação no mercado mais rápido. Embora os desenvolvedores tomem decisões sem precisar se coordenar com outras equipes, os microsserviços também promovem a colaboração entre equipes, pois cada equipe é responsável pelo desenvolvimento e manutenção de uma parte do todo. Isso pode levar a um melhor alinhamento com as metas comerciais e a um uso mais eficiente dos recursos.
Iteração contínua
O aplicativo criado com microsserviços foi desenvolvido para evoluir. Os desenvolvedores podem implantar rapidamente os microsserviços principais como um produto mínimo viável e atualizar o aplicativo à medida que as equipes concluem serviços adicionais. Novas tecnologias podem ser incorporadas ao projeto à medida que surgem. O aplicativo baseado em microsserviços permanece em processo, movendo-se continuamente em direção à perfeição teórica.
Quando usar microsserviços
Embora os microsserviços baseados em contêineres ofereçam muitos benefícios, eles nem sempre são a arquitetura de aplicativo certa a ser escolhida. Ao tomar decisões de engenharia de software, pense em suas metas para o aplicativo, bem como nos obstáculos de desenvolvimento e nas necessidades que o senhor prevê em vista da vida útil do aplicativo. Os microsserviços funcionam melhor com aplicativos complexos. Os cenários para considerar o uso de microsserviços incluem:
Aplicações de grande porte
Se o senhor estiver criando um aplicativo grande e complexo, os microsserviços permitirão dividir o aplicativo em partes gerenciáveis, facilitando o desenvolvimento, a implantação e a manutenção.
Complexidades da linha do tempo
A arquitetura de microsserviços pode acomodar serviços independentes com diferentes taxas de desenvolvimento. Mesmo que um serviço sofra um atraso inesperado, o projeto pode continuar sem implicações globais no cronograma de desenvolvimento do aplicativo.
Atualizações frequentes
A arquitetura de microsserviços é ideal para aplicativos que exigem atualizações frequentes, pois os serviços independentes permitem que os desenvolvedores modifiquem o módulo em vez do aplicativo.
Alta escalabilidade
Se o seu aplicativo precisa lidar com um alto volume de tráfego ou precisa ser dimensionado rapidamente, os microsserviços são essenciais. Isso ocorre principalmente se o senhor precisar escalonar partes específicas do aplicativo, em vez de escalonar o aplicativo inteiro.
Várias equipes
Se o senhor tiver várias equipes de desenvolvimento trabalhando no mesmo aplicativo, os microsserviços o ajudarão a manter a agilidade e a eficiência. Cada equipe pode trabalhar em seu microsserviço, usando a pilha de tecnologia que funciona para eles, sem se preocupar com o restante do aplicativo.
Arquitetura descentralizada
Se quiser criar um aplicativo com uma arquitetura descentralizada, os microsserviços são autônomos e podem ser implantados em diferentes locais, mesmo entre diferentes provedores de serviços em nuvem.
Nuvem híbrida
Se o senhor estiver planejando uma arquitetura de nuvem híbrida, em que alguns serviços continuarão sendo executados no local e outros serão executados na nuvem, os microsserviços o ajudarão a gerenciar a complexidade do aplicativo.

Chamadas de API que representam solicitações de clientes roteadas pelo gateway de API para os endpoints dos microsserviços internos API gateway to the endpoints of the internal microservices.
Criação e implantação de aplicativos baseados em microsserviços
A arquitetura de microsserviços exige um planejamento cuidadoso. Certas tecnologias e práticas comuns ao ambiente de produção permitem que os desenvolvedores desenvolvam, mantenham e operem aplicativos baseados em microsserviços de forma eficaz.
DevOps
As práticas de DevOps, incluindo CI/CD, são essenciais para a abordagem de arquitetura dos microsserviços. Ao contrário dos aplicativos monolíticos, os microsserviços são sistemas distribuídos inerentemente complexos com várias partes móveis e pilhas de tecnologia independentes. Essa complexidade exige colaboração frequente entre as equipes de desenvolvimento e operações para garantir que os componentes sejam perfeitamente integrados.
As práticas de DevOps fornecem as ferramentas de colaboração, comunicação e automação necessárias para reunir efetivamente as equipes durante todo o ciclo de vida de desenvolvimento de software.
Entrega contínua
A entrega contínua anda de mãos dadas com os microsserviços, permitindo que os desenvolvedores lancem atualizações de software com frequência e confiabilidade, fazendo uso de ferramentas de automação de infraestrutura, como servidores de integração contínua, pipelines de implantação e estruturas de teste automatizadas para simplificar o processo de CI/CD.
A entrega contínua é especialmente importante para garantir que cada serviço possa ser atualizado e liberado independentemente dos outros microsserviços.
REST
Os microsserviços se comunicam com os microsserviços, e a maioria faz isso dentro de aplicativos da Web, o que torna o REST complementar. REST, ou Representational State Transfer, é um padrão de projeto arquitetônico para a criação de APIs RESTful, que permite que os serviços se comuniquem via HTTP em formatos padrão, como XML, HTML e JSON. Mas as APIs Rest são fundamentais para os aplicativos baseados em microsserviços por vários motivos.
As APIs Rest são leves e independentes de plataforma, o que significa que fornecem uma interface padronizada que permite que os microsserviços se comuniquem, independentemente de sua tecnologia subjacente. Como os requisitos contêm as informações necessárias para concluir a solicitação, as APIs Rest não exigem contexto armazenado no servidor. Eles podem lidar com grandes volumes de solicitações sem comprometer o desempenho, e os serviços em uma arquitetura de microsserviços baseada em REST podem evoluir de forma independente, comunicando-se de forma eficiente e sem estado.
Contêineres
Embora os microsserviços ofereçam às equipes a opção de escolher a linguagem e a estrutura de seus serviços, trabalhar com várias linguagens no mesmo pipeline de CD apresenta desafios. Os contêineres abstraem a variação entre os serviços, já que cada microsserviço se torna uma unidade autônoma, embalada com sua base de código, banco de dados e dependências. O pipeline de CD, agora homogêneo, pode realizar testes consistentes de cada contêiner.
Os serviços são capazes de interagir sem interferir uns com os outros quando separados por contêineres e, uma vez implantados, os contêineres fornecem um ambiente de tempo de execução leve e portátil que permite que os serviços funcionem de forma consistente em todas as plataformas. Ferramentas como Docker e Kubernetes são amplamente usadas para gerenciar microsserviços em contêineres.
Orquestrador de Kubernetes
Uma ferramenta de orquestração como o Kubernetes pode abstrair a infraestrutura subjacente e automatizar o gerenciamento, a implantação e a escala de contêineres em vários servidores. Sua extensibilidade também permite que os desenvolvedores e operadores usem suas ferramentas de software comercial e de código aberto preferidas, reduzindo o trabalho manual de gerenciamento de contêineres.
Sem servidor
A computação sem servidor é outra opção para implantar microsserviços. Asarquiteturas sem servidor usam plataformas de funções como serviço (FaaS) para criar unidades ainda menores de implantação e escalar sob demanda. Embora as arquiteturas sem servidor possam aumentar as dependências do fornecedor, elas oferecem custo operacional, complexidade e tempo de engenharia reduzidos.
Práticas recomendadas de microsserviços
O projeto de uma arquitetura de microsserviço exige planejamento e consideração cuidadosos. Para criar aplicativos bem-sucedidos baseados em microsserviços, os desenvolvedores devem observar as seguintes práticas recomendadas:
- Design orientado por domínio: O design orientado por domínio (DDD) é uma abordagem de design que se concentra no domínio comercial e no comportamento do aplicativo. Ele ajuda os desenvolvedores a dividir o aplicativo em componentes menores e mais gerenciáveis, facilitando a criação, a implantação e a manutenção.
- Limites do serviço: Ao projetar uma arquitetura de microsserviço, é essencial definir limites claros de serviço. Cada microsserviço deve ter uma responsabilidade bem definida.
- Pequenos serviços: Mantenha os serviços "micro", concentrados em uma única responsabilidade. Perder de vista esse princípio fundamental sacrificará a capacidade de gerenciamento.
- Design de API: Os microsserviços se comunicam por meio de APIs, portanto, use APIs consistentes, dimensionáveis e seguras que restrinjam o acesso aos dados a aplicativos, usuários e servidores autorizados.
- Gerenciamento de dados descentralizado: Os aplicativos de microsserviços exigem uma variedade de opções de armazenamento e banco de dados. Cada microsserviço deve ter seu próprio armazenamento de dados. Essa abordagem ajuda a evitar inconsistências de dados e permite que o senhor dimensione cada microsserviço de forma autônoma. O senhor deseja que a equipe de desenvolvimento escolha o banco de dados de cada serviço para garantir que ele seja o mais adequado ao projeto.
- Pipelines de CI/CD: A implementação da CI/CD o ajudará a encontrar e corrigir bugs rapidamente, o que é especialmente valioso com várias bases de código para gerenciar em uma arquitetura de microsserviços.
- Resiliência intencional: Proteger o aplicativo contra desligamentos por falha de dependência. Não use chamadas de procedimento remoto (RPCs) entre microsserviços, se possível, e incorpore recursos como disjuntores para impedir falhas em cascata.
- SOP: Desenvolver procedimentos operacionais padrão que definam convenções de codificação, estruturas de diretório e protocolos de comunicação. Seguir um conjunto de padrões resultará em microsserviços consistentes e gerenciáveis.
Adoção de microsserviços
eBay, Etsy, Uber - inúmeras empresas desmontaram seus aplicativos monolíticos e os refatoraram em arquiteturas baseadas em microsserviços para capitalizar vantagens em escala, agilidade nos negócios e ganhos financeiros.
As organizações que planejam fazer a transição para microsserviços devem primeiro adotar o DevOps, que o preparará para gerenciar as complexidades que encontrará. Em um nível básico, preveja os estágios descritos abaixo ao mapear seu projeto.
Identificar as capacidades de negócios
A primeira etapa da migração para a arquitetura de microsserviços é identificar os recursos ou capacidades comerciais que seu aplicativo precisa suportar. Isso o ajudará a definir o escopo do seu aplicativo e informará suas decisões sobre quais recursos devem ser priorizados para desenvolvimento, além de como esses microsserviços devem ser projetados e integrados uns aos outros.
Decompor o aplicativo monolítico
A maioria das organizações usa o design orientado por domínio ou a decomposição baseada em recursos para decompor seus aplicativos monolíticos.
Depois de identificar os recursos comerciais do aplicativo, defina os limites de serviço para cada microsserviço, garantindo que cada microsserviço tenha uma responsabilidade distinta e bem definida. O senhor deve mapear as dependências entre os recursos comerciais, os armazenamentos de dados e os sistemas externos. Com base nos contextos e dependências limitados, defina os microsserviços que substituirão o aplicativo monolítico.
Cada microsserviço, focado em um único recurso comercial, deve ter interfaces claras. Analise como as entidades de dados são acessadas e, por fim, considere como particionar os dados para reduzir as dependências entre os serviços.
Definir interfaces de serviço
Implementar as interfaces de serviço para cada microsserviço, garantindo que a interface reflita a responsabilidade exclusiva do microsserviço. O senhor pode usar diferentes técnicas, como APIs RESTful ou protocolos de mensagens, para definir as interfaces de serviço.
Implementar e testar os serviços
Dependendo dos requisitos e da experiência do senhor, escolha as linguagens de programação e as estruturas para implementar os serviços. Iterar o projeto conforme necessário, incluindo o teste de novas interfaces, protocolos de comunicação e armazenamentos de dados.
Containerize os serviços
Depois de implementar e testar os serviços, o senhor deverá colocá-los em contêineres usando tecnologias de contêineres, como o Docker ou o Kubernetes. A conteinerização permitirá que o senhor implante e gerencie os serviços de forma independente.
Automatize a implantação e a orquestração
Automatize a orquestração dos serviços usando ferramentas como o Kubernetes ou o Docker Swarm. Além de simplificar a implantação de serviços com eficiência, a automação por meio do Kubernetes ou do Docker melhorará a confiabilidade e a disponibilidade do aplicativo. Qualquer uma das plataformas pode detectar quando uma instância de serviço falha ou deixa de responder e tomar medidas para corrigir o problema. O Kubernetes, por exemplo, pode reiniciar instâncias com falha ou reprogramá-las para outros nós, enquanto o Docker pode migrar automaticamente o contêiner com falha para outro nó.
Monitorar e gerenciar os serviços
A decomposição de um aplicativo monolítico não é um processo único. Ele requer manutenção e atualizações à medida que os requisitos do aplicativo e de seus usuários evoluem. Monitore os novos microsserviços e acompanhe as principais métricas, como o tempo de resposta e a utilização de recursos.
Protegendo os microsserviços
Os aplicativos de microsserviços altamente distribuídos e nativos da nuvem introduzem complexidades de segurança. Em vez de um único ponto de entrada, eles vêm com dezenas, se não centenas, de possíveis pontos de vulnerabilidade, e cada um deles deve ser protegido. As APIs e as dependências de código representam apenas duas fontes de risco na superfície de ataque em expansão do aplicativo moderno.
Segurança de API e aplicativos da Web
Os aplicativos modernos consomem informações de várias fontes: solicitações padrão da Web, chamadas de API de dispositivos móveis, eventos na nuvem, comunicação de telemetria de dispositivos IoT, armazenamento na nuvem etc. Além disso, uma única solicitação da Web de um cliente (ou seja, tráfego norte-sul) pode gerar centenas de chamadas de API entre microsserviços internos (ou seja, tráfego leste-oeste).
A complexidade dos aplicativos da Web centrados em API exige estratégias dimensionáveis, flexíveis e de várias camadas que funcionem para qualquer tipo de carga de trabalho em qualquer tipo de ambiente ou arquitetura de nuvem. Proteger a interface da web de front-end do aplicativo nativo da nuvem não é suficiente. Os aplicativos nativos da nuvem exigem proteção da camada de aplicativos para APIs nativas da nuvem. A segurança de aplicativos Web e API (WAAS) é essencial.
Dependências de código e análise de composição de software
Os componentes de software de código aberto compõem aproximadamente 70% dos aplicativos nativos da nuvem. Embora isso agilize o desenvolvimento, muitos pacotes de código aberto e suas dependências contêm vulnerabilidades. Além disso, cada versão de um pacote OSS orientado por dependência pode alterar a funcionalidade crítica. Sem visibilidade total, as vulnerabilidades não são detectadas.
Ferramentas autônomas de análise de composição de software (SCA) revelam riscos de código aberto muito tarde no ciclo de vida do desenvolvimento, o que causa um acúmulo de vulnerabilidades que nem sempre podem ser resolvidas. Ferramentas separadas para SCA e segurança de IaC resultam em alertas ruidosos sem contexto e conhecimento dos riscos interconectados. Como as lacunas são inevitáveis sem a cobertura do tempo de execução e da carga de trabalho, é melhor proteger os aplicativos nativos da nuvem com segurança nativa da nuvemintegrada.
Code-to-Cloud CNAPP
Identificando e priorizando os riscos críticos de todo o aplicativo nativo da nuvem, uma plataforma de proteção de aplicativos nativos da nuvem (CNAPP) integra vários tipos de segurança para oferecer proteção abrangente de código para nuvem - gerenciamento de postura de segurança na nuvem (CSPM), proteção de carga de trabalho na nuvem, gerenciamento de direitos de infraestrutura na nuvem (CIEM), gerenciamento de postura de segurança do Kubernetes (KSPM), segurança de infraestrutura como código, WAAS, SCA e muito mais.
A liderança em segurança da nuvem que explora a melhor forma de proteger as necessidades de desenvolvimento rápido de aplicativos que empregam tecnologias nativas da nuvem, como contêineres, microsserviços e funções sem servidor, deve considerar a adoção de um CNAPP.