Encaminhe 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
- Exponha várias instâncias do mesmo serviço em um único ponto de extremidade para fins de balanceamento de carga ou disponibilidade
- Exponha versões diferentes do mesmo serviço em um único ponto de extremidade e roteie o tráfego entre as diferentes versões
Contexto e problema
Quando um cliente precisa consumir vários serviços, várias 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 diferentes - Um aplicativo de comércio eletrônico pode fornecer serviços como pesquisa, avaliações, carrinho, checkout e histórico de pedidos. 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. Se uma API for modificada, o cliente também deverá ser atualizado. Se refatorizar um serviço em dois ou mais serviços separados, terá de alterar o código 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 é girada para cima ou para baixo para corresponder à 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 ao lado das versões existentes. Isso é conhecido como implantações verde-azul. Nesses cenários, o cliente deve ser atualizado sempre que houver alterações na porcentagem de tráfego que está sendo roteado para a nova versão e o ponto de extremidade existente.
Solução
Coloque um gateway à frente de um conjunto de aplicações, serviços ou implementações. Utilize o encaminhamento da Camada 7 da aplicação para encaminhar o pedido para as instâncias adequadas.
Com esse padrão, o aplicativo cliente só precisa saber sobre um único ponto de extremidade e se comunicar com um único ponto de extremidade. A seguir ilustramos como o padrão Roteamento de Gateway aborda os três cenários descritos na seção de contexto e problema.
Vários serviços díspares
O padrão de roteamento de gateway é útil neste 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 precisa necessariamente de atualização. Pode continuar a realizar pedidos para o gateway e apenas as alterações de encaminhamento.
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. 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.
Várias instâncias do mesmo serviço
A elasticidade é fundamental na computação em nuvem. Os serviços podem ser girados para atender à crescente demanda ou girados 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 desconhece um aumento ou diminuição do número de serviços.
As instâncias de serviço podem ser implantadas em uma única ou várias regiões. O padrão Geode detalha como uma implantação ativa-ativa em várias regiões 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 que você gerencie como as atualizações são distribuídas para os usuários. Quando uma nova versão do serviço é implementada, esta pode ser implementada 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 de usar várias estratégias de lançamento, sejam incrementais, paralelas ou completas de atualizações. 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.
Problemas e considerações
- O serviço de gateway pode introduzir um único ponto de falha. Certifique-se de que ele foi projetado corretamente para atender aos seus 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. 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.
- Realize testes de carga no gateway para garantir que não introduz falhas em cascata nos serviços.
- O encaminhamento de Gateway é de nível 7. Pode basear-se no IP, na porta, no cabeçalho ou no URL.
- Os serviços de gateway podem ser globais ou regionais. O Azure Front Door é um gateway global, enquanto o Azure Application Gateway é regional. Use um gateway global se sua solução exigir implantações de serviços em várias regiões. Considere usar o Application Gateway se você tiver uma carga de trabalho regional que exija controle granular de como o tráfego é balanceado. 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 que ele está na frente. Considere limitar o acesso à rede pública aos serviços de back-end, tornando os serviços acessíveis apenas através do gateway ou através de uma rede virtual privada.
Quando utilizar este padrão
Utilize este padrão quando:
- Um cliente precisa de consumir vários serviços que podem ser acedidos atrás de um gateway.
- Você deseja simplificar os aplicativos cliente usando um único ponto de extremidade.
- 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.
- Um cliente precisa consumir serviços em execução em várias 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 em que os clientes acessem várias versões do serviço ao mesmo tempo.
Este padrão pode não ser adequado quando possui uma aplicação simples que utiliza apenas um ou dois serviços.
Design da carga de trabalho
Um arquiteto deve avaliar como o padrão Roteamento 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. | O roteamento de gateway permite rotear o tráfego apenas para nós íntegros em seu sistema. - RE:05 Redundância - RE:10 Monitorização da saúde |
A Excelência Operacional ajuda a fornecer qualidade de carga de trabalho por meio de processos padronizados e coesão da equipe. | O roteamento de gateway permite que você desacople 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 implementação seguras |
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. | O roteamento de gateway permite distribuir o tráfego entre nós em seu sistema para equilibrar a carga. - PE:05 Dimensionamento e particionamento |
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 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.
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 de gateway:
- Uma instância do Application Gateway, que fornece roteamento regional de camada 7.
- Uma instância do Azure Front Door, que fornece roteamento global de camada 7.