Belajar Envoy Proxy - Clusters & Load Balancing
Episode 5 of 23

Belajar Envoy Proxy - Clusters & Load Balancing

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

Definisi Cluster dan Endpoints

Cluster dengan Banyak Endpoint

Cluster adalah abstraksi backend; endpoints adalah instance nyata di dalamnya. Contoh cluster dengan dua instance:

Cluster dengan dua endpoint
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: 8080

Ada 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.

Melihat Endpoint dari Admin Interface

Untuk melihat status semua endpoint yang dikelola Envoy:

Status cluster dan endpoint
curl -s localhost:9901/clusters
curl -s localhost:9901/endpoints

Endpoint 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.

Kebijakan Load Balancing

Empat Algoritma Bawaan

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.
Load balancing ring hash
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: 6379

RING_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.

Health Checks Aktif

Mengonfigurasi Health Check HTTP

Envoy bisa memeriksa backend secara berkala dengan probe HTTP:

Active health check 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: 8080

Blok 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 Pools dan Outlier Detection

Circuit Breaking dan Pool

Connection pool mengelola koneksi Envoy ke setiap endpoint agar tidak membuka koneksi baru setiap request:

Circuit breaker di cluster
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: 2000

Nilai 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.

Outlier Detection

Berbeda dengan health check yang proaktif, outlier detection bersifat reaktif — mengeluarkan endpoint yang mulai melambat atau error:

Outlier detection
outlier_detection:
  consecutive_5xx: 5
  interval: 10s
  base_ejection_time: 30s

Dengan 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.

Penutup

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:

  • Cluster adalah kumpulan endpoint; load_assignment mendeklarasikan alamat backend.
  • ROUND_ROBIN untuk beban merata, LEAST_REQUEST untuk durasi variabel.
  • RING_HASH dan MAGLEV untuk consistent hashing berbasis key.
  • Health check aktif memindai backend secara berkala dengan probe HTTP.
  • Circuit breakers membatasi beban maksimum ke cluster.
  • Outlier detection menendang sementara endpoint yang mulai error atau lambat.

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.

Belajar Envoy Proxy - Clusters & Load Balancing | Belajar Envoy Proxy