Assim como na jardinagem, o desenvolvimento de software exige compreender como diferentes elementos trabalham em conjunto para criar um ecossistema bonito e produtivo. Foi isso que nos levou a escolher a jardinagem como tema do programa Microservices March deste ano. Como acontece em qualquer jardim, uma erva daninha problemática insiste em surgir na conversa: qual é a diferença entre microsserviços e Kubernetes?

As plantas são os principais elementos do ecossistema de um jardim. Elas são os organismos vivos que compõem seu jardim e contribuem para sua beleza e funcionalidade. Da mesma forma, os microsserviços são os principais componentes de aplicações de software modernas. Eles são os serviços individuais que desempenham funções específicas e trabalham em conjunto para criar uma aplicação maior e mais complexa.
Assim como as plantas, os microsserviços variam em tamanho, formato e finalidade. Alguns são pequenos e especializados, responsáveis por uma única operação. Outros são maiores e mais abrangentes em suas operações ou formados por um conjunto de componentes menores. Por exemplo, um pé de morango é pequeno e produz apenas morangos. Isso se assemelha a um microsserviço que processa somente transações com cartão de crédito (pequeno e especializado). Já uma planta mais versátil, como o coentro, produz não apenas as folhas usadas em salsa e guacamole, mas também as sementes de coentro. Esse tipo de planta se assemelha a um serviço que gerencia a autenticação de usuários (um processo maior e mais abrangente).

A maioria das plantas precisa ser plantada no solo para absorver nutrientes e umidade — se forem deixadas com as raízes expostas, morrerão. Embora seja perfeitamente aceitável plantá-las diretamente no chão, muitos jardineiros optam pelo cultivo em vasos, pois isso permite personalizar o solo, proteger melhor as plantas contra pragas e movê-las pelo jardim (ou até mesmo levá-las para dentro de casa durante o inverno). Da mesma forma, há várias opções de onde colocar os microsserviços, sendo a mais comum, apropriadamente, um “contêiner”. Um microsserviço conteinerizado inclui tudo o que é necessário para executar a aplicação e pode ser facilmente transferido entre ambientes de execução.

Então, temos nossos microsserviços (plantas) em nossos contêineres (vasos), mas como fazemos para implantá-los, mantê-los e escalá-los? Com ferramentas! É aí que entra o Kubernetes. O Kubernetes oferece muitos recursos e complementos que facilitam o gerenciamento e a manutenção de microsserviços, sendo considerado a ferramenta padrão de fato para a orquestração de contêineres. Por exemplo, o Kubernetes oferece balanceamento de carga automatizado, descoberta de serviços e recursos de autorrecuperação (para aliviar parte do trabalho de manutenção e monitoramento dos seus desenvolvedores). E quando todos quiserem que seus microsserviços (plantas) produzam mais? O Kubernetes oferece escalabilidade automática e atualizações graduais para manter seus aplicativos de microsserviços funcionando sem problemas.
Observação: alternativas ao Kubernetes, como Docker Swarm e HashiCorp Nomad, oferecem praticamente as mesmas funcionalidades.

Já demonstramos as vantagens de usar o Kubernetes para gerenciar microsserviços e evitar que as aplicações cresçam de forma desordenada e fora de controle. No entanto, o Kubernetes e os contêineres nem sempre são necessários. Dependendo da complexidade da sua aplicação, você pode optar por uma plataforma tradicional de máquinas virtuais (ou até mesmo físicas), que ainda pode ser implantada ou provisionada com ferramentas de automação. Essas ferramentas não oferecem o mesmo nível de automação e escalabilidade do Kubernetes, mas essa pode ser uma troca aceitável para aplicações menos complexas ou não críticas. Outra opção é usar plataformas de computação sem servidor (como o AWS Lambda), que permitem executar o código dos seus microsserviços em resposta a eventos sem precisar se preocupar com a infraestrutura subjacente.

Jardineiros experientes sabem que o plantio consorciado – por exemplo, cravos-de-defunto ao lado de tomates – otimiza o uso dos recursos e contribui para uma horta mais saudável. Da mesma forma, o Kubernetes oferece uma ampla variedade de recursos e complementos que o tornam adequado para muito mais do que o gerenciamento de microsserviços. Por exemplo, o Kubernetes pode ser usado para aplicações que não são baseadas em microsserviços, como modelos de aprendizado de máquina ou monólitos. Vemos muitos clientes usando o Kubernetes para gerenciar microsserviços e outras aplicações, e alguns chegam até mesmo a implantar máquinas virtuais (VMs) dentro do Kubernetes! Essa pode ser uma ótima opção para organizações que estão migrando aplicações monolíticas legadas para uma arquitetura orientada a microsserviços.
Indo à raiz da questão
Esperamos que você tire duas conclusões deste post (além de ficar com vontade de visitar o viveiro de plantas mais próximo):
- Nem tudo o que é implantado no Kubernetes é um microsserviço. Os recursos e complementos oferecidos pelo Kubernetes fazem dele uma ferramenta útil em diversos ecossistemas.
- Nem sempre os microsserviços precisam ser gerenciados com o Kubernetes. Algumas aplicações prosperam com ferramentas alternativas e uma abordagem de “jardim selvagem”.
Confira os recursos a seguir para saber mais sobre os fundamentos dos microsserviços:
- Blog – Práticas recomendadas para configurar aplicações de microsserviços
- Webinar sob demanda – Fundamentos de microsserviços
- Treinamento sob demanda – Março de Microsserviços de 2022: Redes no Kubernetes
- Treinamento sob demanda – Março de Microsserviços de 2023: comece a entregar microsserviços
Sobre o autor

Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.
Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.
Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.