Consistent Hashing: Büyük Sistemlerde Yük Dağıtımını Akıllıca Yönetmek

Bu yazıda, büyük sistemlerde yükü birden fazla sunucuya nasıl dağıttığımızı ve klasik yöntemlerin neden bazen yetersiz kaldığını öğreneceksin. Özellikle “consistent hashing” denen yaklaşımın neden ortaya çıktığını ve neyi çözdüğünü net şekilde anlayacaksın.

Tek Sunucudan Dağıtık Sisteme Geçiş

Şimdi şöyle bir düşün: Elinde bir algoritma var ve bunu bir sunucuda çalıştırıyorsun. İnsanlar gelip bu algoritmayı kullanıyor.

Yani sistem basit:

  • Kullanıcı → istek gönderir
  • Sunucu → işlemi yapar ve cevap döner

Aslında bu yapı bir sunucu (server) dediğimiz şey.

Yani şöyle düşün:

Garson gibi çalışıyor. Siparişi alıyor, mutfağa iletiyor, sonra sana geri getiriyor.

Ama bir süre sonra insanlar senin sistemi çok seviyor ve binlerce kişi aynı anda kullanmak istiyor. Tek sunucu artık yetmiyor.


Load Balancing (Yük Dengeleme) Nedir?

Bu noktada yeni sunucular ekliyorsun.

Artık durum şu:

  • 1 yerine 4–5 sunucu var
  • Gelen istekleri bunlara dağıtman gerekiyor

Buna load balancing (yük dengeleme) denir.

Bunu şöyle hayal edebilirsin:

Tek kasalı bir marketten, 5 kasalı markete geçiyorsun. Ama müşterileri doğru kasaya yönlendirmen gerekiyor.


Basit Hashing ile Dağıtım

Sistem genelde şöyle çalışır:

  1. Her isteğin bir ID’si vardır
  2. Bu ID bir hash fonksiyonuna verilir
  3. Çıkan sonuç, sunucu sayısına bölünür (mod alınır)
  4. Hangi sunucuya gideceği belirlenir

Örnek:

  • 4 sunucu varsa → hash(ID) % 4
  • Sonuç 3 ise → 3. sunucuya gider

Bu yöntem teoride güzel çalışır çünkü:

  • Dağılım genelde dengeli olur
  • Her sunucu yaklaşık eşit yük alır

Problem: Yeni Sunucu Eklemek

Asıl problem burada başlıyor.

Diyelim ki sistem büyüdü ve yeni bir sunucu ekledin.

Önceden:

hash(ID) % 4

Şimdi:

hash(ID) % 5

Ve her şey değişiyor.

Aynı kullanıcı:

  • Önceden Server 3’e gidiyordu
  • Şimdi Server 0’a gidebilir

Yani neredeyse tüm sistem dağılımı bozuluyor.


Bu Neden Büyük Problem?

Sen de fark etmişsindir ki bu sadece yönlendirme sorunu değil.

Asıl problem cache (önbellek).

Çünkü:

  • Kullanıcı hep aynı sunucuya gidiyorsa → verisini orada tutabilirsin
  • Ama sunucu değişirse → cache boşa gider

Yani şöyle düşün:

Her seferinde başka doktora gitmek zorunda kalıyorsun. Hiçbirinde geçmiş kayıtların yok.

Bu da:

  • Performansı düşürür
  • Sistemi yavaşlatır
  • Kaynak kullanımını artırır

Asıl İhtiyaç: Minimum Değişim

Burada kritik bir ihtiyaç ortaya çıkıyor:

Yeni sunucu eklendiğinde:

  • Tüm sistem değişmemeli
  • Sadece küçük bir kısım etkilenmeli

Yani:

  • %100 veri yer değiştirmemeli
  • Sadece gerekli kadar veri taşınmalı

Consistent Hashing Mantığı

İşte burada consistent hashing devreye giriyor.

Temel fikir şu:

  • Tüm sunucular ve veriler bir “çember” üzerinde konumlanır
  • Yeni sunucu eklendiğinde → sadece ona yakın olan küçük bir veri grubu taşınır

Bunu şöyle hayal edebilirsin:

Pizza düşün 🍕

  • Her dilim bir sunucu
  • Yeni bir dilim ekliyorsun

Normal yöntemde:

  • Tüm pizza yeniden kesiliyor

Consistent hashing’de:

  • Sadece küçük bir dilimi alıp yeni sunucuya veriyorsun

Neden Daha İyi?

Bu yaklaşım sayesinde:

  • Sistem stabil kalır
  • Cache büyük ölçüde korunur
  • Performans düşmez
  • Ölçeklenebilirlik (scalability) sağlanır

Yani şöyle düşün:

Yeni çalışan geldi diye tüm şirketi yeniden organize etmiyorsun, sadece küçük bir görev dağılımı yapıyorsun.


Özet

Tek sunucudan çok sunuculu sisteme geçtiğinde yük dağıtımı kritik hale gelir. Basit hashing yöntemi başlangıçta işe yarasa da, yeni sunucu eklendiğinde tüm sistemin dağılımını bozarak ciddi performans problemleri yaratır. Özellikle cache kullanımının bozulması, sistemin verimsiz çalışmasına neden olur. Consistent hashing ise bu problemi çözer; veri dağılımını minimum değişiklikle güncelleyerek sistemi stabil, hızlı ve ölçeklenebilir hale getirir.


Bu yazı What is LOAD BALANCING? videosundan ilham alınarak yazılmıştır.


Kaynakça:

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir