Episode ini membahas standar gRPC health checking grpc.health.v1.Health, gRPC server reflection untuk debugging dengan grpcurl, serta service discovery modern: DNS, Consul, Kubernetes, dan dasar-dasar xDS.

Server gRPC kalian berjalan, tapi bagaimana sistem lain tahu server itu sehat? Bagaimana developer memanggil method tanpa menulis client? Dan bagaimana load balancer menemukan instance yang tersedia? Tiga pertanyaan itu dijawab oleh tiga mekanisme: health checking, reflection, dan service discovery.
Episode 9 membahas ketiganya. Kalian akan mengaktifkan health service standar, menyalakan reflection untuk debugging dengan grpcurl, dan memahami bagaimana DNS, Consul, Kubernetes, serta xDS membuat client menemukan server yang tepat.
gRPC mendefinisikan layanan health resmi di grpc/health/v1/health.proto. Dengan memakai standar ini, tool apa pun — Kubernetes probe, load balancer, atau client — bisa menanyakan kesehatan server dengan cara yang sama:
syntax = "proto3";
package grpc.health.v1;
service Health {
rpc Check(HealthCheckRequest) returns (HealthCheckResponse);
}
message HealthCheckRequest {
string service = 1;
}
message HealthCheckResponse {
enum ServingStatus {
UNKNOWN = 0;
SERVING = 1;
NOT_SERVING = 2;
}
ServingStatus status = 1;
}Jangan tulis ulang ini: gunakan implementasi dari library. Di Go, google.golang.org/grpc/health dan healthgrpc menyediakan semuanya.
import (
"google.golang.org/grpc/health"
healthpb "google.golang.org/grpc/health/grpc_health_v1"
)
healthSrv := health.NewServer()
healthSrv.SetServingStatus(
"catalog.v1.CatalogService", healthpb.HealthCheckResponse_SERVING,
)
healthpb.RegisterHealthServer(s, healthSrv)healthSrv.SetServingStatus(...) memberi tahu pemantau bahwa service catalog.v1.CatalogService sedang melayani. Saat dependency hilang — misalnya database mati — status bisa diubah menjadi NOT_SERVING agar traffic tidak diarahkan ke instance yang rusak.
Container health check bisa memakai grpc-health-probe, tool kecil yang dioptimalkan untuk Kubernetes:
grpc-health-probe -addr=localhost:50051Output status: SERVING menandakan server sehat. Perintah grpc-health-probe -addr=localhost:50051 ini bisa dipakai sebagai liveness atau readiness probe di Kubernetes.
Reflection memungkinkan client menanyakan daftar service dan definisi message tanpa file .proto. Di Go cukup satu baris:
import "google.golang.org/grpc/reflection"
reflection.Register(s)reflection.Register(s) membangkitkan service grpc.reflection.v1.ServerReflection yang bisa dipakai grpcurl untuk menjelajahi API secara dinamis.
Dengan reflection aktif, semua informasi kontrak tersedia dari server itu sendiri:
grpcurl -plaintext localhost:50051 list
grpcurl -plaintext localhost:50051 list catalog.v1.CatalogService
grpcurl -plaintext localhost:50051 describe catalog.v1.ProductPerintah grpcurl -plaintext localhost:50051 list menampilkan semua service yang terdaftar. Ini mengubah workflow debugging: tidak perlu membawa file .proto ke mana-mana, cukup tanya server.
Kalian bahkan bisa menjalankan RPC penuh dari CLI:
grpcurl -plaintext -d '{"id":"p-001"}' \
localhost:50051 catalog.v1.CatalogService/GetProductOutput JSON yang dihasilkan membuat testing manual menjadi sangat cepat. grpcurl -plaintext -d '{"id":"p-001"}' menerjemahkan request JSON ke protobuf biner secara otomatis berkat reflection.
Cara paling sederhana: client memakai nama DNS. grpc.NewClient("catalog-svc:50051") meminta sistem resolusi menemukan alamat IP. Untuk satu IP, gRPC memakai pick_first; untuk banyak IP, round_robin — episode 10 membahas keduanya.
Consul menyediakan service registry: server mendaftarkan diri, client menanyakan via API atau DNS. Pendaftaran sering dipadukan dengan health check:
consul services register -name=catalog -port=50051
consul catalog servicesPerintah consul services register -name=catalog -port=50051 mendaftarkan instance; klien menemukan instance sehat lewat query catalog.service.consul.
Di Kubernetes, Service object memilih pod sehat via readiness probe — tempat grpc-health-probe berperan. Untuk load balancing yang lebih pintar, xDS adalah protokol kontrol yang dipakai Envoy dan Istio: client gRPC bisa berlangganan endpoint secara dinamis tanpa restart. Ini topik episode 10 dan 18.
Inti yang harus dibawa pulang:
grpc.health.v1 dipahami semua tool tanpa konfigurasi khusus.grpc-health-probe menjadi jembatan ke liveness dan readiness probe Kubernetes.grpcurl menjelajah dan memanggil API tanpa file .proto.Di episode 10 selanjutnya kita membahas HTTP/2, load balancing, dan connection management — karakteristik networking HTTP/2 yang dipakai gRPC, load balancing client-side modern dengan round robin, pick-first, dan xDS, serta connection pooling, keepalive, dan stream management. Discovery yang kalian bangun akan dihubungkan ke strategi distribusi traffic yang benar.