Dağıtılmış Karma Tablosunun (DHT) basit temel açıklaması


177

Herhangi biri bir DHT'nin nasıl çalıştığı hakkında bir açıklama yapabilir mi?

Çok ağır bir şey yok, sadece temeller.

Yanıtlar:


237

Tamam, temelde oldukça basit bir fikir. Bir DHT size sözlük benzeri bir arayüz sağlar, ancak düğümler ağ üzerinde dağıtılır. DHT'lerle ilgili hile, belirli bir anahtarı saklamak için kullanılan düğümün, bu anahtarı çektirerek bulunmasıdır, bu nedenle aslında karma tablo kovalarınız artık bir ağdaki bağımsız düğümlerdir.

Bu, çok fazla hataya dayanıklılık ve güvenilirlik ve muhtemelen bazı performans faydaları sağlar, ancak aynı zamanda çok fazla baş ağrısına neden olur. Örneğin, bir düğüm ağdan ayrılırsa veya başarısız olursa ne olur? Yükün kabaca dengelenmesi için bir düğüm birleştiğinde anahtarları nasıl yeniden dağıtabilirsiniz. Düşünmeye gel, nasıl olsa eşit şekilde anahtarları dağıtmak? Ve bir düğüm birleştiğinde, her şeyi yeniden şekillendirmekten nasıl kaçınırsınız? (Kova sayısını artırırsanız, bunu normal bir karma tabloda yapmanız gerektiğini unutmayın).

Bu sorunlardan bazılarını ele alan örnek bir DHT, her biri anahtar alanının 1 / n'sinden sorumlu olan mantıksal bir düğüm halkasıdır. Ağa bir düğüm eklediğinizde, halkada diğer iki düğüm arasında oturacak bir yer bulur ve kardeş düğümlerindeki bazı anahtarların sorumluluğunu üstlenir. Bu yaklaşımın güzelliği, halkadaki diğer düğümlerin hiçbirinin etkilenmemesidir; yalnızca iki kardeş düğümün anahtarları yeniden dağıtması gerekir.

Örneğin, üç düğüm halkasında birinci düğüm 0-10, ikinci 11-20 ve üçüncü 21-30 tuşlarına sahiptir. Dördüncü bir düğüm gelir ve 3 ve 0 düğümleri arasına yerleştirirse (hatırlayın, bir halkada olduklarını), 3'ün anahtar alanının yarısını söylemek için sorumluluk alabilir, bu yüzden şimdi 26-30 ve düğüm 3 anlaşmaları 21 ile ilgileniyor -25.

Bunun üzerinde, bir anahtarın depolanacağı doğru düğümü bulmak için içerik tabanlı yönlendirme kullanan başka birçok bindirme yapısı vardır. Bir ringde bir anahtarın bulunması, ringin her seferinde bir düğümün aranmasını gerektirir (O ​​(n) -hop yönlendirme olan O (n) -top yönlendirmesi olan yerel bir arama tablosunu tutmuyorsanız, DHT'de binlerce düğümde sorunlu değilseniz. Artırılmış halkalar da dahil olmak üzere diğer yapılar O (log n) -top yönlendirmesini garanti eder ve bazıları daha fazla bakım pahasına O (1) -hop yönlendirmesini talep eder.

Vikipedi sayfasını okuyun ve gerçekten biraz derinlemesine bilmek istiyorsanız, oldukça kapsamlı bir okuma listesine sahip olan Harvard'daki bu ders sayfasına göz atın.


23
+1 İyi cevap. Üçüncü paragrafta ne demek istediğinizi ("Bu sorunların bazılarını ele alan örnek bir DHT, düğümlerin mantıksal bir halkasıdır") Tutarlı Karma. Facebook tarafından oluşturulan Dağıtılmış bir veritabanı olan Apache Cassandra'da kullanılan gerçekten ilginç bir konu. Bildiri bağlantısı (okumaya değer): cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf
santiagobasulto


Anahtar / değer çiftinin bir düğümde nasıl saklandığını ayrıntılı olarak açıklayabilir misiniz? Bir tür karma tablo veya DB olacak mı ?.
Wand Maker

@HenryR, "Düğüm halkası" sadece bir ağaç yapısı değil mi?
Pacerier

Illinois Üniversitesi, daha fazla okuma materyali istiyorsa, her dönem dağıtılmış sistem sınıfının bir parçası olarak akor protokolünü öğretir - courses.engr.illinois.edu/ece428/sp2018/lectures.html
Siddhartha

11

DHT'ler, kullanıcıya normal bir hashtable ile aynı türde bir arayüz sağlar (anahtarla bir değer arayın), ancak veriler isteğe bağlı sayıda bağlı düğüm üzerinden dağıtılır. Vikipedi iyi bir temel girişe sahiptir, daha fazla yazarsam özür dilerim.

http://en.wikipedia.org/wiki/Distributed_hash_table


7

Ben tutarlı bir karma hakkında sadece bir fikir vardı HenryR yararlı yanıta eklemek istiyorum. Normal / saf bir karma arama, biri kova sayısı olan iki değişkenin bir fonksiyonudur. Tutarlı karma işleminin güzelliği, "n" kova sayısını denklemden çıkarmamızdır.

Saf karma işleminde, ilk değişken tabloda saklanacak nesnenin anahtarıdır. "X" anahtarını arayacağız. İkinci değişken, kova sayısıdır, "n". Bu nedenle, nesnenin hangi kova / makinede saklandığını belirlemek için şunları hesaplamanız gerekir: karma (x) mod (n). Bu nedenle, bölüm sayısını değiştirdiğinizde, hemen hemen her nesnenin depolandığı adresi de değiştirirsiniz.

Bunu tutarlı karma ile karşılaştırın. "R" yi bir hash fonksiyonu aralığı olarak tanımlayalım. R sadece bir sabittir. Tutarlı karma işleminde, bir nesnenin adresi karma (x) / R konumunda bulunur. Aramamız artık kova sayısının bir işlevi olmadığından, kova sayısını değiştirdiğimizde daha az yeniden eşleme ile sonuçlanıyoruz.

http://michaelnielsen.org/blog/consistent-hashing/


1
Yine de mod atmanız gerekiyor, değil mi? Diyelim ki 3 sunucunuz var. hash(x)/R34500. verir Hala 34500% 3 yapmak gerekir .
Pacerier

Blog tablonuz net değil btw, eklenen ve kaldırılan satırlarla birlikte düğümlerin eklendiği ve kaldırıldığı çalışma örneğinin adım adım anlık görüntüsünü listelemelisiniz .
Pacerier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.