Padrão de Descarregamento de GatewayGateway Offloading pattern

Descarregue funcionalidade de serviço partilhado ou especializado para um proxy de gateway.Offload shared or specialized service functionality to a gateway proxy. Este padrão pode simplificar o desenvolvimento de aplicações ao mover a funcionalidade de serviço partilhado, tal como a utilização de certificados SSL, de outras partes da aplicação para o gateway.This pattern can simplify application development by moving shared service functionality, such as the use of SSL certificates, from other parts of the application into the gateway.

Contexto e problemaContext and problem

Algumas funcionalidades são frequentemente utilizadas em vários serviços, mas essas funcionalidades exigem configuração, gestão e manutenção.Some features are commonly used across multiple services, and these features require configuration, management, and maintenance. Um serviço partilhado ou especializado distribuído com todas as implementações da aplicação aumenta a sobrecarga administrativa e a probabilidade de erro na implementação.A shared or specialized service that is distributed with every application deployment increases the administrative overhead and increases the likelihood of deployment error. Todas as atualizações de uma funcionalidade partilhada têm de ser implementadas em todos os serviços que partilham essa funcionalidade.Any updates to a shared feature must be deployed across all services that share that feature.

O processamento correto dos problemas de segurança (validação de tokens, encriptação e gestão de certificados SSL) e outras tarefas complexas podem exigir que os membros da equipa possuam competências altamente especializadas.Properly handling security issues (token validation, encryption, SSL certificate management) and other complex tasks can require team members to have highly specialized skills. Por exemplo, um certificado necessário para uma aplicação tem de ser configurado e implementado em todas as instâncias da aplicação.For example, a certificate needed by an application must be configured and deployed on all application instances. Com cada nova implementação, o certificado tem de ser gerido para evitar que expire.With each new deployment, the certificate must be managed to ensure that it does not expire. Qualquer certificado comum prestes a expirar tem de ser atualizado, testado e verificado em todas as implementações da aplicação.Any common certificate that is due to expire must be updated, tested, and verified on every application deployment.

Outros serviços comuns, tais como a autenticação, a autorização, o registo, a monitorização ou a limitação podem ser difíceis de implementar e gerir num grande número de implementações.Other common services such as authentication, authorization, logging, monitoring, or throttling can be difficult to implement and manage across a large number of deployments. Poderá ser melhor consolidar este tipo de funcionalidade para reduzir a sobrecarga e a probabilidade de erros.It may be better to consolidate this type of functionality, in order to reduce overhead and the chance of errors.

SoluçãoSolution

Descarregue algumas funcionalidades para um gateway de API, especialmente em questões transversais, tal como a gestão de certificados, a autenticação, a terminação SSL, a monitorização, a tradução de protocolos ou a limitação.Offload some features into an API gateway, particularly cross-cutting concerns such as certificate management, authentication, SSL termination, monitoring, protocol translation, or throttling.

O diagrama seguinte mostra um gateway de API que termina as ligações SSL de entrada.The following diagram shows an API gateway that terminates inbound SSL connections. Este solicita dados em nome do requerente original em qualquer servidor HTTP a montante do gateway de API.It requests data on behalf of the original requestor from any HTTP server upstream of the API gateway.

Diagrama do padrão de descarregamento de Gateway

Vantagens deste padrão:Benefits of this pattern include:

  • Simplificação do desenvolvimento de serviços através da remoção da necessidade de distribuir e manter recursos de suporte, tal como certificados de servidor Web e a configuração para sites seguros.Simplify the development of services by removing the need to distribute and maintain supporting resources, such as web server certificates and configuration for secure websites. A configuração mais simples resulta numa gestão e escalabilidade mais fáceis e torna as atualizações dos serviços mais simples.Simpler configuration results in easier management and scalability and makes service upgrades simpler.

  • Permite que equipas dedicadas implementem funcionalidades que requerem conhecimentos especializados, tal como segurança.Allow dedicated teams to implement features that require specialized expertise, such as security. Tal vai permitir que a sua equipa central se concentre na funcionalidade da aplicação, ao deixar estas questões especializadas, mas transversais, para os especialistas relevantes.This allows your core team to focus on the application functionality, leaving these specialized but cross-cutting concerns to the relevant experts.

  • Fornece alguma consistência para o registo e a monitorização de pedidos e respostas.Provide some consistency for request and response logging and monitoring. Mesmo que um serviço não seja corretamente instrumentado, o gateway pode ser configurado para garantir um nível mínimo de monitorização e registo.Even if a service is not correctly instrumented, the gateway can be configured to ensure a minimum level of monitoring and logging.

Problemas e consideraçõesIssues and considerations

  • Confirme se o gateway de API está altamente disponível e é resiliente a falhas.Ensure the API gateway is highly available and resilient to failure. Evite pontos únicos de falha ao executar várias instâncias do gateway de API.Avoid single points of failure by running multiple instances of your API gateway.
  • Confirme se o gateway foi concebido para os requisitos de capacidade e dimensionamento da aplicação e dos pontos finais.Ensure the gateway is designed for the capacity and scaling requirements of your application and endpoints. Confirme se o gateway não se torna num estrangulamento para a aplicação e é suficientemente dimensionável.Make sure the gateway does not become a bottleneck for the application and is sufficiently scalable.
  • Apenas descarregue funcionalidades utilizadas por toda a aplicação, tal como a transferência de dados ou a segurança.Only offload features that are used by the entire application, such as security or data transfer.
  • A lógica de negócio nunca deve ser descarregada para o gateway de API.Business logic should never be offloaded to the API gateway.
  • Se precisar de controlar as transações, considere gerar IDs de correlação para fins de registo.If you need to track transactions, consider generating correlation IDs for logging purposes.

Quando utilizar este padrãoWhen to use this pattern

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

  • A implementação de aplicações possui uma preocupação em comum, tal como encriptação ou certificados SSL.An application deployment has a shared concern such as SSL certificates or encryption.
  • Uma funcionalidade é comum nas implementações de aplicações e que pode ter requisitos de recursos diferentes, tal como recursos de memória, capacidade de armazenamento ou ligações de rede.A feature that is common across application deployments that may have different resource requirements, such as memory resources, storage capacity or network connections.
  • Pretender mover a responsabilidade dos problemas, tal como a segurança de rede, a limitação ou outros problemas de limite de rede para uma equipa mais especializada.You wish to move the responsibility for issues such as network security, throttling, or other network boundary concerns to a more specialized team.

Este padrão poderá não ser adequado se introduzir ligações entre os serviços.This pattern may not be suitable if it introduces coupling across services.

ExemploExample

Ao utilizar o Nginx como aplicação de descarga de SSL, a seguinte configuração termina uma ligação SSL de entrada e distribui a ligação para um de três servidores HTTP a montante.Using Nginx as the SSL offload appliance, the following configuration terminates an inbound SSL connection and distributes the connection to one of three upstream HTTP servers.

upstream iis {
        server  10.3.0.10    max_fails=3    fail_timeout=15s;
        server  10.3.0.20    max_fails=3    fail_timeout=15s;
        server  10.3.0.30    max_fails=3    fail_timeout=15s;
}

server {
        listen 443;
        ssl on;
        ssl_certificate /etc/nginx/ssl/domain.cer;
        ssl_certificate_key /etc/nginx/ssl/domain.key;

        location / {
                set $targ iis;
                proxy_pass http://$targ;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
        }
}

No Azure, isto pode ser alcançado ao configurar a terminação de SSL no Gateway de aplicação.On Azure, this can be achieved by setting up SSL termination on Application Gateway.