Projetar um Aplicativo Baseado em Microsserviços

Ao projetar um aplicativo usando a arquitetura de microsserviços, considere a adesão às melhores práticas de microsserviços e aos 12 padrões de sucesso para o desenvolvimento de microsserviços. Esses padrões incorporam as considerações de aplicativo de 12 fatores e são criados com base na experiência em implantações de microsserviços juntamente com um banco de dados convergente.

Aprenda as Melhores Práticas para Projetar Microsserviços

Ao seguir certas práticas recomendadas ao projetar microsserviços, você pode garantir que seu aplicativo seja fácil de dimensionar, implementar e manter. Observe que nem todas as melhores práticas discutidas aqui podem ser relevantes para o seu aplicativo.

Cada microsserviço deve implementar uma única parte da funcionalidade do aplicativo. As equipes de desenvolvimento devem definir os limites e responsabilidades de cada microsserviço. Uma abordagem é definir um microsserviço para cada tarefa solicitada com frequência no aplicativo. Uma abordagem alternativa é dividir a funcionalidade por tarefas de negócios e, em seguida, definir um microsserviço para cada área.

Considere os seguintes requisitos em seu design:

  • Microsserviços responsivos: Os microsserviços devem retornar uma resposta aos clientes solicitantes, mesmo quando o serviço falhar.
  • Compatibilidade retroativa: À medida que você adiciona ou atualiza a funcionalidade de um microsserviço, as alterações nos métodos e parâmetros da API não devem afetar os clientes. A API REST deve permanecer compatível com versões anteriores.
  • Comunicação flexível: Cada microsserviço pode especificar o protocolo que deve ser usado para comunicação entre os clientes e o gateway de API e para comunicação entre os microsserviços.
  • Idempotência: Se um cliente chamar um microsserviço várias vezes, ele deverá produzir o mesmo resultado.
  • Operação eficiente: O design deve facilitar o monitoramento e a solução de problemas. Um sistema de log é comumente usado para implementar esse requisito.

Entenda os 12 Padrões de Sucesso em Microsserviços

Os microsserviços são difíceis de implementar, e esses 12 padrões facilitam o aproveitamento das vantagens de agilidade e simplicidade de uma arquitetura de mircoservices usando uma plataforma de banco de dados convergente ao lado de contêineres e Kubernetes.

  1. Contextos vinculados: projete-o antecipadamente ou divida monólitos em microsserviços com um consultor de refatoração de dados.
  2. Conexão fraca: Separe dados isolando o esquema para o microsserviço e usando uma malha de eventos confiável.
  3. CI/CD para microsserviços: Um banco de dados multilocatário o torna um ajuste natural para microsserviços. Adicione um banco de dados plugável (PDB) para implantar e criar de forma independente. Um aplicativo (com Jenkins) e esquema (Liquibase, Flyway e EBR no banco de dados) também são boas escolhas.
  4. Segurança para microsserviços: Proteja cada ponto final do gateway de API, do balanceador de carga, da malha de eventos e do banco de dados.
  5. Observabilidade unificada para microsserviços: Métricas, logs e rastreamentos em um único painel para ajuste e autocorreção.
  6. Caixa de saída transacional: Enviando uma mensagem e uma operação de manipulação de dados em uma única transação local.
  7. Malha de eventos confiável: Malha de eventos para todos os eventos com mensagens transacionais de alto throughput e pub e sub; com transformações de eventos e roteamento de eventos.
  8. Agregação de eventos: os eventos são efêmeros e notificam ou acionam ação em tempo real; após isso, eles são agregados no banco de dados; o banco de dados é o tópico compactado final.
  9. Segregação de responsabilidade de consulta de comando (CQRS): Onde cópias operacionais e analíticas de dados estão disponíveis para microsserviços.
  10. Sagas: Transações em microsserviços, com suporte da malha de eventos e diário de depósito no banco de dados.
  11. Programação poliglota: Suporte para microsserviços e formatos de mensagem em uma variedade de linguagens, usando JSON como payload.
  12. Back-end como serviço (BaaS): Uma infraestrutura de microsserviços dimensionada corretamente para implantações de teste, desenvolvimento e produção (pequena a média) em qualquer implantação na nuvem ou on-premises; para Spring Boot Apps.

Comece com um Padrão de Contexto Limitado

O padrão recomendado para implementar persistência para um microsserviço é usar um único banco de dados plugável (PDB) em um banco de dados contêiner. Para cada microsserviço, mantenha os dados persistentes privados e crie o banco de dados plugável como parte da implementação do microsserviço.

Nesse padrão, os dados persistentes privados só podem ser acessados por meio da API de microsserviço.

A ilustração a seguir mostra o design de persistência para microsserviços.

Veja a seguir a descrição da ilustração microservices_persistence.png
Descrição da ilustração microservices_persistence.png
As seguintes variantes dessa implementação de microsserviço se aplicam a bancos de dados convergentes:
  • Tabelas privadas: Cada serviço possui um conjunto de tabelas ou documentos.
  • Esquema: Cada serviço possui um esquema ou coleção de banco de dados privado.
  • Banco de Dados: Cada serviço possui um banco de dados plugável dentro de um banco de dados contêiner, conforme mostrado na ilustração.

Um anti-padrão de persistência para seus microsserviços é compartilhar um esquema de banco de dados em vários microsserviços. Você pode implementar transações atômicas, consistentes, isoladas e duráveis para consistência de dados. Uma vantagem com este anti-padrão é que ele usa um banco de dados simples. As desvantagens são que os microsserviços podem interferir uns com os outros ao acessar o banco de dados, e os ciclos de desenvolvimento podem desacelerar porque os desenvolvedores de diferentes microsserviços precisam coordenar as alterações do esquema, o que também aumenta as dependências entre serviços.

Seus microsserviços podem estabelecer conexão com uma instância do Oracle Database que está em execução no Oracle Cloud Infrastructure. O banco de dados Oracle multilocatário suporta vários bancos de dados plugáveis (PDBs) dentro de um contêiner. Esta é a melhor escolha para a camada de persistência para microsserviços, para isolamento de contexto limitado de dados, segurança e para alta disponibilidade. Em muitos casos, menos PDBs podem ser usados com isolamento no nível do esquema.

Compreender o Valor da Implantação de Microsserviços em Contêineres

Depois de criar seu microsserviço, você deve armazená-lo em contêiner. Um microsserviço em execução em seu próprio contêiner não afeta os microsserviços implantados nos outros contêineres.

Um contêiner é uma unidade de software padronizada, usada para desenvolver, enviar e implantar aplicativos.

Os contêineres são gerenciados usando um mecanismo de contêiner, como o Docker. O mecanismo de contêiner fornece as ferramentas necessárias para agrupar todas as dependências do aplicativo como um contêiner.

Você pode usar o mecanismo do Docker para criar, implantar e executar seus aplicativos de microsserviços em contêineres. Os microsserviços executados em contêineres do Docker têm as seguintes características:

  • Padrão: Os microsserviços são portáteis. Eles podem correr em qualquer lugar.
  • Leve: O Docker compartilha o kernel do sistema operacional (SO), não requer um SO para cada instância e é executado como um processo leve.
  • Seguro: Cada contêiner é executado como um processo isolado. Portanto, os microsserviços são seguros.

O processo de conteinerização de um microsserviço envolve a criação de um Dockerfile, a criação e a criação de uma imagem de contêiner que inclua suas dependências e a configuração ambiental, a implantação da imagem em um mecanismo do Docker e o upload da imagem em um registro de contêiner para armazenamento e recuperação.

Veja a seguir a descrição da ilustração docker_container_process.png
Descrição da ilustração docker_container_process.png

Saiba mais sobre como orquestrar microsserviços usando o Kubernetes

Os microsserviços que estão sendo executados em contêineres devem ser capazes de interagir e integrar para fornecer as funcionalidades necessárias do aplicativo. Essa integração pode ser obtida por meio da orquestração de contêineres.

A orquestração de contêineres permite iniciar, interromper e agrupar contêineres em clusters. Ele também permite alta disponibilidade e dimensionamento. O Kubernetes é uma das plataformas de orquestração de contêineres que você pode usar para gerenciar contêineres.

Depois de conteinerizar seus microsserviços, você pode implantá-los no Oracle Cloud Infrastructure Container Engine for Kubernetes.

Antes de implantar seu aplicativo de microsserviços em contêiner na nuvem, você deve implantá-lo e testá-lo em um mecanismo Kubernetes local, da seguinte forma:

  • Crie seu aplicativo de microsserviços.
  • Crie imagens do Docker para conteinerizar seus microsserviços.
  • Execute seus microsserviços no mecanismo local do Docker.
  • Envie suas imagens de contêiner a um registro de contêiner.
  • Implante e execute seus microsserviços em um mecanismo Kubernetes local, como o Minikube.

Depois de testar o aplicativo em um mecanismo local do Kubernetes, implante-o no Oracle Cloud Infrastructure Container Engine for Kubernetes da seguinte forma:

  • Criar um cluster.
  • Faça download do arquivo kubeconfig.
  • Instale a ferramenta kubectl em um dispositivo local.
  • Prepare o arquivo deployment.yaml.
  • Implantar o microsserviço no cluster.
  • Testar o microsserviço.

O diagrama a seguir mostra o processo de implantação de um aplicativo de microsserviços em contêiner para o Oracle Cloud Infrastructure Container Engine for Kubernetes.

Veja a seguir a descrição da ilustração oke_deployment_process.png
Descrição da ilustração oke_deployment_process.png

Saiba mais sobre o Oracle Backend for Spring Boot and Microservices

Spring Boot é a estrutura mais popular para a criação de microsserviços em Java. Um dos 12 padrões de sucesso na implantação bem-sucedida da arquitetura de microsserviços é o padrão Backend as a Service (BaaS). O Oracle BaaS está disponível no OCI Marketplace para implantação usando o Terraform e o Ansible em 30 minutos. O Oracle BaaS fornece um conjunto de serviços de plataforma necessários para implantar e operar microsserviços e são parte integrante do ambiente Spring Boot. Os detalhes da plataforma Oracle Backend for Spring Boot and Microservices são ilustrados no diagrama abaixo.