Melhores Práticas de gRPC
Versionamento de protos, deadlines e balanceamento de carga gRPC em K8s.
Busque em todas as páginas da documentação
Versionamento de protos, deadlines e balanceamento de carga gRPC em K8s.
Estas regras mantêm contratos estáveis, RPCs observáveis e rollouts seguros, do laptop aos clusters de produção.
buf breaking (ou equivalente) em CI antes de mesclar edições de .proto.bufconn..proto.v1, v2) para alterações incompatíveis na API. Execute servidores duplos ou RPCs duplos durante janelas de migração.go_package e java_package estáveis. Mover caminhos de importação gerados quebra módulos downstream silenciosamente.optional ou FieldMask para atualizações parciais. Distinga campos não definidos de valores zero intencionais.Unimplemented<Service>Server em cada struct de serviço. Compatibilidade com versões futuras quando RPCs são adicionados.status.Error com o código padrão mais próximo. Reserve Internal para bugs reais, não falhas de validação.ErrorInfo, BadRequest) para erros legíveis por máquina. Gateways e clientes podem ramificar sem análise de string.context em handlers longos e loops de stream. Pare o trabalho quando os clientes desconectarem.Unavailable com backoff e jitter. Evite tempestades de retentativas durante interrupções.grpc.ClientConn entre requisições. Conectar por RPC desperdiça handshakes TCP e TLS.GracefulStop em servidores.traceparent ou carriers OTel). Emparelhe com handlers otelgrpc para spans.insecure são apenas para desenvolvimento local.Internal com traces de pilha registrados.io.EOF como fim normal do stream, não sempre como erro. Retorne o status apropriado apenas em caminhos de falha.grpc.health.v1 e conecte probes de liveness/readiness. Defina NOT_SERVING até que as dependências estejam aquecidas.GracefulStop em SIGTERM com um fallback Stop limitado. Corresponda ao terminationGracePeriodSeconds do pod.Deadlines de cliente em cada RPC.
Eles previnem latência em cascata e tornam o cancelamento observável.
Em cada PR que toca em arquivos .proto.
Trate falhas como falhas em testes unitários.
Habilite a compressão para payloads grandes e repetitivos.
Pule para mensagens pequenas de alta frequência onde a CPU domina.
Divida quando a escala e o raio de explosão diferirem.
Um único binário é bom para serviços pequenos se as portas forem separadas claramente.
Use bufconn para testes de integração em processo.
Cubra códigos de status, metadados e comportamento de EOF de stream.
Staging, desenvolvimento local ou produção atrás de autenticação forte e política de rede.
Nunca exponha reflexão não autenticada na internet pública.
Implemente handlers v2 que delegam para pacotes de domínio compartilhados.
Evite copiar e colar regras de negócios entre interfaces geradas.
Taxa de RPC, histogramas de latência por método, contadores de código de erro e medidores de stream em voo.
A instrumentação gRPC do OpenTelemetry cobre a maioria das necessidades.
Versões da Stack: Esta página foi escrita para Go 1.26.x (GC padrão Green Tea, go fix modernizers - verifique o patch na compilação), chi (latest - verifique na compilação), gin (latest - verifique na compilação), echo (latest - verifique na compilação), google.golang.org/grpc (latest - verifique na compilação), sigs.k8s.io/controller-runtime (latest - verifique na compilação), kubebuilder (latest - verifique na compilação), tinygo (latest - verifique os alvos de placa na compilação), wazero (latest - verifique na compilação) e golangci-lint (latest - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026