COMPUTER ENGINEER

← BlogDATA STRUCTURES / ALGORITHMSPython örnek paketi ↓

Olasılıksal ve dağıtık sistemler · 49 / 53

Consistent hashing ve dağıtım dengesi

Anla → iz sür → uygula → gerekçelendir

2 dk okuma · uygulama için ayrıca zaman ayır

Modulo routing h(key)%N basittir, fakat N değişince anahtarların büyük bölümü başka sunucuya gider. Consistent hashing sunucu/token ve anahtarları aynı hash halkasında konumlandırır; anahtar saat yönündeki ilk token'a atanır. Bir node eklenince yalnız ilgili aralıklar taşınır. Virtual nodes dağılımı ve ağırlıklandırmayı iyileştirir, gerçek hot-key yükünü otomatik çözmez.

Rendezvous hashing her key-node çiftine skor verir, en yüksek skorlu node'u seçer. Üye ekleme eski dağıtımda yalnız yeni node'un kazandığı key'leri taşır. Score seed'i bütün katılımcılarda aynı olmalı; dil runtime hash'i process başına değişiyorsa routing için uygun değildir. Stable, belgelenmiş hash kullan.

Placement, replication consistency değildir. Replication factor, failure domain, membership değişimi, veri taşıma, tombstone, read repair ve quorum ayrı tasarlanır. Ring node sayısı dengeli görünse de anahtar popülerliği eşit değildir. Consistent hashing bütün load balancer'ların zorunlu kalbi değildir; farklı routing politikaları vardır.

Adım adım iz sürme

A,B,C üyelerine D eklendiğinde rendezvous ile değişen key'ler D'ye gider; A'dan B'ye gereksiz taşıma olmaz.

Maliyet ve varsayımlar

Rendezvous düz model O(N) skor/sorgu; ring binary search O(log T), T token sayısı.

Çalıştırılabilir örnek

Python 3 ile çalıştır. Assert küçük bir örneği denetler; genel doğruluk ispatı değildir. Bazı ileri örnekler özellikle küçük model veya referans oracle'dır; tam üretim uygulaması değildir.

Python 3
import hashlib
def route(key,nodes):
    return max(nodes,key=lambda node:hashlib.sha256((key+":"+node).encode()).digest())
for i in range(100):
    key=str(i); old=route(key,["A","B","C"]); new=route(key,["A","B","C","D"])
    assert old==new or new=="D"

KAVRADIĞINI KONTROL ET

Sıra sende

Tüm server'lar aynı key için farklı seed kullanırsa ne olur?

Çözümün mantığını göster

Routing anlaşmazlığı ve yanlış sahiplik oluşur. Seed ve üyelik sürümü protokolün parçasıdır.

Bir adım ileri

  1. Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
  2. Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
  3. Belirtilen modelde maliyeti çıkar; farklı girdi büyüklüklerini ölç ve farkları gerekçelendir.

Temel kaynaklar ve ders notları

Bu eğitimde özgün anlatım kullanıldı; aşağıdaki kaynaklar ispatlar ve ileri okumalar sunar. Bağlantılar daha geniş ders modülünü kapsayabilir.

MIT 6.046J · Design and Analysis ↗
İlerlemeden önce alıştırmayı çöz.