Mejores prácticas de gRPC
Versionado de protos, plazos y balanceo de carga de gRPC en K8s.
Busca en todas las páginas de la documentación
Versionado de protos, plazos y balanceo de carga de gRPC en K8s.
Estas reglas mantienen los contratos estables, los RPCs observables y los despliegues seguros, desde el portátil hasta los clústeres de producción.
buf breaking (o equivalente) en CI antes de fusionar ediciones de .proto.bufconn..proto.v1, v2) para cambios incompatibles en la API. Ejecute servidores duales o RPCs duales durante las ventanas de migración.go_package y package de Java. Mover las rutas de importación generadas rompe los módulos descendentes de forma silenciosa.optional o FieldMask para actualizaciones parciales. Distinga los campos no establecidos de los valores cero intencionales.Unimplemented<Service>Server en cada struct de servicio. Compatibilidad futura cuando se añadan RPCs.status.Error con el código estándar más cercano. Reserve Internal para errores reales, no para fallos de validación.ErrorInfo, BadRequest) para errores legibles por máquina. Las pasarelas y los clientes pueden ramificarse sin analizar cadenas.context en manejadores largos y bucles de transmisión. Detenga el trabajo cuando los clientes se desconecten.Unavailable con retroceso y jitter. Evite tormentas de reintentos durante las interrupciones.grpc.ClientConn entre solicitudes. Marcar por RPC desperdicia apretones de manos TCP y TLS.GracefulStop en los servidores.traceparent o portadores OTel). Empareje con manejadores otelgrpc para spans.insecure son solo para desarrollo local.Internal con rastros de pila registrados.io.EOF como fin normal de transmisión, no siempre como error. Devuelva el estado apropiado solo en las rutas de fallo.grpc.health.v1 y conecte las sondas de liveness/readiness. Establezca NOT_SERVING hasta que las dependencias estén listas.GracefulStop en SIGTERM con una reserva Stop acotada. Coincida con terminationGracePeriodSeconds del pod.Plazos de cliente en cada RPC.
Evitan la latencia en cascada y hacen que la cancelación sea observable.
En cada PR que toque archivos .proto.
Trate los fallos como fallos de pruebas unitarias.
Habilite la compresión para cargas útiles grandes y repetitivas.
Omítala para mensajes diminutos de alta frecuencia donde la CPU domina.
Divida cuando la escala y el radio de explosión difieran.
Un único binario está bien para servicios pequeños si los puertos están claramente separados.
Use bufconn para pruebas de integración en proceso.
Cubra los códigos de estado, metadatos y el comportamiento de EOF de la transmisión.
Staging, desarrollo local o producción detrás de una autenticación sólida y política de red.
Nunca exponga la reflexión no autenticada en Internet público.
Implemente manejadores v2 que deleguen a paquetes de dominio compartidos.
Evite copiar y pegar reglas de negocio a través de interfaces generadas.
Tasa de RPC, histogramas de latencia por método, contadores de códigos de error y medidores de transmisiones en curso.
La instrumentación gRPC de OpenTelemetry cubre la mayoría de las necesidades.
Versiones de la pila: Esta página fue escrita para Go 1.26.x (predeterminado GC Green Tea, go fix modernizers - verifique el parche en la compilación), chi (última versión - verifique en la compilación), gin (última versión - verifique en la compilación), echo (última versión - verifique en la compilación), google.golang.org/grpc (última versión - verifique en la compilación), sigs.k8s.io/controller-runtime (última versión - verifique en la compilación), kubebuilder (última versión - verifique en la compilación), tinygo (última versión - verifique los objetivos de la placa en la compilación), wazero (última versión - verifique en la compilación) y golangci-lint (última versión - verifique el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 16 jul 2026