Vista geral da gestão avançada de tráfego
Este documento destina-se a administradores de malhas ou plataformas e programadores de serviços com um nível de familiaridade intermédio a avançado com a Cloud Service Mesh e os conceitos de malha de serviços, e que determinam e configuram a forma como o tráfego é gerido numa implementação da Cloud Service Mesh.
O Cloud Service Mesh oferece capacidades avançadas de gestão de tráfego que lhe dão um controlo detalhado sobre a forma como o tráfego é processado. O Cloud Service Mesh suporta os seguintes exemplos de utilização:
- Encaminhamento de tráfego detalhado de pedidos para um ou mais serviços.
- Divisão de tráfego com base na ponderação para distribuir o tráfego por vários serviços.
- Políticas de espelhamento de tráfego que enviam pedidos para um serviço de depuração e
cópias para outro. A replicação de tráfego não é suportada com o recurso
TCPRoute
nem com o recursoTLSRoute
. - Distribuição de tráfego otimizada nos back-ends de um serviço para melhorar o balanceamento de carga.
Estas capacidades avançadas de gestão de tráfego permitem-lhe cumprir os seus objetivos de disponibilidade e desempenho. Uma das vantagens de usar a malha de serviços na nuvem para estes exemplos de utilização é que pode atualizar a forma como o tráfego é gerido sem ter de modificar o código da aplicação.
A gestão de tráfego numa malha de serviços do Cloud Service Mesh baseia-se nos seguintes recursos:
Mesh
, que identifica a malha de serviços e representa o componente responsável por encaminhar o tráfego e aplicar políticas. O recursoMesh
também identifica a porta de interceção de tráfego.Gateway
, que identifica proxies intermédios e representa o componente que escuta numa lista de pares de endereço IP:porta, encaminha o tráfego e aplica políticas.Route
, que pode ser de vários tipos e que contém informações de encaminhamento de tráfego para a malha. Os recursosRoute
identificam nomes de anfitriões e portas que os clientes podem usar para encaminhar tráfego para serviços de back-end. Seguem-se os tipos de recursosRoute
:HTTPRoute
, que só está disponível em malhas que usam proxies Envoy. Quando usa o recursoHTTPRoute
para configurar os proxies do Envoy para enviar pedidos HTTP, todas as capacidades neste documento estão disponíveis.TCPRoute
, que só está disponível em malhas que usam proxies Envoy.TLSRoute
, que só está disponível em malhas que usam proxies Envoy.GRPCRoute
, que está disponível em malhas que usam proxies complementares do Envoy e gRPC sem proxy. Quando usa serviços ou aplicações gRPC sem proxy com o Cloud Service Mesh, algumas das capacidades descritas neste documento não estão disponíveis.
- Serviço de back-end, ao qual os recursos
Route
estão associados.
Configuração
Para configurar a gestão de tráfego avançada, usa os mesmos recursos de Route
e serviços de back-end que usa quando configura o Cloud Service Mesh.
Por sua vez, o Cloud Service Mesh configura os seus proxies Envoy e aplicações gRPC sem proxy para aplicar as políticas de gestão de tráfego avançadas que configurar.
A um nível elevado, faz o seguinte:
- Configure um recurso
Mesh
para identificar a malha de serviço. Configure os recursos
Route
para fazer o seguinte, com base nas características do pedido de saída:Selecione o serviço de back-end para o qual os pedidos são encaminhados.
Opcionalmente, execute ações adicionais.
Configure o serviço de back-end para controlar como o tráfego é distribuído para back-ends e pontos finais depois de selecionar um serviço de destino.
Encaminhamento e ações de tráfego
No Cloud Service Mesh, o tráfego é encaminhado com base nos valores no recurso Mesh
, no recurso Route
e no recurso de serviço de back-end. Todas as capacidades avançadas de gestão de tráfego relacionadas com o encaminhamento e as ações são configuradas através dos Route
objetos.
As secções seguintes descrevem as funcionalidades avançadas de gestão de tráfego que
pode configurar nos objetos Route
.
Processamento de pedidos
Quando um cliente envia um pedido, este é processado conforme descrito nos passos seguintes:
O pedido é associado a um recurso
Route
específico da seguinte forma:- Se estiver a usar o Envoy:
- O cabeçalho do anfitrião no pedido HTTP é comparado com o campo
hostnames
em cada recursoHTTPRoute
ouGRPCRoute
para selecionar o recursoRoute
correto para o pedido. Apenas os recursosHTTPRoute
eGRPCRoute
têm o campohostnames
. - O endereço IP é correspondido para encaminhar o tráfego TCP através de
TCPPRoute
. - O SNI e o ALPN são usados para a passagem direta de TLS através do
TLSRoute
. - Os recursos
HTTPRoute
eGRPCRoute
associados a umMesh
ou a umGateway
têm de ter nomes de anfitrião exclusivos. Se tentar anexar várias rotas com nomes de anfitriões em conflito, a configuração é rejeitada. - Da mesma forma, o campo
IP:Port
do elementoTCPRoute
tem de ser exclusivo ou a configuração é rejeitada. - Da mesma forma, o SNI e o ALPN têm de ser exclusivos para o
TLSRoute
. - Se existirem nomes de anfitrião sobrepostos, como
a.example.com
e*.example.com
, o pedido corresponde à rota mais específica.
- O cabeçalho do anfitrião no pedido HTTP é comparado com o campo
- Se estiver a usar gRPC sem proxy:
- Os clientes gRPC sem proxy usam o esquema de resolução de nomes
xds
. Resolve ohostname[:port]
no URI de destino enviando um pedido ao Cloud Service Mesh. - Apenas a porta de um recurso
GRPCRoute
é comparada com a porta no URI de destino (por exemplo,xds:///example.hostname:8080
). O URI de destino tem de corresponder exatamente à string no campohostnames
do recursoGRPCRoute
.
- Os clientes gRPC sem proxy usam o esquema de resolução de nomes
- Se estiver a usar o Envoy:
O recurso
Route
pode conter mais informações e regras de encaminhamento.Depois de selecionar o serviço de back-end de destino, o tráfego é distribuído pelos back-ends ou pelos pontos finais desse serviço de back-end de destino, com base na configuração no recurso do serviço de back-end.
O segundo passo é descrito na secção seguinte, Encaminhamento simples com base no anfitrião e no caminho. O terceiro passo é abordado em Encaminhamento e ações avançadas.
Encaminhamento simples com base no anfitrião e no caminho
O Cloud Service Mesh suporta um esquema de encaminhamento simplificado e um esquema mais avançado. No esquema simples, especifica um anfitrião e, opcionalmente, um caminho. O anfitrião e o caminho do pedido são avaliados para determinar o serviço de back-end para o qual o pedido é encaminhado.
- O anfitrião do pedido é a parte do nome do domínio de um URL, por exemplo, a parte do anfitrião do URL
http://example.com/video/
éexample.com
. - O caminho do pedido é a parte do URL que segue o nome do anfitrião. Por exemplo, a parte do caminho do URL
http://example.com/video/
é/video
.
Configura o encaminhamento simples com base no anfitrião e no caminho no mapa de regras de encaminhamento, que consiste no seguinte:
- Uma
Mesh
global - Um
HTTPRoute
ou umGRPCRoute
A maioria da configuração é feita no HTTPRoute
. Depois de criar o mapa da regra de encaminhamento inicial, só tem de modificar o recurso HTTPRoute
.
A regra mais simples é uma regra predefinida, na qual especifica apenas uma regra de anfitrião com carateres universais (*
) e um correspondente de caminho com um serviço predefinido. Depois de criar a regra predefinida, pode adicionar regras adicionais que especifiquem diferentes anfitriões e caminhos. As solicitações de saída são avaliadas em função destas regras da seguinte forma:
Se o anfitrião de um pedido (como
example.com
) corresponder ao nome de anfitrião deHTTPRoute
:- Em seguida, é avaliado o
RouteRule
. O elementoRouteRule
especifica como fazer a correspondência do tráfego e como encaminhar o tráfego quando é encontrada uma correspondência. - Cada
RouteRule
contém uma ou mais correspondências de rotas que são avaliadas em função do caminho do pedido. - Se for encontrada uma correspondência, o pedido é encaminhado para o serviço especificado no elemento
RouteAction
.
- Em seguida, é avaliado o
Para mais informações sobre os campos de recursos da HTTPRoute
e como funcionam,
consulte a documentação da API de serviços de rede.
Encaminhamento e ações avançados
Se quiser fazer mais do que encaminhar um pedido com base no anfitrião e no caminho do pedido, pode configurar regras avançadas para encaminhar pedidos e realizar ações.
A um nível elevado, o encaminhamento e as ações avançados funcionam da seguinte forma:
- Tal como no encaminhamento simples, o anfitrião do pedido é comparado com as regras de anfitrião que configura no
HTTPRoute
ouGRPCRoute
. Se o anfitrião de um pedido corresponder ao nome de anfitrião, oHTTPRoute
ou oGRPCRoute
é avaliado. - Depois de selecionar um trajeto, pode aplicar ações.
Encaminhamento avançado
O encaminhamento avançado é semelhante ao encaminhamento simples descrito anteriormente, exceto que pode especificar condições de correspondência adicionais. Por exemplo, pode especificar que uma regra corresponde ao cabeçalho de um pedido se o nome do cabeçalho corresponder exatamente ou apenas parcialmente, por exemplo, com base no prefixo ou no sufixo. Uma regra pode corresponder com base na avaliação do nome do cabeçalho em relação a uma expressão regular ou noutros critérios, como verificar a presença de um cabeçalho.
Para ver condições de correspondência e detalhes adicionais para headerMatches
e
queryParameterMatches
, consulte a página da
API REST network services
.
Ao combinar parâmetros de anfitrião, caminho, cabeçalho e consulta com condições de correspondência, pode criar regras altamente expressivas que se adequam aos seus requisitos exatos de gestão de tráfego. Para ver detalhes, consulte a tabela seguinte.
Aplicação baseada em HTTP | Aplicação baseada em gRPC | |
---|---|---|
Anfitriões HTTP versus anfitriões gRPC | O anfitrião é a parte do URL referente ao nome do domínio que a aplicação usa para fazer chamadas. Por exemplo, a parte do anfitrião do URL
|
O anfitrião é o nome que um cliente usa no URI do canal para estabelecer ligação a um serviço específico. Por exemplo, a parte do anfitrião do URI do canal
|
Caminhos HTTP versus caminhos gRPC | O caminho é a parte do URL que segue o nome do anfitrião. Por exemplo, a parte do caminho do URL
|
O caminho está no cabeçalho Por exemplo, se chamar o método |
Outros cabeçalhos gRPC (metadados) | O gRPC suporta o envio de metadados entre o cliente gRPC e o servidor gRPC para fornecer informações adicionais sobre uma chamada RPC. Estes metadados estão no formato de pares de chave-valor que são transportados como cabeçalhos no pedido HTTP/2. |
Ações
A malha de serviços na nuvem permite-lhe especificar as ações que os seus proxies Envoy ou as aplicações gRPC sem proxy realizam quando processam um pedido. As seguintes ações podem ser configuradas através da Cloud Service Mesh.
.Ação | Nome do campo da API | Descrição |
---|---|---|
Redirecionamentos | redirect |
Devolve um código de resposta 3xx configurável. Também define o cabeçalho de resposta Location com o URI adequado, substituindo o anfitrião e o caminho conforme especificado na ação de redirecionamento.
|
Reescritas de URLs | urlRewrite |
Reescreve a parte do URL referente ao nome do anfitrião, a parte do URL referente ao caminho ou ambas antes de enviar um pedido ao serviço de back-end selecionado. |
Transformações de cabeçalhos | requestHeaderModifier/responseHeaderModifier |
Adiciona ou remove cabeçalhos de pedidos antes de enviar um pedido para o serviço de back-end. Também pode adicionar ou remover cabeçalhos de resposta depois de receber uma resposta do serviço de back-end. |
Espelhamento de tráfego | requestMirrorPolicy |
Além de encaminhar o pedido para o serviço de back-end selecionado, envia um pedido idêntico para o serviço de back-end duplicado configurado com base no princípio de disparar e esquecer. O equilibrador de carga não aguarda uma resposta do back-end para o qual envia o pedido espelhado. A replicação é útil para testar uma nova versão de um serviço de back-end. Também pode usá-lo para depurar erros de produção numa versão de depuração do serviço de back-end, em vez de na versão de produção. |
Divisão de tráfego com base no peso | weiDestination.serviceNameght |
Permite que o tráfego de uma regra correspondente seja distribuído por vários serviços de back-end, proporcionalmente a um peso definido pelo utilizador atribuído ao serviço de back-end individual. Esta capacidade é útil para configurar implementações faseadas ou testes A/B. Por exemplo, a ação de encaminhamento pode ser configurada de modo que 99% do tráfego seja enviado para um serviço que esteja a executar uma versão estável de uma aplicação, enquanto 1% do tráfego é enviado para um serviço separado que esteja a executar uma versão mais recente dessa aplicação. |
Novas tentativas | retryPolicy |
Configura as condições em que o equilibrador de carga volta a tentar pedidos com falhas, o tempo que o equilibrador de carga aguarda antes de voltar a tentar e o número máximo de tentativas permitidas. |
Tempo limite | timeout |
Especifica o limite de tempo para o trajeto selecionado. O tempo limite é calculado a partir do momento em que o pedido é totalmente processado até ao momento em que a resposta é totalmente processada. O tempo limite inclui todas as novas tentativas. |
Injeção de falhas | faultInjectionPolicy |
Introduz erros quando processa pedidos para simular falhas, incluindo latência elevada, sobrecarga do serviço, falhas do serviço e partição da rede. Esta funcionalidade é útil para testar a capacidade de recuperação de um serviço em relação a falhas simuladas. |
Políticas de segurança | corsPolicy |
As políticas de partilha de recursos de origem cruzada (CORS) processam as definições para aplicar pedidos CORS. |
Para mais informações sobre as ações e como funcionam, consulte a página da API de serviços de rede.
Em cada regra de encaminhamento, pode especificar uma das seguintes ações de encaminhamento:
- Encaminhe o tráfego para um único serviço (
destination.serviceName
) - Divida o tráfego entre vários serviços (
destination.weight
) - URLs de redirecionamento (
redirect
)
Além disso, pode combinar qualquer uma das ações de trajeto mencionadas anteriormente com uma ou mais das seguintes ações de trajeto (denominadas ações suplementares na Google Cloud consola):
- Manipular cabeçalhos de pedidos ou respostas (
requestHeaderModifier/responseHeaderModifier
) - Espelhar tráfego (
requestMirrorPolicy
) - Reescreva o anfitrião, o caminho ou ambos do URL (
urlRewrite
) - Volte a tentar pedidos com falhas (
retryPolicy
) - Definir limite de tempo (
timeout
) - Introduzir falhas numa percentagem do tráfego (
faultInjectionPolicy
) - Adicione uma política de CORS (
corsPolicy
)
Uma vez que as ações estão associadas a regras específicas, o proxy Envoy ou a aplicação gRPC sem proxy podem aplicar ações diferentes com base no pedido que estão a processar.
Distribua o tráfego entre os back-ends de um serviço
Conforme abordado em Processamento de pedidos, quando um cliente processa um pedido de saída, seleciona primeiro um serviço de destino. Depois de selecionar um serviço de destino, tem de determinar que back-end ou ponto final deve receber o pedido.
No diagrama anterior, a regra foi simplificada. A regra é, normalmente, uma regra de anfitrião, um localizador de caminhos e uma ou mais regras de caminhos ou rotas. O serviço de destino é o serviço(de back-end). Backend 1, … e Backend n recebem e processam o pedido. Estes back-ends podem ser, por exemplo, instâncias de máquinas virtuais (VMs) do Compute Engine que alojam o código da sua aplicação do lado do servidor.
Por predefinição, o cliente que processa o pedido envia pedidos para o back-end em bom estado mais próximo que tenha capacidade. Para evitar sobrecarregar um back-end específico, usa o algoritmo de balanceamento de carga round robin para equilibrar a carga de pedidos subsequentes noutros back-ends do serviço de destino. No entanto, em alguns casos, pode querer um controlo mais detalhado deste comportamento.
Balanceamento de carga, afinidade de sessão e proteção de back-ends
Pode definir as seguintes políticas de distribuição de tráfego em cada serviço.
Política | Nome do campo da API | Descrição |
---|---|---|
Modo de balanceamento de carga | balancingMode |
Controla como um grupo de pontos finais da rede (NEG) ou um grupo de instâncias gerido (MIG) é selecionado depois de um serviço de destino ter sido selecionado. Pode configurar o modo de equilíbrio para distribuir a carga com base nas ligações simultâneas e na taxa de pedidos. |
Política de balanceamento de carga | localityLbPolicy |
Define o algoritmo de equilíbrio de carga usado para distribuir o tráfego entre back-ends num NEG ou num MIG. Para otimizar o desempenho, pode escolher entre vários algoritmos (como o round robin ou o pedido mínimo). |
Afinidade de sessão | sessionAffinity |
Faz uma tentativa de melhor esforço para enviar pedidos de um cliente específico para o mesmo back-end durante o tempo em que o back-end estiver em bom estado e tiver capacidade. O Cloud Service Mesh suporta quatro opções de afinidade de sessão: endereço IP do cliente, com base em cookies HTTP, com base em cabeçalhos HTTP e afinidade de cookies gerados (que o Cloud Service Mesh gera automaticamente). |
Hash consistente | consistentHash |
Oferece afinidade de sessão flexível com base em cabeçalhos HTTP, cookies ou outras propriedades. |
Disjuntores | circuitBreakers |
Define limites superiores no volume de ligações e pedidos por ligação a um serviço de back-end. |
Deteção de valores atípicos | outlierDetection |
Especifica os critérios para (1) remover back-ends ou pontos finais não íntegros de MIGs ou NEGs e (2) adicionar novamente um back-end ou um ponto final quando for considerado suficientemente íntegro para receber tráfego novamente. A verificação de funcionamento associada ao serviço determina se um back-end ou um ponto final é considerado em bom estado. |
Para mais informações sobre as diferentes opções de distribuição de tráfego e como funcionam, consulte os seguintes documentos:
Exemplos de utilização
A gestão avançada do tráfego aborda muitos exemplos de utilização. Esta secção apresenta alguns exemplos de alto nível.
Pode encontrar mais exemplos, incluindo código de exemplo, em Configure a gestão avançada de tráfego com o Envoy e Configure a gestão avançada de tráfego com serviços gRPC sem proxy.
Encaminhamento de tráfego detalhado para personalização
Pode encaminhar o tráfego para um serviço com base nos parâmetros do pedido. Por exemplo, pode usar este serviço para oferecer uma experiência mais personalizada aos utilizadores do Android. No diagrama seguinte, o Cloud Service Mesh configura a sua malha de serviços para enviar pedidos com o cabeçalho user-agent:Android
para o seu serviço Android em vez de para o seu serviço genérico.
user-agent
definido como Android
(clique para aumentar)Divisão de tráfego baseada em ponderação para implementações mais seguras
A implementação de uma nova versão de um serviço de produção existente pode ser arriscada. Mesmo depois de os testes serem aprovados num ambiente de teste, pode não querer encaminhar imediatamente todos os seus utilizadores para a nova versão.
A malha de serviços na nuvem permite-lhe definir divisões de tráfego baseadas em peso para distribuir o tráfego por vários serviços. Por exemplo, pode enviar 1% do tráfego para a nova versão do seu serviço, monitorizar se tudo funciona e, em seguida, aumentar gradualmente a proporção de tráfego que vai para o novo serviço.
Espelhamento de tráfego para depuração
Quando depura um problema, pode ser útil enviar cópias do tráfego de produção para um serviço de depuração. A Cloud Service Mesh permite-lhe configurar políticas de replicação de pedidos para que os pedidos sejam enviados para um serviço e sejam enviadas cópias desses pedidos para outro serviço.
Balanceamento de carga otimizado para desempenho
Consoante as características da sua aplicação, pode verificar que consegue melhorar o desempenho e a disponibilidade ao otimizar a forma como o tráfego é distribuído pelos back-ends de um serviço. Com a malha de serviços na nuvem, pode aplicar algoritmos de equilíbrio de carga avançados para que o tráfego seja distribuído de acordo com as suas necessidades.
O diagrama seguinte, ao contrário dos diagramas anteriores, mostra um serviço de back-end de destino (Serviço de produção) e os back-ends desse serviço de back-end (Máquina virtual 1, Máquina virtual 2 e Máquina virtual 3). Com a gestão de tráfego avançada, pode configurar como um serviço de back-end de destino é selecionado e como o tráfego é distribuído entre os back-ends desse serviço de destino.
Para mais informações sobre o equilíbrio de carga com a Cloud Service Mesh, consulte a vista geral do equilíbrio de carga avançado.
O que se segue?
- Para direcionar o tráfego de fora da sua malha para a sua malha, consulte o artigo Tráfego de entrada para a sua malha.