Belajar Multigress - Traffic Policy & Load Balancing
Episode 6 of 23

Belajar Multigress - Traffic Policy & Load Balancing

Episode ini membahas traffic splitting dan weights, retries, timeouts, circuit breakers, request mirroring, serta perilaku load balancing Multigress di antara service backend.

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

Pendahuluan

Menuju ke service saja tidak cukup — kalian harus mengendalikan bagaimana traffic mengalir. Episode 6 membuka kotak traffic policy dan load balancing Multigress: membagi traffic dengan weights, mengatur retries dan timeouts, melindungi backend dengan circuit breaker, serta memakai request mirroring untuk menguji tanpa mengganggu pengguna.

Di akhir episode ini kalian bisa menjawab pertanyaan khas platform engineer: bagaimana cara mengirim satu persen traffic ke versi baru, atau bagaimana melindungi backend yang sedang sekarat.

Traffic Splitting dan Weights

Konsep Weight pada backendRefs

HTTPRoute mendukung beberapa backendRefs sekaligus, masing-masing dengan weight. Bobot menentukan proporsi traffic:

Splitting 90:10
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: api-route
spec:
  parentRefs:
    - name: main-gateway
      namespace: multigress-system
  hostnames:
    - "api.example.com"
  rules:
    - backendRefs:
        - name: api-stable
          port: 8080
          weight: 90
        - name: api-canary
          port: 8080
          weight: 10

Konfigurasi di atas mengirim 90 persen traffic ke api-stable dan 10 persen ke api-canary. Total bobot menentukan persentase; tidak harus berjumlah 100.

Melihat Proporsi Secara Praktis

Uji berulang untuk melihat distribusi:

Uji distribusi traffic
for i in $(seq 1 100); do
  curl -s http://localhost:8080/api | grep -o '"host":.*' | head -1
done | sort | uniq -c

Perhatikan: splitting bersifat probabilistik, jadi hasil 100 percobaan mendekati 90:10, bukan persis. Jangan gunakan weights jika kalian butuh jaminan mutlak per request — gunakan header atau cookie berdasarkan rule match.

Retries, Timeouts, dan Circuit Breakers

BackendTrafficPolicy

Fitur seperti retries, timeouts, dan circuit breaker tidak ada di HTTPRoute standar. Multigress menyediakannya lewat CRD BackendTrafficPolicy yang menempel ke route atau service backend:

Policy timeout dan retry
apiVersion: gateway.multigress.io/v1
kind: BackendTrafficPolicy
metadata:
  name: api-policy
spec:
  targetRefs:
    - group: gateway.networking.k8s.io
      kind: HTTPRoute
      name: api-route
  timeouts:
    request: 5s
    backendRequest: 3s
  retry:
    attempts: 3
    retryOn:
      - connect-failure
      - reset
      - 5xx

Policy ini membatasi waktu request maksimal 5 detik, mencoba ulang hingga 3 kali ketika koneksi gagal, koneksi di-reset, atau backend membalas 5xx. Perintah kubectl apply -f api-policy.yaml menerapkan policy tersebut ke route kalian.

Circuit Breaker

Circuit breaker melindungi backend dari ledakan request ketika dia sedang gagal:

Circuit breaker
apiVersion: gateway.multigress.io/v1
kind: BackendTrafficPolicy
metadata:
  name: api-circuit-breaker
spec:
  targetRefs:
    - group: gateway.networking.k8s.io
      kind: Service
      name: api
  circuitBreaker:
    maxConnections: 1000
    maxPendingRequests: 64
    maxRequests: 128
    maxRetries: 5

Saat ambang batas terlampaui, proxy langsung menolak request baru tanpa membebani backend — pola yang sama dengan circuit breaker pada service mesh. Setelah kondisi pulih, aliran traffic dibuka kembali secara otomatis.

Request Mirroring dan Perilaku Load Balancing

Mirroring untuk Uji Tanpa Risiko

Request mirroring mengirim salinan request ke service lain tanpa mengubah respons ke klien. Ini sempurna untuk menguji versi baru dengan traffic produksi asli:

Mirror ke service staging
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: api-route-mirror
spec:
  parentRefs:
    - name: main-gateway
      namespace: multigress-system
  rules:
    - backendRefs:
        - name: api-stable
          port: 8080
      filters:
        - type: RequestMirror
          requestMirror:
            backendRef:
              name: api-shadow
              port: 8080

Klien hanya berinteraksi dengan api-stable; salinan request dikirim diam-diam ke api-shadow. Ingat: mirror tidak boleh dipakai untuk request yang menulis data — bayangkan efek ganda pada transaksi pembayaran.

Algoritma Load Balancing

Multigress memakai algoritma least request secara default: request diarahkan ke backend dengan jumlah koneksi aktif paling sedikit. Opsi lain yang tersedia:

  • round-robin: giliran berurutan antar backend.
  • random: pemilihan acak, cocok untuk membaurkan distribusi.
  • consistent-hash: request dengan key yang sama selalu menuju backend yang sama — penting untuk session affinity.
Ubah algoritma load balancing
apiVersion: gateway.multigress.io/v1
kind: BackendTrafficPolicy
metadata:
  name: api-lb-policy
spec:
  targetRefs:
    - group: gateway.networking.k8s.io
      kind: HTTPRoute
      name: api-route
  loadBalancing:
    algorithm: round-robin

Info

consistent-hash bukan pengganti session affinity HTTP di tingkat aplikasi, tetapi cukup untuk kebutuhan sederhana seperti mempertahankan backend yang sama selama percobaan.

Penutup

Episode 6 memberikan kalian kendali penuh atas aliran traffic: membagi dengan weights untuk canary, melindungi backend dengan timeout, retry, dan circuit breaker, serta menguji versi baru dengan request mirroring.

Inti yang harus dibawa pulang:

  • backendRefs dengan weight membagi traffic secara proporsional.
  • BackendTrafficPolicy menambahkan timeouts, retries, dan circuit breaker.
  • Circuit breaker menolak request cepat-cepat ketika ambang terlampaui.
  • RequestMirror mengirim salinan ke service shadow tanpa memengaruhi klien.
  • Least request adalah algoritma default; round-robin dan consistent-hash tersedia.

Di episode 7 selanjutnya kita akan mengenalkan observability basics — mengaktifkan metrics dan logs Multigress, integrasi dengan Prometheus dan Grafana, serta cara memeriksa route behavior dan health gateway. Konfigurasi traffic policy kalian akan diuji dengan data nyata.

Belajar Multigress - Traffic Policy & Load Balancing | Belajar Multigress