Mikroservis Mimarisi & Servis Keşfi 3 dk okuma 2 okunma

Service Discovery: Consul, Eureka ve Kubernetes DNS

Service Discovery, dinamik ortamlarda servislerin birbirini otomatik bulmasını sağlar. Consul, platformdan bağımsız, DNS ve HTTP API sunan, Raft tabanlı güçlü bir çözümdür. Eureka, Java/Spring ekosistemine özel, istemci taraflı keşif sunar. Kubernetes DNS ise platforma gömülü, sıfır konfigürasyonlu ve dil bağımsız bir çözümdür. Saf Kubernetes ortamlarında DNS genellikle yeterlidir; hibrit ortamlarda Consul öne çıkar.

Service Discovery: Consul, Eureka ve Kubernetes DNS

Service Discovery: Consul, Eureka ve Kubernetes DNS

Mikroservis mimarisinde servis instance'ları dinamik olarak oluşturulur, ölçeklenir ve yok edilir. IP adresleri ve portlar sürekli değiştiği için sabit adres kullanımı işe yaramaz. Service Discovery (Servis Keşfi), servislerin bir katalog aracılığıyla birbirini otomatik bulmasını sağlayan mekanizmadır . Üç yaygın çözüm öne çıkar: Consul, Eureka ve Kubernetes DNS.


1. Consul: Platformdan Bağımsız, Kapsamlı

Consul, HashiCorp tarafından geliştirilen, servis keşfi, sağlık kontrolü, KV depolama ve servis mesh özelliklerini bir arada sunan bir çözümdür . Her düğümde çalışan Agent, servisleri kaydeder ve sağlık durumlarını izler. Server düğümleri ise Raft konsensüsü ile yüksek erişilebilirlik sağlar .

Güçlü Yönleri:

  • Platform Bağımsızlık: VM, container, serverless ve Kubernetes ortamlarında çalışır .

  • DNS ve HTTP API: Uygulamalar DNS ile keşif yapabilir; ek kütüphane gerekmez .

  • Zengin Sağlık Kontrolleri: HTTP, TCP, gRPC, script, TTL gibi çok çeşitli kontrol türleri .

  • Çoklu Veri Merkezi: Multi-datacenter desteği .

Zayıf Yönleri: Operasyonel karmaşıklık ve Agent kurulumu gerektirir . Ayrıca 1.17.0'dan itibaren Business Source License (BSL) ile lisanslanmıştır; 1.16.3 ve öncesi MPL 2.0'dır .

Ne Zaman Kullanılır? Hibrit ortamlar (Kubernetes + VM), çoklu bulut, çok dilli servisler ve servis mesh ihtiyacı olan sistemler .


2. Eureka: Java/Spring Ekosistemine Özel

Netflix Eureka, REST tabanlı bir servis kayıt merkezidir. Servisler kendini kaydeder ve varsayılan olarak 30 saniyede bir kalp atışı (heartbeat) gönderir; kalp atışı kesilirse instance kayıttan çıkarılır .

Güçlü Yönleri:

  • Spring Cloud Entegrasyonu: Java/Spring ekosisteminde kurulumu ve kullanımı çok kolaydır .

  • İstemci Taraflı Keşif: İstemci, kayıt defterini çekip kendi yük dengelemesini yapar; sunucu kesintilerine dayanıklıdır .

  • Bölge (Zone) Desteği: Aynı bölgedeki servisleri tercih ederek gecikmeyi azaltır .

Zayıf Yönleri: Java ekosistemine sıkı bağımlılık; diğer dillerde kullanımı sınırlıdır. Sağlık kontrolü yalnızca heartbeat'e dayanır; uygulama seviyesindeki hataları tespit etmez . Yeni projelerde Kubernetes DNS'e kıyasla daha az tercih edilmektedir .

Ne Zaman Kullanılır? Mevcut Spring Cloud uygulamaları ve Kubernetes dışı Java mikroservis projeleri .


3. Kubernetes DNS: Platforma Gömülü, Sıfır Konfigürasyon

Kubernetes, her Service kaynağı için otomatik olarak bir DNS kaydı oluşturur. Aynı namespace'teki bir Pod, servis adını (http://my-service) kullanarak erişebilir; farklı namespace için my-service.other-namespace yeterlidir .

Güçlü Yönleri:

  • Sıfır Konfigürasyon: Ek kurulum veya kütüphane gerekmez; Kubernetes DNS yönetir .

  • Dil Bağımsız: Her programlama dili standart DNS kullanır .

  • RBAC Uyumlu: Kubernetes güvenlik politikalarıyla entegredir .

  • Headless Service: Stateful workload'lar için doğrudan Pod IP'leri döner; istemci taraflı yük dengeleme yapılabilir .

Zayıf Yönleri: Yalnızca Kubernetes içinde çalışır; çoklu cluster veya VM'ler arası keşif yapamaz . Sağlık kontrolü Kubernetes probe'larına dayanır; başarısız instance'ın kaldırılması bazen gecikebilir .

Ne Zaman Kullanılır? Tüm uygulamalar Kubernetes üzerindeyse ve ek keşif altyapısı istenmiyorsa .


4. Karşılaştırma ve Karar Rehberi

Kriter Consul Eureka Kubernetes DNS
Platform Bağımsız Java/Spring Kubernetes
Keşif Modeli DNS + HTTP API İstemci taraflı Server-side (ClusterIP)
Sağlık Kontrolü Çok zengin Heartbeat Readiness/Liveness Probe
Çoklu Ortam ✅ Evet Sınırlı ❌ Hayır
Kurulum Orta-Yüksek Düşük (Spring) Sıfır
Lisans BSL (1.17+) Apache 2.0 Açık kaynak

Pratik Öneri (2026):

  • Saf Kubernetes: Kubernetes DNS ile başlayın; yetersiz kaldığında servis mesh (Istio, Linkerd) ekleyin .

  • Hibrit (K8s + VM): Consul kullanın .

  • Mevcut Spring Cloud: Eureka'yı koruyun; yeni projelerde Kubernetes DNS'e geçişi değerlendirin .


5. En İyi Pratikler

Pratik Açıklama
Basit başlayın Saf Kubernetes'teyseniz, önce DNS'i deneyin .
Sağlık kontrollerini ihmal etmeyin Keşfin güvenilirliği, sağlık kontrolünün doğruluğuna bağlıdır.
DNS cache süresine dikkat edin Kubernetes'te IP'ler stabil değildir; uzun cache sorun yaratır .
mTLS kullanın Servisler arası iletişimi şifreleyin; yalnızca NetworkPolicy'ye güvenmeyin .

Sonuç

Consul, Eureka ve Kubernetes DNS, farklı ihtiyaçlara cevap veren üç olgun çözümdür. Consul, hibrit ve çok dilli ortamlarda en kapsamlı seçenektir; ancak operasyonel maliyeti yüksektir. Eureka, Spring Cloud ekosisteminde basit ve etkilidir; ancak yeni projelerde yerini Kubernetes DNS'e bırakmaktadır. Kubernetes DNS, saf Kubernetes ortamlarında sıfır konfigürasyon ve dil bağımsızlığı ile en pratik çözümdür. Doğru seçim, platformunuzun sınırlarına ve operasyonel kapasitenize bağlıdır. Unutmayın: En iyi service discovery, ekibinizin yönetebileceği en basit çözümdür.

Tüm yazılar Soru ya da yorumun mu var? Yaz