Pukul 2 pagi. Ruang war room infrastruktur terasa pengap oleh bau kopi dingin dan kepanikan massal. Di layar monitor, metrik Prometheus milik cluster Kubernetes kami menunjukkan lonjakan latensi yang mengerikan hingga melampaui 3 detik. Layanan pembayaran berbasis Go dan Node.js yang melayani jutaan pengguna tiba-tiba mengalami cascading failure karena satu pod database MySQL di balik proxy konvensional mengalami kejenuhan. Saat itulah diskusi panas terjadi: apakah kita harus bertahan dengan kesederhanaan Envoy sebagai standalone reverse proxy yang diracik manual, atau langsung terjun sepenuhnya mengadopsi Istio sebagai service mesh komprehensif yang menjanjikan otomatisasi penuh? Ini bukan sekadar memilih alat, melainkan pertarungan filosofi arsitektur yang menentukan hidup-matinya sistem kita di production.
Sebelum kita masuk ke parit pertarungan teknisnya, mari kita bedah kapasitas kedua pendekar ini lewat matrik performa di lapangan nyata.
| Metrik Evaluasi | Envoy | Istio (berbasis Envoy) |
|---|---|---|
| Kecepatan Routing & Ingress | 10/10 (Ultra-cepat, minim overhead) | 8.5/10 (Sedikit overhead dari control plane) |
| P99 Latency (Under Load) | 9/10 (Sangat stabil di level milidetik) | 8/10 (Bergantung pada ukuran konfigurasi CRD) |
| Konsumsi RAM (Sidecar) | 9/10 (Efisien, hemat memori) | 7/10 (Boros memori karena integrasi Pilot/Galley) |
| Kemudahan Setup & Konfigurasi | 6/10 (Manual YAML murni, butuh ketelitian tinggi) | 5/10 (Curva belajar curam, kompleksitas Kubernetes tinggi) |
| Ekosistem & Observability | 8/10 (Perlu setup Prometheus/Grafana sendiri) | 10/10 (Out-of-the-box tracing, Kiali, mTLS otomatis) |
[!WARNING] Jangan pernah meremehkan konsumsi RAM dari service mesh. Di cluster dengan 500 pods, penambahan sidecar Istio dapat menguras gigabyte memori hanya untuk menyinkronkan xDS configuration.
1. Pertarungan Filosofi: Dua Cara Pandang Berbeda dalam Memecahkan Masalah
Envoy lahir dari rahim insinyur infrastruktur di Lyft dengan satu filosofi suci: jaringan harus transparan bagi aplikasi, dan proxy harus berjalan secepat kilat. Sebagai C++ binary yang dioptimalkan hingga tingkat instruksi CPU, Envoy memposisikan dirinya sebagai mesin penggerak murni. Anda menulis file konfigurasi YAML, mendefinisikan listeners, clusters, dan routes, lalu meluncurkannya sebagai daemon atau sidecar. Tidak ada control plane ajaib yang mendikte hidup Anda; Anda adalah arsitek tunggal dari setiap byte paket jaringan yang keluar-masuk.
Sebaliknya, Istio datang dengan membawa konsep Control Plane dan Data Plane yang terpisah. Di sini, Envoy tetap menjadi Data Plane (sebagai sidecar proxy yang diinjeksi otomatis ke dalam pod Kubernetes), namun dikendalikan sepenuhnya oleh sekumpulan komponen cerdas seperti istiod. Anda tidak lagi menulis konfigurasi jaringan tingkat rendah secara manual. Anda menulis Kubernetes Custom Resource Definitions (CRD) seperti VirtualService, DestinationRule, dan PeerAuthentication, biar Istio yang menerjemahkannya ke dalam protokol xDS (Discovery Service) lalu mendistribusikannya secara real-time ke ribuan proxy di dalam cluster.
Pertarungan ini mengingatkan kita pada perbedaan antara merakit mesin mobil sport secara manual di garasi (Envoy) versus mengendarai mobil otonom dengan sistem autopilot canggih namun tertutup (Istio). Manakah yang lebih nyaman saat tekanan produksi memuncak? Mari kita buktikan di ronde berikutnya.
2. Ronde 1: Ergonomi Menulis Kode & Pengalaman Konfigurasi Sehari-hari
Ketika deadline meluncurkan fitur baru tersisa beberapa jam, kenyamanan konfigurasi adalah segalanya. Bayangkan Anda harus mengatur traffic shifting untuk migrasi layanan backend dari PHP-FPM monolith lama ke microservice Go yang baru.
Dengan Envoy, Anda harus mendefinisikan rute dan pembagian bobot (weight) secara eksplisit di dalam file konfigurasi sentral atau melalui Dynamic Forward Proxy:
static_resources:
listeners:
- name: listener_http
address:
socket_address:
address: 0.0.0.0
port_value: 8080
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: backend
domains: ["api.perusahaan.com"]
routes:
- match: { prefix: "/\