CodeBlanks Logo Icon CodeBlanks

Service discovery

Service discovery desenini öğrenirsin.

Service discovery

Service discovery, servislerin birbirini bulmasını sağlayan mekanizmadır. Sabit IP yerine, her servis kendini bir kayıt defterine (registry) bildirir; diğer servisler de oradan adresini alır. Bu, dinamik ortamlarda (konteyner, otomatik ölçekleme) zorunludur.

Örnek: user-servisi açılırken registry.register("user-service", "10.0.0.5:3000") ile kaydolur. sipariş servisi user-servisini çağıracağı zaman registry.lookup("user-service") ile adresini alır. Popüler araçlar: Consul, etcd, Eureka. Service discovery olmadan her servis diğerinin adresini sabit tutar; bu da kopya sayısının değiştiği ortamlarda çalışmaz. Dinamik keşif, yeni kopyalar otomatik eklenince onların da çağrılabilmesini sağlar.

Registry deseni

Bir registry, servis adını adrese eşleyen basit bir sözlüktür. Servisler açılırken kaydolur, kapanırken kaydı silinir. Çağrı yapan servis her seferinde registry'den güncel adresi sorar.

Örnek: const registry = new Map(); registry.set("user-service", "10.0.0.5:3000"); registry.get("user-service");. Üretimde bu daha gelişmiş bir araç (Consul) olur; ama ana fikir aynı. Registry'nin yüksek erişilir olması gerekir; yoksa tüm servis iletişimi durur. Sağlık kontrolü (health check) ile ölü kopyalar registry'den temizlenir. Bu, sistemin kendi kendini onarmasını sağlar.

Uygulama Basit registry yaz

Yeni bir Map'i registry değişkenine ata. registry.set("user-service", "10.0.0.5:3000") ile kayıt ekle. registry.get("user-service") ile adresi alıp console.log ile yazdır.

Başlangıç kodu

index.js
// registry olarak yeni bir Map oluştur
// buraya yaz

// user-service kaydını ekle
// buraya yaz

// adresi al ve yazdır
// buraya yaz

Örnek çözüm

index.js
const registry = new Map();
registry.set("user-service", "10.0.0.5:3000");
console.log(registry.get("user-service"));

Beklenen çıktı

10.0.0.5:3000

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Service discovery ne işe yarar?

index.js
registry.register(name, addr)
  • Servisi kapatır
  • İstek sayısını sayar
  • Servis adresini dinamik bulur Doğru cevap
  • Veritabanı yedeği alır

Açıklama: Service discovery adresi dinamik bulur.

2 registry.set çağrısını tamamla

Soru
registry.set("user-service", "10.0.0.5:3000");
const addr = registry.____("user-service");
Cevap
registry.set("user-service", "10.0.0.5:3000");
const addr = registry.get("user-service");

Açıklama: registry.get ile adres alınır.

3 Kavramı rolüne eşle

Kavram Anlamı
registry Adresleri tutar
register Servis açılırken kaydolur
lookup Adresi sorar
health check Ölü kopyaları temizler

İleri seviye bölümündeki tüm dersler