API Gateway e Service Discovery: Integração Contínua de Microservices

February 7, 2024

Technology

Na era digital, as Interfaces de Programação de Aplicações (APIs) tornaram-se a pedra angular da comunicação entre diferentes sistemas e serviços.

Com a proliferação da arquitetura de microsserviços, a importância dos gateways de API e da descoberta de serviços é cada vez mais proeminente. O gateway de API serve como a entrada da arquitetura de microsserviços, responsável por lidar com todas as solicitações externas e coordenar a comunicação entre os serviços internos; enquanto a descoberta de serviços garante que o sistema possa encontrar e conectar-se dinamicamente às instâncias de serviço corretas.

Juntos, eles constroem um sistema distribuído eficiente, flexível e escalável. Este artigo explora as conexões entre gateways de API e descoberta de serviços, e seus papéis cruciais nos sistemas distribuídos modernos.

Gateways de API e Descoberta de Serviços

Como a entrada da arquitetura de microsserviços, o gateway de API lida com todas as solicitações externas e facilita a comunicação com os serviços internos. Suas principais funcionalidades incluem:

  • Roteamento e encaminhamento de solicitações: Roteamento de solicitações para os serviços correspondentes com base nas características da solicitação.
  • Controle de acesso e autenticação de segurança: Garantindo que apenas usuários ou sistemas autorizados possam acessar a API.
  • Balanceamento de carga e cache: Otimizando o desempenho do serviço distribuindo uniformemente as solicitações para várias instâncias de serviço e fornecendo cache para reduzir as solicitações aos serviços de backend.
  • Registro e análise: Coletando e analisando dados de uso da API para apoiar a tomada de decisões de negócios.

A descoberta de serviços é um mecanismo usado para encontrar automaticamente instâncias de serviço disponíveis em um sistema distribuído. Quando o número de serviços é grande e dinamicamente variável, a descoberta de serviços torna-se crucial. Os princípios de registro e descoberta de serviços são os seguintes:

  • Registro de serviço: Quando um serviço é iniciado, ele registra suas informações (como endereço IP, número da porta, etc.) no registro de serviços.
  • Descoberta de serviço: Quando outros serviços precisam chamar esse serviço, eles consultam o registro de serviços para encontrar instâncias de serviço disponíveis e selecionam uma para comunicação.

Conexões entre Gateways de API e Descoberta de Serviços

O gateway de API serve como o "porteiro" que lida com todas as solicitações externas e as encaminha inteligentemente para as instâncias de serviço corretas. Gateways de API e descoberta de serviços são interdependentes na arquitetura de microsserviços, proporcionando estabilidade e escalabilidade.

Antes de introduzir a descoberta de serviços, o gateway de API dependia de configuração manual para especificar os endereços dos serviços upstream. Quando os endereços das instâncias de serviço mudam, como devido a atualizações, mudanças de emergência para instâncias de backup ou escalonamento de mais instâncias de serviço devido ao aumento de tráfego, os administradores devem atualizar manualmente a configuração do gateway de API em tempo hábil. Essa abordagem não só é ineficiente, mas também difícil de garantir precisão e pontualidade.

Através do mecanismo de descoberta de serviços, o gateway de API pode se conectar dinamicamente ao registro de serviços em tempo real, obtendo automaticamente os endereços mais recentes de todas as instâncias de serviços upstream e garantindo que as solicitações sejam roteadas com precisão para novos serviços.

Ao mesmo tempo, o mecanismo de descoberta de serviços pode notificar prontamente o gateway de API sobre condições de falha, evitando efetivamente o roteamento de solicitações para serviços indisponíveis. Ao configurar o endereço do registro de serviços e os nomes dos serviços, o gateway de API fez progressos significativos na reutilização de configurações entre ambientes, reduzindo a carga de trabalho de configuração e melhorando a reutilização e precisão da configuração.

Descoberta de Serviços

Aplicação Prática da Integração do Gateway de API com a Descoberta de Serviços do Kubernetes

Suponha que temos um sistema de arquitetura de microsserviços baseado no Kubernetes, implantando vários serviços, como serviços de usuário, serviços de pedidos, serviços de pagamento, etc. Cada serviço tem várias réplicas (Pods), e os endereços IP e números de porta dessas réplicas mudam dinamicamente à medida que os contêineres são criados e destruídos.

Nesse cenário, queremos usar o gateway de API para lidar com solicitações externas e roteá-las inteligentemente para os serviços corretos do Kubernetes. Ao mesmo tempo, queremos aproveitar o mecanismo de descoberta de serviços do Kubernetes para descobrir e gerenciar dinamicamente as instâncias de serviço.

Passo 1: Implantação e Registro de Serviços

No Kubernetes, usamos Deployments ou StatefulSets para implantar serviços e criar Services correspondentes como abstrações de serviço. Os Services do Kubernetes fornecem automaticamente balanceamento de carga para os Pods de backend e mapeiam os nomes dos serviços para endereços IP internos estáveis do cluster e números de porta.

Quando os Pods são criados ou destruídos, o Service Controller do Kubernetes atualiza automaticamente os objetos Endpoint dos serviços, que contêm os endereços IP e números de porta de todos os Pods relacionados. Esses objetos Endpoint são armazenados no API server do Kubernetes para consulta por outros componentes.

Passo 2: Implantação e Configuração do Gateway de API

Tomando o API7 Enterprise como exemplo, conectamos ao endereço do registro de serviços do Kubernetes no grupo de gateway. Quando publicamos um serviço para o grupo de gateway, em vez de inserir manualmente o endereço da instância upstream, selecionamos esse registro do Kubernetes e especificamos o namespace e o Service correspondente dentro dele. O API7 Enterprise recupera automaticamente as informações de Endpoint do serviço correspondente do API server do Kubernetes como o endereço upstream do serviço.

Passo 3: Tratamento de Solicitações

Quando o gateway de API recebe uma solicitação externa, ele determina para qual serviço rotear a solicitação com base nas regras de roteamento configuradas. Em seguida, ele consulta o API server do Kubernetes para obter as informações upstream mais recentes. O gateway de API seleciona uma instância dessas informações (com base em diferentes estratégias de balanceamento de carga) e encaminha a solicitação para essa instância. Como as informações de Endpoint são atualizadas dinamicamente, o gateway de API pode lidar automaticamente com a criação, destruição e migração de Pods, garantindo que as solicitações sejam sempre roteadas para os upstreams disponíveis.

Passo 4: Descoberta e Atualizações de Serviços

No Kubernetes, a descoberta de serviços é realizada automaticamente. Quando o status dos Pods muda (como criação, destruição ou migração), o Service Controller do Kubernetes atualiza automaticamente os objetos Endpoint do serviço correspondente.

O gateway de API recupera regularmente as informações de Endpoint mais recentes do API server do Kubernetes e atualiza seu upstream com base nessas informações. Isso permite que o gateway de API perceba instantaneamente as mudanças no status do serviço e ajuste automaticamente as regras de roteamento para garantir que as solicitações sejam corretamente roteadas para as instâncias de serviço disponíveis.

Conclusão

Através da integração do gateway de API e da descoberta de serviços do Kubernetes, nosso sistema pode alcançar registro e descoberta dinâmica de serviços, roteamento inteligente e balanceamento de carga. Essa abordagem simplifica a configuração e o gerenciamento do sistema, aumenta a confiabilidade e escalabilidade do sistema e aproveita plenamente os recursos poderosos fornecidos pelo Kubernetes, tornando a implantação e operação da arquitetura de microsserviços mais simples e eficiente.

Tags: