Modern dağıtık sistemlerde, ağınızın kenarı ilk savunma hattınız ve en kritik performans darboğazınızdır. Ters vekil, istemcileriniz ile üst akış hizmetleriniz arasında durarak trafiği yöneten, güvenliği uygulayan ve kullanılabilirliği sağlayan bir kapı bekçisi görevi görür. Nginx, yüksek performanslı yük dengeleme için uzun süredir endüstri standardıyken, Envoy, bulut yerel servis ağı (service mesh) uygulamalarında önde gelen bir lider olarak ortaya çıkmıştır. Her ikisinin nüanslarını anlamak, orta düzeyden ileri düzey sistem mühendisleri için vazgeçilmezdir.
Ters Vekilin Rolü
Bir ters vekil, istemcilerden gelen istekleri alır ve bunları istemci tarafından görünmeyen bir veya daha fazla arka uç sunucusuna iletir. Bu soyutlama, birkaç kritik avantaj sağlar:
- Yük Dengeleme: Tek noktadan arıza riskini önlemek için trafiği birden fazla örnek arasında dağıtır.
- TLS Sonlandırma: Şifreleme ve şifre çözme işlemlerini arka uç hizmetlerinden alarak performansı artırır.
- İstek Yönlendirme: Başlıklara, yollara veya alan adlarına göre trafiği yönlendirir.
- Güvenlik: Arka uç IP adreslerini korur ve merkezi hız sınırlama ile kimlik doğrulama imkânı tanır.
Nginx: Savaşta Test Edilmiş İş Atı
Nginx, büyük miktarda eşzamanlı bağlantıyı minimum kaynak kullanımıyla işlemede uzmanlaşmış, olay odaklı ve asenkron bir sunucudur. Yapılandırması öz ve güçlüdür; bu da onu geleneksel web sunumu ve API kapıları için favori haline getirmiştir.
upstream backend_pool {
server 10.0.0.1:8080;
server 10.0.0.2:8080 weight=2; # İki katı trafik
server 10.0.0.3:8080 backup; # Sadece diğerleri başarısız olursa kullanılır
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend_pool;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 5s;
proxy_read_timeout 10s;
}
}
Nginx, ana-çalışan (master-worker) süreç modelini kullanır. Ana süreç yapılandırmayı okur ve çalışan süreçleri başlatır; bu süreçler de gerçek bağlantıları işler. Bu tasarım, bağlantıları düşürmeden zarif yeniden yüklemeler (graceful reloads) yapılmasını sağlar.
Envoy: Bulut Yerel Şampiyon
Envoy, bulut yerel uygulamalar için tasarlanmış yüksek performanslı bir kenar ve servis vekilidir. Istio gibi büyük servis ağları tarafından kullanılan vekildir. Nginx'in aksine Envoy, dinamik yapılandırma düşünülerek geliştirilmiştir; bu sayede tüm süreci yeniden yüklemeye gerek kalmadan yönlendirme kurallarını güncelleyebilir.
{
"clusters": [{
"name": "service_backend",
"connect_timeout": "5s",
"type": "EDS",
"eds_cluster_config": {
"eds_config": {
"ads": {}
}
},
"load_assignment": {
"cluster_name": "service_backend",
"endpoints": [{
"lb_endpoints": [{
"endpoint": {
"address": {
"socket_address": {
"address": "10.0.0.1",
"port_value": 8080
}
}
}
}]
}]
}
}],
"listeners": [{
"name": "listener_0",
"address": {
"socket_address": {
"address": "0.0.0.0",
"port_value": 80
}
},
"filter_chains": [{
"filters": [{
"name": "envoy.filters.network.http_connection_manager",
"config": {
"stat_prefix": "ingress_http",
"http_filters": [{
"name": "envoy.filters.http.router",
"config": {}
}]
}
}]
}]
}]
}
Envoy'in yapılandırması ayrıntılı (verbose) olmakla birlikte son derece granülerdir. Dağıtık izleme metrikleri dahil olmak üzere zengin telemetriyi destekler; bu da karmaşık mikroservis etkileşimlerini hata ayıklamak için paha biçilmezdir.
Doğru Aracı Seçmek
Nginx ve Envoy arasında seçim yapmak, altyapı bağlamınıza bağlıdır. Basit, statik veya yarı-statik web uygulamaları için Nginx genellikle yeterlidir ve yapılandırması daha kolaydır. Ancak, sık sık servis keşif değişiklikleri olan dinamik bir mikroservis mimarisi çalıştırıyorsanız, Envoy'in dinamik yapılandırması ve gRPC ile servis ağı desenlerine yerel desteği onu üstün bir seçim haline getirir.
Sonuç
Ters vekiller sadece geçiş mekanizmaları değildir; sistem dayanıklılığının kritik bileşenleridir. Nginx'in verimliliğini veya Envoy'in esnekliğini kullanarak, yalnızca ölçeklenebilir değil, aynı zamanda gözlemlenebilir ve güvenli sistemler inşa edebilirsiniz. Bu araçları ustalaşmak, tüm ağınızın davranışını şekillendirmenizi sağlar ve arka uç hizmetlerinizin baskı altında sağlıklı ve tepkisel kalmasını garanti eder.