Roteie solicitações para vários serviços ou várias instâncias de serviço usando um único ponto de extremidade. O padrão é útil quando você deseja:
- Expor vários serviços em um único ponto de extremidade e rotear para o serviço apropriado com base na solicitação
- Expor várias instâncias do mesmo serviço em um único ponto de extremidade para fins de balanceamento de carga ou disponibilidade
- Expor diferentes versões do mesmo serviço em um único ponto de extremidade e rotear o tráfego entre as diferentes versões
Contexto e problema
Quando um cliente precisa consumir diversos serviços, diversas instâncias de serviço ou uma combinação de ambos, o cliente deve ser atualizado quando os serviços são adicionados ou removidos. Considere os seguintes cenários.
- Vários serviços distintos: um aplicativo de comércio eletrônico pode fornecer serviços como pesquisa, análises, carrinho de compras, check-out e histórico de pedidos. Cada serviço tem uma API diferente com a qual o cliente deve interagir, e ele deve conhecer cada ponto de extremidade para se conectar aos serviços. Se uma API muda, o cliente deverá ser atualizado também. Se você refatorar um serviço em dois ou mais serviços separados, o código deve ser alterado no serviço e no cliente.
- Várias instâncias do mesmo serviço: o sistema pode exigir a execução de várias instâncias do mesmo serviço na mesma região ou em regiões diferentes. A execução de várias instâncias pode ser feita para fins de balanceamento de carga ou para atender aos requisitos de disponibilidade. Cada vez que uma instância é aumentada ou desativada para atender à demanda, o cliente deve ser atualizado.
- Várias versões do mesmo serviço: como parte da estratégia de implantação, novas versões de um serviço podem ser implantadas juntamente com as versões existentes. Isso é conhecido como implantações verde-azuladas. Nesses cenários, o cliente deve ser atualizado sempre que houver alterações na porcentagem de tráfego que está a ser encaminhado para a nova versão e o ponto de extremidade existente.
Solução
Coloque um gateway em frente a um conjunto de aplicativos, serviços ou implantações. Use o roteamento da camada de aplicativo 7 para rotear a solicitação para as instâncias apropriadas.
Com esse padrão, o aplicativo cliente só precisa conhecer e se comunicar com um único ponto de extremidade. Ilustramos a seguir como o padrão de roteamento de gateway aborda os três cenários descritos na seção de contexto e problema.
Vários serviços diferentes
O padrão de roteamento do gateway é útil nesse cenário em que um cliente está consumindo vários serviços. Se um serviço for consolidado, decomposto ou substituído, o cliente não necessita necessariamente de atualização. Ele pode continuar a fazer solicitações para o gateway, e apenas o roteamento muda.
Um gateway também permite abstrair os serviços de back-end dos clientes, permitindo que você mantenha as chamadas do cliente simples ao mesmo tempo que permite alterações nos serviços de back-end por trás do gateway. Chamadas de cliente podem ser roteadas para qualquer serviço ou os serviços precisam controlar o comportamento esperado do cliente, permitindo que você adicione, divida e reorganize serviços por trás do gateway sem alterar o cliente.
Várias instâncias do mesmo serviço
A elasticidade é fundamental na computação em nuvem. Os serviços podem ser ampliados para atender à demanda crescente ou diminuídos quando a demanda é baixa para economizar dinheiro. A complexidade de registrar e cancelar o registro de instâncias de serviço é encapsulada no gateway. O cliente não tem conhecimento de aumento ou diminuição no número de serviços.
As instâncias de serviço podem ser implementadas em uma única ou em diversas regiões. O padrão Geode detalha como uma implantação multirregional ativa/ativa pode melhorar a latência e aumentar a disponibilidade de um serviço.
Várias versões do mesmo serviço
Esse padrão pode ser usado para implantações, permitindo gerenciar como as atualizações são distribuídas aos usuários. Quando uma nova versão do seu serviço é implantada, ela pode ser implantada em paralelo com a versão existente. O roteamento permite controlar qual versão do serviço é apresentada aos clientes, dando a você a flexibilidade para usar várias estratégias de versão, seja ela incremental, paralela ou de distribuições completas das atualizações. Quaisquer problemas descobertos depois que o novo serviço for implantado podem ser revertidos rapidamente por meio da alteração de uma configuração no gateway e sem afetar os clientes.
Problemas e considerações
- O serviço de gateway pode introduzir um ponto único de falha. Verifique se ele está corretamente projetado para atender aos requisitos de disponibilidade. Considere os recursos de resiliência e tolerância a falhas na implementação.
- O serviço de gateway pode introduzir um gargalo. O gateway deve ter um desempenho adequado para lidar com a carga e pode facilmente ser dimensionado em linha com o crescimento das expectativas.
- Execute testes de carga no gateway para garantir que você não introduza falhas em cascata para serviços.
- O roteamento de gateway é de nível 7. Ele pode ser baseado em IP, porta, cabeçalho ou URL.
- Os serviços de gateway podem ser globais ou regionais. O Azure Front Door é um gateway global, enquanto o Gateway de Aplicativo do Azure é regional. Use um gateway global se sua solução exigir implantações de serviços em várias regiões. Considere utilizar o Gateway de Aplicativo se tiver uma carga de trabalho regional que exija um controle granular de como o tráfego é equilibrado. Por exemplo, você deseja equilibrar o tráfego entre máquinas virtuais.
- O serviço de gateway é o ponto de extremidade público para os serviços aos quais ele se encontra. Considere limitar o acesso da rede pública aos serviços de back-end, tornando os serviços acessíveis apenas por meio do gateway ou de uma rede virtual privada.
Quando usar esse padrão
Use esse padrão quando:
- Um cliente precisa consumir vários serviços que podem ser acessados por trás de um gateway.
- Você deseja simplificar os aplicativos cliente usando um único ponto de extremidade.
- Você precisa rotear solicitações de pontos de extremidade endereçáveis externamente para pontos de extremidade virtuais internos, como expor as portas em uma VM para endereços IP virtuais do cluster.
- Um cliente precisa consumir serviços em execução em diversas regiões para obter benefícios de latência ou disponibilidade.
- Um cliente precisa consumir um número variável de instâncias de serviço.
- Você deseja implementar uma estratégia de implantação onde os clientes acessem várias versões do serviço ao mesmo tempo.
Esse padrão pode não ser adequado quando você tiver um aplicativo simples que usa apenas um ou dois serviços.
Design de carga de trabalho
Um arquiteto deve avaliar como o padrão Roteamento de Gateway pode ser usado no design das suas cargas de trabalho para abordar os objetivos e os princípios discutidos nos pilares do Azure Well-Architected Framework. Por exemplo:
Pilar | Como esse padrão apoia os objetivos do pilar |
---|---|
As decisões de design 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. | O roteamento de gateway permite rotear o tráfego apenas para nós íntegros em seu sistema. - RE:05 Redundância - Monitoramento da integridade RE:10 |
A Excelência Operacional ajuda a fornecer qualidade na carga de trabalho por meio de processos padronizados e coesão da equipe. | O roteamento de gateway permite dissociar solicitações de back-ends, o que, por sua vez, permite que seus back-ends ofereçam suporte a modelos avançados de implantação, transições de plataforma e um único ponto de gerenciamento para resolução de nomes de domínio e criptografia em trânsito. - OE:04 Ferramentas e processos - OE:11 Práticas de implantação segura |
A eficiência de desempenho ajuda sua carga de trabalho a atender com eficiência às demandas por meio de otimizações em dimensionamento, dados e código. | O roteamento de gateway permite distribuir o tráfego entre os nós do sistema para equilibrar a carga. - PE:05 Dimensionamento e particionamento |
Tal como acontece com qualquer decisão de design, considere quaisquer compensações em relação aos objetivos dos outros pilares que possam ser introduzidos com este padrão.
Exemplo
Ao usar o Nginx como o roteador, a seguir há um arquivo de configuração de exemplo simples de um servidor que encaminha solicitações para aplicativos que residem em diferentes diretórios virtuais para diferentes computadores no 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;
}
}
Os seguintes serviços do Azure podem ser usados para implementar o padrão de roteamento do gateway:
- Uma instância do gateway de aplicativo, que fornece roteamento regional da camada 7.
- Uma instância do Front Door do Azure, que fornece roteamento global da camada 7.