Episode ini membedah cluster dan endpoint: cara mendefinisikan backend, kebijakan load balancing round_robin, least_request, ring_hash, dan maglev, plus health checks, connection pools, dan outlier detection.

Di episode 4 kalian sudah tahu cara me-route request, tapi semuanya masih menuju satu backend. Episode 5 masuk ke jantung distribusi beban: clusters dan load balancing. Di sinilah Envoy menunjukkan keunggulannya dibanding proxy sederhana — kemampuan memilih di antara banyak endpoint dengan algoritma yang tepat, sambil menjaga kesehatan setiap backend.
Kalian akan belajar mendefinisikan cluster dengan beberapa endpoint, memilih kebijakan load balancing yang sesuai kebutuhan, lalu menghidupkan health check aktif dan outlier detection agar Envoy otomatis menghindari backend yang bermasalah.
Cluster adalah abstraksi backend; endpoints adalah instance nyata di dalamnya. Contoh cluster dengan dua instance:
clusters:
- name: api_service
connect_timeout: 0.25s
type: STRICT_DNS
dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: api_service
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: api-1.internal
port_value: 8080
- endpoint:
address:
socket_address:
address: api-2.internal
port_value: 8080Ada dua tipe resolusi yang umum:
STRICT_DNS — setiap alamat DNS di-resolve, semua hasil dipakai.LOGICAL_DNS — hanya satu IP hasil resolusi yang dipakai per koneksi.Konfigurasi load_assignment dengan beberapa lb_endpoints adalah cara mendeklarasikan endpoint secara statis.
Untuk melihat status semua endpoint yang dikelola Envoy:
curl -s localhost:9901/clusters
curl -s localhost:9901/endpointsEndpoint local:9901/endpoints menampilkan daftar endpoint per cluster lengkap dengan status health dan metadata. Ini endpoint admin yang paling sering dicek saat troubleshoot load balancing.
Envoy menyediakan beberapa kebijakan yang diatur lewat lb_policy:
ROUND_ROBIN — membagi request secara bergilir merata.LEAST_REQUEST — memilih endpoint dengan request aktif paling sedikit.RING_HASH — konsisten memetakan request ke endpoint yang sama untuk key tertentu.MAGLEV — ring hash tanpa konsistensi antar perubahan, lebih merata secara statistik.clusters:
- name: cache_service
connect_timeout: 0.25s
type: STRICT_DNS
lb_policy: RING_HASH
load_assignment:
cluster_name: cache_service
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: cache-1.internal
port_value: 6379
- endpoint:
address:
socket_address:
address: cache-2.internal
port_value: 6379RING_HASH dengan lb_policy sering dipakai untuk cache atau session: request dari klien yang sama selalu mendarat di endpoint yang sama, sehingga cache lebih panas dan hit rate naik.
Envoy bisa memeriksa backend secara berkala dengan probe HTTP:
clusters:
- name: api_service
connect_timeout: 0.25s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
health_checks:
- timeout: 1s
interval: 5s
unhealthy_threshold: 3
healthy_threshold: 2
http_health_check:
path: /healthz
load_assignment:
cluster_name: api_service
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: api-1.internal
port_value: 8080Blok health_checks membuat Envoy mengirim GET /healthz setiap 5 detik. Tiga kegagalan beruntun menandai endpoint unhealthy, dan dua keberhasilan mengembalikannya sehat. Endpoint unhealthy otomatis dikeluarkan dari rotasi load balancing.
Connection pool mengelola koneksi Envoy ke setiap endpoint agar tidak membuka koneksi baru setiap request:
clusters:
- name: api_service
connect_timeout: 0.25s
type: STRICT_DNS
lb_policy: LEAST_REQUEST
circuit_breakers:
thresholds:
- max_connections: 1000
max_pending_requests: 1024
max_requests: 2000Nilai circuit_breakers membatasi beban maksimum ke cluster: koneksi, request tertunda, dan request aktif. Detail lebih dalam akan kita bahas di episode 10, tapi mulai sekarang biasakan melihat blok ini sebagai pengaman utama cluster.
Berbeda dengan health check yang proaktif, outlier detection bersifat reaktif — mengeluarkan endpoint yang mulai melambat atau error:
outlier_detection:
consecutive_5xx: 5
interval: 10s
base_ejection_time: 30sDengan consecutive_5xx: 5, endpoint yang menghasilkan 5 error 5xx berturut-turut akan di-eject sementara. Ini menangkap masalah yang tidak terlihat oleh health check berkala.
Episode 5 menjelaskan bagaimana Envoy mendistribusikan traffic: cluster sebagai abstraksi backend, endpoint sebagai instance nyata, empat algoritma load balancing, health check aktif, connection pool, dan outlier detection yang menjaga backend tetap sehat.
Inti yang harus dibawa pulang:
load_assignment mendeklarasikan alamat backend.ROUND_ROBIN untuk beban merata, LEAST_REQUEST untuk durasi variabel.RING_HASH dan MAGLEV untuk consistent hashing berbasis key.Di episode 6 selanjutnya kita akan membahas TLS dan mTLS — TLS termination di Envoy, TLS origination ke upstream, mutual TLS antar service, certificate rotation, dan integrasi SDS.