Padrão de Encaminhamento do GatewayGateway Routing pattern

Encaminhe pedidos para vários serviços com um único ponto final.Route requests to multiple services using a single endpoint. Este padrão é útil quando pretende expor vários serviços num único ponto final e encaminhar para o serviço adequado com base no pedido.This pattern is useful when you wish to expose multiple services on a single endpoint and route to the appropriate service based on the request.

Contexto e problemaContext and problem

Quando um cliente precisar de consumir vários serviços, a configuração de um ponto final separado para cada serviço e a definição do cliente enquanto gestor de cada ponto final poderá ser um desafio.When a client needs to consume multiple services, setting up a separate endpoint for each service and having the client manage each endpoint can be challenging. Por exemplo, uma aplicação de comércio eletrónico pode fornecer serviços como pesquisa, revisões, carrinho, finalização da compra e histórico de encomendas.For example, an e-commerce application might provide services such as search, reviews, cart, checkout, and order history. Cada serviço possui uma API diferente com a qual o cliente tem de interagir. Por sua vez, o cliente tem de conhecer todos os pontos finais para se ligar aos serviços.Each service has a different API that the client must interact with, and the client must know about each endpoint in order to connect to the services. Se uma API for modificada, o cliente também deverá ser atualizado.If an API changes, the client must be updated as well. Se refatorizar um serviço em dois ou mais serviços separados, terá de alterar o código no serviço e no cliente.If you refactor a service into two or more separate services, the code must change in both the service and the client.

SoluçãoSolution

Coloque um gateway à frente de um conjunto de aplicações, serviços ou implementações.Place a gateway in front of a set of applications, services, or deployments. Utilize o encaminhamento da Camada 7 da aplicação para encaminhar o pedido para as instâncias adequadas.Use application Layer 7 routing to route the request to the appropriate instances.

Com este padrão, a aplicação do cliente só precisará de conhecer e comunicar com um único ponto final.With this pattern, the client application only needs to know about and communicate with a single endpoint. Se um serviço for consolidado ou decomposto, o cliente não terá de ser necessariamente atualizado.If a service is consolidated or decomposed, the client does not necessarily require updating. Pode continuar a realizar pedidos para o gateway e apenas as alterações de encaminhamento.It can continue making requests to the gateway, and only the routing changes.

Um gateway também permite ao utilizador resumir serviços de back-end dos clientes ao permitir que mantenha as chamadas dos cliente simples enquanto ativa as alterações nos serviços de back-end atrás do gateway.A gateway also lets you abstract backend services from the clients, allowing you to keep client calls simple while enabling changes in the backend services behind the gateway. As chamadas dos clientes podem ser encaminhadas para qualquer serviço, ou serviços, necessário para processar o comportamento esperado do cliente we permitem-lhe adicionar, dividir e reorganizar serviços atrás do gateway sem alterar o cliente.Client calls can be routed to whatever service or services need to handle the expected client behavior, allowing you to add, split, and reorganize services behind the gateway without changing the client.

Diagrama do padrão de encaminhamento de Gateway

Este padrão também pode ajudar com a implementação ao permitir gerir a forma como as atualizações são implementadas para os utilizadores.This pattern can also help with deployment, by allowing you to manage how updates are rolled out to users. Quando uma nova versão do serviço é implementada, esta pode ser implementada em paralelo com a versão existente.When a new version of your service is deployed, it can be deployed in parallel with the existing version. Encaminhamento permite-lhe controlar qual a versão do serviço é apresentada para os clientes, dando-lhe a flexibilidade para utilizar várias estratégias de versão, sejam estas incrementais, paralelas, ou uma implementação completa de atualizações.Routing lets you control what version of the service is presented to the clients, giving you the flexibility to use various release strategies, whether incremental, parallel, or complete rollouts of updates. Quaisquer problemas detetados após a implementação do novo serviço podem ser revertidos rapidamente ao fazer uma alteração da configuração no gateway, sem afetar os clientes.Any issues discovered after the new service is deployed can be quickly reverted by making a configuration change at the gateway, without affecting clients.

Problemas e consideraçõesIssues and considerations

  • O serviço do gateway pode introduzir um ponto único de falha.The gateway service may introduce a single point of failure. Confirme se está corretamente concebido para satisfazer os seus requisitos de disponibilidade.Ensure it is properly designed to meet your availability requirements. Considere as capacidades de resiliência e tolerância a falhas aquando da implementação.Consider resiliency and fault tolerance capabilities when implementing.
  • O serviço de gateway pode introduzir um estrangulamento.The gateway service may introduce a bottleneck. Confirme se o gateway tem um desempenho adequado para processar a carga e se pode ser dimensionado facilmente de acordo com as suas expectativas de crescimento.Ensure the gateway has adequate performance to handle load and can easily scale in line with your growth expectations.
  • Realize testes de carga no gateway para garantir que não introduz falhas em cascata nos serviços.Perform load testing against the gateway to ensure you don't introduce cascading failures for services.
  • O encaminhamento de Gateway é de nível 7.Gateway routing is level 7. Pode basear-se no IP, na porta, no cabeçalho ou no URL.It can be based on IP, port, header, or URL.

Quando utilizar este padrãoWhen to use this pattern

Utilize este padrão quando:Use this pattern when:

  • Um cliente precisa de consumir vários serviços que podem ser acedidos atrás de um gateway.A client needs to consume multiple services that can be accessed behind a gateway.
  • Pretende simplificar as aplicações do cliente com um único ponto final.You wish to simplify client applications by using a single endpoint.
  • Precisa de encaminhar os pedidos de pontos finais endereçáveis externamente para pontos finais virtuais internos, tal como expor portas numa VM para endereços IP virtuais do cluster.You need to route requests from externally addressable endpoints to internal virtual endpoints, such as exposing ports on a VM to cluster virtual IP addresses.

Este padrão pode não ser adequado quando possui uma aplicação simples que utiliza apenas um ou dois serviços.This pattern may not be suitable when you have a simple application that uses only one or two services.

ExemploExample

Ao utilizar o Nginx como router, este é um exemplo de ficheiro de configuração simples para um servidor que encaminha pedidos de aplicações residentes em diretórios virtuais diferentes para computadores diferentes no back-end.Using Nginx as the router, the following is a simple example configuration file for a server that routes requests for applications residing on different virtual directories to different machines at the back end.

server {
    listen 80;
    server_name domain.com;

    location /app1 {
        proxy_pass http://10.0.3.10:80;
    }

    location /app2 {
        proxy_pass http://10.0.3.20:80;
    }

    location /app3 {
        proxy_pass http://10.0.3.30:80;
    }
}

No Azure, podem ser definidos a vários serviços atrás de uma instância de Gateway de aplicação, que fornece o encaminhamento de camada 7.On Azure, multiple services can be set up behind an Application Gateway instance, which provides layer-7 routing.