Tutarlı hashing - Consistent hashing - Wikipedia

İçinde bilgisayar Bilimi, tutarlı hashing[1][2] özel bir tür hashing öyle ki ne zaman bir karma tablo yeniden boyutlandırıldı, yalnızca anahtarların ortalama olarak nerede yeniden eşlenmesi gerekir anahtarların sayısı ve yuvaların sayısıdır. Buna karşılık, çoğu geleneksel karma tablosunda, dizi yuvalarının sayısındaki bir değişiklik, neredeyse tüm anahtarların yeniden eşlenmesine neden olur çünkü anahtarlar ve yuvalar arasındaki eşleme, bir modüler operasyon. Tutarlı hashing özel bir durumdur randevulu karma, kavramsal olarak daha basit bir algoritmaya sahip olan ve ilk olarak 1996 yılında tanımlanmıştır. Tutarlı hashing ilk olarak 1997'de ortaya çıkmıştır ve farklı bir algoritma kullanır.[1]

Tarih

"Tutarlı hashing" terimi, David Karger et al. -de MIT dağıtılmış önbelleğe almada kullanım için. 1997 tarihli bu akademik makale, istekleri değişen web sunucuları popülasyonu arasında dağıtmanın bir yolu olarak "tutarlı hashing" terimini tanıttı. Her yuva daha sonra dağıtılmış bir sistemde bir sunucu tarafından temsil edilir. Bir sunucunun eklenmesi ve sunucunun kaldırılması (örneğin, başarısızlık nedeniyle) yalnızca yuva sayısı (yani sunucular) değiştiğinde yeniden karıştırılacak öğeler. Yazarlar bahsediyor doğrusal hashing ve sıralı sunucu ekleme ve kaldırmayı yönetme yeteneği, tutarlı hashing ise sunucuların rastgele sırayla eklenip kaldırılmasına olanak tanır.[1]

Teradata Bu tekniği 1986'da piyasaya sürülen dağıtık veritabanlarında kullandılar, ancak bu terimi kullanmadılar. Teradata hala bir karma tablo tam olarak bu amacı gerçekleştirmek için. Akamai Teknolojileri 1998 yılında bilim adamları tarafından kuruldu Daniel Lewin ve F. Thomson Leighton ("tutarlı hashing" oluşturan makalenin ortak yazarları). Akamai'nin içerik dağıtım ağında,[3] tutarlı hashing, bir sunucu kümesi içindeki yükü dengelemek için kullanılır, bir süre istikrarlı evlilik algoritması, kümeler arasında yükü dengelemek için kullanılır.[2]

Tutarlı hashing, büyük web uygulamalarında kısmi sistem arızalarının etkisini azaltmak için de, sistem genelinde bir arızaya neden olmadan sağlam önbelleğe alma sağlamak için kullanılmıştır.[4] Tutarlı hashing, aynı zamanda dağıtılmış karma tablolar (DHT'ler), bir anahtar alanını dağıtılmış bir düğüm kümesi arasında bölmek için karma değerleri kullanır, ardından anahtarla verimli düğüm erişimi sağlayan bağlı düğümlerden oluşan bir üst üste binme ağı oluşturur. Rendezvous hashing 1996 yılında tasarlanan, daha basit ve daha genel bir tekniktir. Çok farklı en yüksek rastgele ağırlık (HRW) algoritmasını kullanarak tutarlı hashing hedeflerine ulaşır.

Temel Teknik

Sorununu düşünün yük dengeleme Bir dizi nesnenin (örneğin, web sayfaları veya video segmentleri) bir dizi sunucular. Nesneleri eşit olarak dağıtmanın bir yolu sunucular standart bir hash işlevi kullanmak ve nesneyi yerleştirmektir kimliğiyle sunucuda Ancak, bir sunucu eklenir veya kaldırılırsa (ör. değişiklikler), sistemdeki hemen hemen her nesnenin sunucu ataması değişebilir. Bu sorunludur çünkü sunucular genellikle yukarı veya aşağı hareket eder ve bu tür her olay neredeyse tüm nesnelerin yeniden atanmasını ve yeni sunuculara taşınmasını gerektirir.

Tutarlı hashing ilk olarak hem nesneleri hem de sunucuları birim çemberle eşler. Daha sonra bir nesne, saat yönünde sırayla daire üzerinde görünen bir sonraki sunucuya eşlenir.[2]

Tutarlı hashing, bir sunucu eklendiğinde veya kaldırıldığında her nesnenin sunucu atamasını değiştirme sorununu ortadan kaldırmak için tasarlanmıştır. Ana fikir, hem nesneleri hem de sunucuları bir birim çembere rastgele eşlemek için bir karma işlevi kullanmaktır. Her nesne daha sonra daire üzerinde saat yönünde görünen bir sonraki sunucuya atanır. Bu, nesnelerin sunuculara eşit bir şekilde dağıtılmasını sağlar. Ancak daha da önemlisi, bir sunucu başarısız olursa ve çemberden çıkarılırsa, yalnızca arızalı sunucuya eşlenen nesnelerin saat yönünde sırayla sonraki sunucuya yeniden atanması gerekir. Benzer şekilde, yeni bir sunucu eklenirse, birim daireye eklenir ve yalnızca o sunucuya eşlenen nesnelerin yeniden atanması gerekir. Daha da önemlisi, bir sunucu eklendiğinde veya kaldırıldığında, nesnelerin büyük çoğunluğu önceki sunucu atamalarını korur.

Pratik Uzantılar

Pratikte yük dengeleme için tutarlı karmanın etkili bir şekilde kullanılması için temel teknikte bir dizi uzantıya ihtiyaç vardır.[2] Yukarıdaki temel şemada, bir sunucu arızalanırsa, tüm nesneleri saat yönünde bir sonraki sunucuya yeniden atanır ve bu, bu sunucunun yükünü potansiyel olarak iki katına çıkarır. Bu arzu edilmeyebilir. Sunucu arızasında nesnelerin daha eşit bir şekilde yeniden dağıtılmasını sağlamak için, her sunucu birim çember üzerinde birden çok konuma hashinglenebilir.[2] Bir sunucu başarısız olduğunda, birim çemberdeki kopyalarının her birine atanan nesneler, saat yönünde farklı bir sunucuya yeniden atanacak ve böylece nesneleri daha eşit bir şekilde yeniden dağıtacaktır. Başka bir uzantı, flaş kalabalık tek bir nesnenin "ısındığı" ve çok sayıda erişildiği ve birden çok sunucuda barındırılması gerekeceği durum. Bu durumda, nesne, birim daireyi saat yönünde sırayla geçerek birden çok bitişik sunucuya atanabilir.[2] Daha karmaşık bir pratik düşünce, birim çemberde birbirine yakın olan ve her ikisi de aynı anda "ısındığında" iki nesne ortaya çıkar. Bu durumda, her iki nesne de birim çemberdeki aynı bitişik sunucu kümesini kullanacaktır. Bu durum, sunucuları birim çembere eşlemek için her nesnenin farklı bir hash işlevi seçmesiyle iyileştirilebilir.[2]

Rendezvous Hashing ve diğer alternatiflerle karşılaştırma

Rendezvous hashing 1996 yılında tasarlanan, daha basit ve daha genel bir tekniktir ve bir dizi olası bir dizi içinden seçenekler seçenekler. Aslında gösterilebilir bu tutarlı hashing özel bir randevu hashing vakasıdır. Basitliği ve genelliği nedeniyle, artık birçok uygulamada Tutarlı Karma yerine Rendezvous Hashing kullanılmaktadır.

Anahtar değerler her zaman artacaksa tekdüze olarak kullanarak alternatif bir yaklaşım tek tonlu anahtarlarla karma tablo tutarlı hashingden daha uygun olabilir.[kaynak belirtilmeli ]

Karmaşıklık

Asimptotik zaman karmaşıklıkları için düğümler (veya yuvalar) ve anahtarlar
Klasik hash tablosuTutarlı hashing
bir düğüm ekle
bir düğümü kaldır
bir anahtar ekle
anahtarı çıkarmak

anahtarların yeniden dağıtımının ortalama maliyetidir ve tutarlı hashing için karmaşıklık, bir Ikili arama Halkada bir sonraki düğümü bulmak için düğümler arasındaki açılara ihtiyaç vardır.[kaynak belirtilmeli ]

Örnekler

Tutarlı hash kullanımının bilinen örnekleri şunları içerir:

Referanslar

  1. ^ a b c Karger, D .; Lehman, E .; Leighton, T.; Panigrahy, R .; Levine, M .; Lewin, D. (1997). Tutarlı Karma ve Rastgele Ağaçlar: World Wide Web'de Sıcak Noktaları Gidermek için Dağıtılmış Önbelleğe Alma Protokolleri. Yirmi dokuzuncu Yıllık ACM Bildirileri Bilgisayar Teorisi Sempozyumu. ACM Press New York, NY, ABD. s. 654–663. doi:10.1145/258533.258660.
  2. ^ a b c d e f g Bruce Maggs ve Ramesh Sitaraman (2015). "İçerik dağıtımında algoritmik külçeler" (PDF). ACM SIGCOMM Bilgisayar İletişim İncelemesi. 45 (3).
  3. ^ Nygren., E .; Sitaraman R. K .; Güneş, J. (2010). "Akamai Ağı: Yüksek Performanslı İnternet Uygulamaları için Bir Platform" (PDF). ACM SIGOPS İşletim Sistemleri İncelemesi. 44 (3): 2–19. doi:10.1145/1842733.1842736. S2CID  207181702. Arşivlendi (PDF) 13 Eylül 2012'deki orjinalinden. Alındı 19 Kasım 2012.
  4. ^ Karger, D .; Sherman, A .; Berkheimer, A .; Bogstad, B .; Dhanidina, R .; Iwamoto, K .; Kim, B .; Matkins, L .; Yerushalmi, Y. (1999). "Tutarlı Karma ile Web Önbelleğe Alma". Bilgisayar ağları. 31 (11): 1203–1213. doi:10.1016 / S1389-1286 (99) 00055-9. Arşivlenen orijinal 2008-07-21 tarihinde. Alındı 2008-02-05.
  5. ^ "Membase Tam Olarak Nedir?". Alındı 2020-10-29.
  6. ^ Holt, Greg (Şubat 2011). "Tutarlı Bir Karma Halkası Oluşturma". openstack.org. Alındı 2019-11-17.
  7. ^ DeCandia, G .; Hastorun, D .; Jampani, M .; Kakulapati, G .; Lakshman, A .; Pilchin, A .; Sivasubramanyan, S .; Vosshall, P .; Vogels, Werner (2007). "Dynamo: Amazon'un Yüksek Erişilebilir Anahtar-Değer Mağazası" (PDF). 21. ACM İşletim Sistemleri İlkeleri Sempozyumu Bildirileri. 41 (6): 205–220. doi:10.1145/1323293.1294281. Alındı 2018-06-07.
  8. ^ Lakshman, Avinash; Malik, Prashant (2010). "Cassandra: merkezi olmayan yapılandırılmış bir depolama sistemi". ACM SIGOPS İşletim Sistemleri İncelemesi. 44 (2): 35–40. doi:10.1145/1773912.1773922.
  9. ^ "Tasarım - Voldemort". www.project-voldemort.com/. Arşivlenen orijinal 9 Şubat 2015. Alındı 9 Şubat 2015. Tutarlı hashing, bu sorunları ortadan kaldıran bir tekniktir ve bunu küme üzerindeki her bir anahtarın konumunu hesaplamak için kullanırız.
  10. ^ "Akka Yönlendirme". akka.io. Alındı 2019-11-16.
  11. ^ "Riak Kavramları". Arşivlenen orijinal 2015-09-19 tarihinde. Alındı 2016-12-06.
  12. ^ "GlusterFS Algoritmaları: Dağıtım". gluster.org. 2012-03-01. Alındı 2019-11-16.
  13. ^ Roughgarden, Tim; Valiant Gregory (2016-03-28). "Modern Algoritmik Araç Kutusu" (PDF). stanford.edu. Alındı 2019-11-17.
  14. ^ Vishnevskiy, Stanislav (2017-07-06). "Discord İksiri 5.000.000 Eşzamanlı Kullanıcıya Nasıl Ölçeklendirdi". Alındı 2019-11-17.
  15. ^ Eisenbud, Daniel E .; Yi, Cheng; Contavalli, Carlo; Smith, Cody; Kononov, Roman; Mann-Hielscher, Eric; Çilingiroğlu, Ardaş; Cheyney, Bin; Shang, Wentao; Hosein, Jinnah Dylan. "Maglev: Hızlı ve Güvenilir Bir Yazılım Ağ Yük Dengeleyicisi" (PDF). Alındı 2019-11-17.

Dış bağlantılar