Padrão de Descarregamento de Gateway

Azure Application Gateway

Descarregue funcionalidade de serviço partilhado ou especializado para um proxy de gateway. 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.

Contexto e problema

Algumas funcionalidades são frequentemente utilizadas em vários serviços, mas essas funcionalidades exigem configuração, gestão e manutenção. 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. Todas as atualizações de uma funcionalidade partilhada têm de ser implementadas em todos os serviços que partilham essa funcionalidade.

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. Por exemplo, um certificado necessário para uma aplicação tem de ser configurado e implementado em todas as instâncias da aplicação. Com cada nova implementação, o certificado tem de ser gerido para evitar que expire. Qualquer certificado comum prestes a expirar tem de ser atualizado, testado e verificado em todas as implementações da aplicação.

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. Poderá ser melhor consolidar este tipo de funcionalidade para reduzir a sobrecarga e a probabilidade de erros.

Solução

Descarregue alguns recursos em um gateway, particularmente preocupações transversais, como gerenciamento de certificados, autenticação, terminação SSL, monitoramento, tradução de protocolo ou limitação.

O diagrama a seguir mostra um gateway que encerra conexões SSL de entrada. Ele solicita dados em nome do solicitante original de qualquer servidor HTTP a montante do gateway.

Diagrama do padrão de descarregamento de gateway

Vantagens deste padrão:

  • 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. A configuração mais simples resulta numa gestão e escalabilidade mais fáceis e torna as atualizações dos serviços mais simples.

  • Permite que equipas dedicadas implementem funcionalidades que requerem conhecimentos especializados, tal como segurança. 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.

  • Fornece alguma consistência para o registo e a monitorização de pedidos e respostas. 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.

Problemas e considerações

  • Certifique-se de que o gateway esteja altamente disponível e resiliente a falhas. Evite pontos únicos de falha executando várias instâncias do seu gateway.
  • Confirme se o gateway foi concebido para os requisitos de capacidade e dimensionamento da aplicação e dos pontos finais. Confirme se o gateway não se torna num estrangulamento para a aplicação e é suficientemente dimensionável.
  • Apenas descarregue funcionalidades utilizadas por toda a aplicação, tal como a transferência de dados ou a segurança.
  • A lógica de negócios nunca deve ser descarregada para o gateway.
  • Se precisar de controlar as transações, considere gerar IDs de correlação para fins de registo.

Quando utilizar este padrão

Utilize este padrão quando:

  • A implementação de aplicações possui uma preocupação em comum, tal como encriptação ou certificados SSL.
  • 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.
  • 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.

Este padrão poderá não ser adequado se introduzir ligações entre os serviços.

Design da carga de trabalho

Um arquiteto deve avaliar como o padrão de Descarregamento de Gateway pode ser usado no design de sua carga de trabalho para abordar as metas e os princípios abordados nos pilares do Azure Well-Architected Framework. Por exemplo:

Pilar Como esse padrão suporta os objetivos do pilar
As decisões de projeto de confiabilidade ajudam sua carga de trabalho a se tornar resiliente ao mau funcionamento e a garantir que ela se recupere para um estado totalmente funcional após a ocorrência de uma falha. Transferir essa responsabilidade para um gateway reduz a complexidade do código do aplicativo nos nós de back-end. Em alguns casos, o descarregamento substitui completamente a funcionalidade por um recurso confiável fornecido pela plataforma.

- RE:01 Simplicidade e eficiência
As decisões de design de segurança ajudam a garantir a confidencialidade, integridade e disponibilidade dos dados e sistemas da sua carga de trabalho. Adicionar um gateway ao fluxo de solicitações permite centralizar a funcionalidade de segurança, como firewalls de aplicativos da Web e conexões TLS com clientes. Qualquer funcionalidade descarregada fornecida pela plataforma já oferece segurança aprimorada.

- SE:06 Controles de rede
- SE:08 Recursos de proteção
A Otimização de Custos está focada em sustentar e melhorar o retorno do investimento da sua carga de trabalho. Esse padrão permite redirecionar custos de recursos que seriam gastos por nó para a implementação do gateway. Os custos no modelo de processamento centralizado são frequentemente mais baixos do que os do modelo distribuído.

- CO:14 Consolidação
A Excelência Operacional ajuda a fornecer qualidade de carga de trabalho por meio de processos padronizados e coesão da equipe. Nesse padrão, a configuração e a manutenção da funcionalidade descarregada são a partir de um único ponto, em vez de gerenciá-la a partir de vários nós.

- OE:04 Ferramentas e processos
A Eficiência de Desempenho ajuda sua carga de trabalho a atender às demandas de forma eficiente por meio de otimizações em escala, dados e código. Adicionar um gateway de descarregamento ao processo de solicitação permite que você use menos recursos por nó porque a funcionalidade é centralizada no gateway. Você pode otimizar a implementação da funcionalidade descarregada independentemente do código do aplicativo. É provável que a funcionalidade fornecida pela plataforma descarregada já seja de alto desempenho.

- PE:03 Seleção de serviços

Como em qualquer decisão de design, considere quaisquer compensações em relação aos objetivos dos outros pilares que possam ser introduzidos com esse padrão.

Exemplo

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.

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, isso pode ser conseguido configurando a terminação SSL no Application Gateway.