O gRPC é um framework de chamada de procedimento remoto (RPC) de código aberto e alto desempenho. Ao usar o gRPC para a comunicação de serviços de backend, você pode usar o Application Load Balancer (ALB) para balancear o tráfego gRPC e fornecer um ponto de entrada unificado. O gRPC se comunica pelo protocolo HTTP/2, e o ALB oferece suporte ao encaminhamento de tráfego para grupos de servidores de backend gRPC por meio de listeners HTTPS.
Informações de contexto
O gRPC é um framework de chamada de procedimento remoto de código aberto e alto desempenho. Ele usa o Protocol Buffers como sua linguagem de definição de interface (IDL) e se comunica por HTTP/2.
O gRPC resolve problemas de comunicação entre serviços em diferentes linguagens. Sua IDL fornece código gerado automaticamente para definir e chamar serviços remotos. Ao usar codificação binária e multiplexação HTTP/2, o gRPC oferece alto desempenho, baixa latência e transferência de dados eficiente.
O gRPC é adequado para arquiteturas de microsserviços, comunicação entre diferentes linguagens e sistemas distribuídos em grande escala. Ele oferece suporte a chamadas unárias, solicitações e respostas em streaming e streaming bidirecional.
Para obter mais informações sobre o gRPC, consulte a documentação oficial do gRPC.
Cenário
Uma empresa implanta serviços gRPC em uma VPC na região China (Hangzhou) e configura uma instância do ALB e um grupo de servidores com suporte a gRPC. A instância do ALB possui um listener HTTPS com HTTP/2 ativado, e o grupo de servidores possui verificações de integridade gRPC.
Os clientes precisam acessar os serviços gRPC implantados na VPC por meio da instância do ALB.
Pré-requisitos
Crie uma instância do ALB. Para obter mais informações, consulte Create and manage an ALB instance.
Prepare servidores de backend e implante serviços gRPC nesses servidores. Para obter orientações de implantação, consulte a documentação oficial do gRPC.
Registre um nome de domínio e conclua o registro ICP necessário. Para obter mais informações, consulte Register an Alibaba Cloud domain name e ICP filing process.
Compre um certificado SSL ou envie um certificado de terceiros para o Certificate Management Service. O certificado deve estar associado ao seu nome de domínio. Para obter mais informações sobre como criar um certificado, consulte Enable HTTPS access for a web service by using a commercial certificate.
Etapa 1: Criar um grupo de servidores
Faça login no console do ALB.
Na barra de navegação superior, selecione a região onde a instância do ALB está implantada.
No painel de navegação à esquerda, escolha .
Na página Server Groups, clique em Create Server Group.
-
Na caixa de diálogo Create Server Group, configure os parâmetros a seguir e clique em Create.
Este tópico descreve apenas os parâmetros relevantes para este cenário. Para outros parâmetros, use os valores padrão ou configure-os conforme necessário.
Parâmetro
Descrição
Server Group Type
Selecione o tipo de grupo de servidores. Neste exemplo, Server está selecionado.
VPC
Selecione a VPC da sua instância do ALB. Apenas servidores nesta VPC podem ser adicionados ao grupo de servidores.
Backend Protocol
Neste exemplo, selecione gRPC.
Health Check
Ative este recurso.
Health Check Settings
Clique em Modify e defina as configurações de verificação de integridade:
-
Health Check Protocol: Neste exemplo, selecione gRPC.
-
Health Check Method: Neste exemplo, selecione POST.
-
Health Check Status Codes: Selecione o código de status que indica uma resposta íntegra. Esse código deve corresponder ao código de status retornado pelo seu serviço gRPC. Neste exemplo, o código de status é
12.
-
Na página Server Groups, localize o grupo de servidores que você criou e clique no ID correspondente.
Clique na aba Backend Servers e, em seguida, clique em Add Backend Server.
No painel Add Backend Server, selecione as instâncias de ECS que você criou e clique em Next.
-
Na etapa Ports/Weights, defina a porta e o peso para cada instância de ECS e clique em OK.
NotaA porta configurada para uma instância de ECS deve corresponder à porta usada pelo serviço gRPC. Além disso, garanta que as regras do grupo de segurança da instância permitam o tráfego nessa porta.
Etapa 2: Configurar um listener HTTPS
Faça login no console do Application Load Balancer (ALB).
Na barra de navegação superior, selecione a região onde sua instância está implantada.
No painel de navegação à esquerda, clique em Instances.
Na página Instances, localize a instância que você deseja gerenciar e clique em Create Listener na coluna Actions.
-
Na página Configure Listener, configure os parâmetros a seguir. Use os valores padrão para outros parâmetros ou defina-os conforme necessário. Em seguida, clique em Next.
Parâmetro
Descrição
Listener Protocol
Selecione HTTPS.
Listener Port
Neste exemplo, utilize a porta 443.
NotaSe o protocolo de backend de um grupo de servidores estiver definido como gRPC, o protocolo do listener deverá ser HTTPS e o HTTP/2.0 deverá estar ativado.
-
Na página Configure SSL Certificate, configure o parâmetro a seguir. Use os valores padrão para outros parâmetros ou defina-os conforme necessário. Em seguida, clique em Next.
Parâmetro
Descrição
Server Certificate
Selecione o certificado SSL preparado.
-
Na página Select Server Group, configure o parâmetro a seguir. Use os valores padrão para outros parâmetros ou defina-os conforme necessário. Em seguida, clique em Next.
Parâmetro
Descrição
Server Group
Selecione o grupo de servidores gRPC que você criou.
Na página Configuration Review, verifique a configuração. Se a configuração estiver correta, clique em Submit e aguarde a criação do listener.
Etapa 3: Configurar a resolução de DNS
Para ambientes de produção, recomendamos mapear um nome de domínio personalizado para o nome de domínio da instância do ALB por meio da criação de um registro CNAME.
No painel de navegação à esquerda, escolha .
Na página Instances, copie o nome DNS da instância ALB criada.
-
Siga estas etapas para adicionar um registro CNAME.
NotaSe o seu nome de domínio estiver registrado em um provedor que não seja a Alibaba Cloud, adicione o nome de domínio ao console do Alibaba Cloud DNS antes de configurar a resolução de DNS. Para obter mais informações, consulte Manage domain names. Se o seu nome de domínio estiver registrado na Alibaba Cloud, prossiga com as etapas a seguir.
Faça login no console do Alibaba Cloud DNS.
Na página Public Zone, localize o nome de domínio de destino e clique em Settings na coluna Operations.
Na página Settings, clique em Add Record.
-
No painel Add Record, configure o registro CNAME definindo os parâmetros a seguir e, em seguida, clique em OK.
Parâmetro
Descrição
Record Type
Selecione CNAME na lista suspensa.
Hostname
O prefixo do seu nome de domínio. Este tutorial usa @.
NotaPara usar um domínio raiz, defina o nome do host como
@.Query Source
Selecione Default.
Record Value
Insira o nome DNS da instância ALB que você copiou.
TTL
O tempo de vida (TTL) é a duração em que um registro DNS é armazenado em cache em um servidor DNS. Use o valor padrão.
Etapa 4: Verificar a conectividade
Após concluir as etapas anteriores, os clientes podem acessar os serviços gRPC por meio do ALB. Use uma ferramenta como o grpcurl para testar a conectividade.
Você não pode acessar diretamente um serviço gRPC a partir de um navegador web. Recomendamos o uso de uma ferramenta como o grpcurl para testar a conectividade.
No cliente, execute o comando grpcurl -insecure -v <Domain name>:<Listener port> <gRPC service name>/<Method> para acessar o serviço gRPC na instância de ECS.
Uma resposta semelhante à seguinte confirma que os clientes podem acessar o serviço gRPC por meio do ALB.
[root@iZbp1xxx.0Z ~]# grpcurl -insecure -v xxx.com:443 helloworld.Greeter/SayHello
Resolved method descriptor:
rpc SayHello ( .helloworld.HelloRequest ) returns ( .helloworld.HelloReply );
Request metadata to send:
(empty)
Response headers received:
accept-encoding: identity,gzip
content-type: application/grpc
date: Mon, 04 Jul 2022 08:53:01 GMT
grpc-accept-encoding: identity,deflate,gzip
vary: Accept-Encoding
Response contents:
{
"message": "remoteip:47.xxx.xxx.195 x-forwarded-for:47.xxx.xxx.xx5 user-agent:grpcurl/v1.8.0 grpc-go/1.30.0 hostname:iZbp12xxx0kZ server addr:192.168.1.239 "
}
Response trailers received:
(empty)
Sent 0 requests and received 1 response
Documentos relacionados
Para obter mais informações sobre os parâmetros e considerações para listeners HTTPS, consulte Add an HTTPS listener.
Para obter mais informações sobre os parâmetros e considerações para grupos de servidores, consulte Create and manage server groups.
Para obter mais informações sobre os parâmetros e considerações para verificações de integridade, consulte ALB health checks.