Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Genel bakış ve mimari
içindeki Orleans grain dizini, anahtarın bir tanecik tanımlayıcısı olduğu bir anahtar-değer deposudur ve değer de tahılı barındıran etkin siloya işaret eden bir kayıt girişidir.
Orleans, bu makalede açıklandığı gibi, varsayılan bir bellek içi dağıtılmış dizin uygulaması sağlarken, grain dizin sistemi takılabilir olacak şekilde tasarlanmıştır. Kendi dizininizi, IGrainDirectory arabirimi uygulayarak ve bunu silonun hizmet koleksiyonuna kaydederek gerçekleştirebilirsiniz. Bu, belirli uygulama gereksinimlerine daha iyi uyacak şekilde farklı depolama arka uçları veya tutarlılık modelleri kullanabilen özel dizin uygulamalarına olanak tanır. Yeni güçlü tutarlılık dizini kullanıma sunulduğundan, dış dizin uygulamalarına daha az ihtiyaç vardır, ancak API geriye dönük uyumluluk ve esneklik için kalır. Hububat dizinini her bir tanecik türü temelinde yapılandırabilirsiniz.
Performansı iyileştirmek için dizin Orleans aramalarını her silo içinde yerel olarak önbelleğe alır. Bu, uzak dizin okumalarının yalnızca yerel önbellek girdisi eksik veya geçersiz olduğunda gerekli olduğu anlamına gelir. Bu önbelleğe alma mekanizması, ayrıntılı konum aramalarıyla ilişkili ağ ek yükünü ve gecikme süresini azaltır.
başlangıçta, Orleans dağıtılmış karma tablo olarak yapılandırılmış nihai tutarlı bir dizin uyguladı. Bu, v9.0'da iki aşamalı Orleansne dayanan tutarlılığı yüksek bir dizin ile değiştirildi. Ayrıca dağıtılmış karma tablo olarak yapılandırılmıştır ancak sanal düğümler aracılığıyla iyileştirilmiş yük dengeleme sunar. Bu makalede, daha yeni tahıl dizini uygulaması açıklanmaktadır.
Dağıtılmış tahıl dizini
Orleans'daki dağıtılmış tahıl dizini güçlü tutarlılık, hatta yük dengeleme, yüksek performans ve hataya dayanıklılık sunar. Uygulama, Virtual Synchrony metodolojisini temel alan ve Vertical Paxosile benzerlikler içeren iki aşamalı bir tasarım izler.
Dizin bölümlerinin iki işlem modu vardır:
- Normal işlem: Bölümler istekleri diğer konaklarla koordinasyon olmadan yerel olarak işler.
- Değişikliği görüntüle: Sunucular, dizin aralıklarının sahipliğini aktarmak için birbirleriyle eşgüdümlü çalışırlar.
Dizin, "görünümler" olarak adlandırılan yapılandırmaların monoton olarak artan sürüm numaralarına sahip olduğu Orleansgüçlü tutarlılık kümesi üyelik sisteminden yararlanmaktadır. Silolar kümeye katılıp kümeden ayrılırken, ardışık görünümler oluşturulur ve bu da aralık sahipliğinde değişikliklere neden olur.
Tüm dizin işlemleri görünüm koordinasyonunu içerir:
- İstekler çağıranın görünüm numarasını taşır.
- Yanıtlar bölümleme görünüm numarasını içerir.
- Görünüm numaralarındaki uyuşmazlıklar eşitlemeyi tetikler.
- İstekler, görünüm değişikliklerini otomatik olarak yeniden dener.
Bu, dizin bölümünün doğru sahibinin tüm istekleri işlemesini sağlar.
Bölümleme stratejisi
Dizin, kümedeki etkin silolara atanmış aralıklarla tutarlı bir karma halka kullanılarak bölümlendirilir. Grana ait tanımlayıcılar, karmalarına karşılık gelen halkanın bölümüne sahip olan siloyu bulmak için karma değerleri olarak kullanılır.
Her etkin silo, varsayılan olarak silo başına 30 aralık olacak şekilde önceden yapılandırılmış bir aralık sayısına sahiptir. Bu, Amazon Dynamo ve Apache Cassandra tarafından kullanılan ve her fiziksel düğüm (konak) için birden çok "sanal düğümün" (aralık) oluşturulduğu şemaya benzer.
Bir bölümün boyutunun belirlenmesi, hash değeri ile bir sonraki bölümün hash değeri arasındaki mesafe tarafından belirlenir. Görünüm değişikliği sırasında bir aralığın birden çok silo arasında bölünmesi mümkündür. Her bölümün diğer birden çok bölümle eşgüdümlü olması gerektiğinden, bu durum görünüm değişikliği yordamına karmaşıklık katar.
Değişiklik yordamını görüntüleme
Dizin bölümleri (implementasyonu GrainDirectoryPartition'de olan), görünüm değişiklikleri sırasında aralıklara geçersiz erişimi önlemek için sürüm kontrollü aralık kilitlerini kullanır. Aralık kilitleri görünüm değişikliği sırasında oluşturulur ve görünüm değişikliği tamamlandığında bırakılır. Bu kilitler, Sanal Eşitleme metodolojisinde kullanılan 'takozlar' ile benzerdir.
Görünüm değişikliği gerçekleştiğinde, bölüm büyüyebilir veya küçülebilir:
- Kümeye yeni bir silo katılırsa, var olan bölümler yer açmak için küçülebilir.
- Bir silo kümeden ayrılırsa kalan bölümler yalnız bırakılmış aralıkları devralacak şekilde büyüyebilir.
İsteklerin karşılanması için dizin kayıtlarının eski sahipten yeni sahipe aktarılması gerekir. Aktarım işlemi şu adımları izler:
- Önceki sahip aralığı kapatır ve dizin girdilerinin anlık görüntüsünü oluşturur.
- Yeni sahip anlık görüntüyü talep eder ve uygular.
- Yeni sahip, bu kapsamdaki talepleri karşılamaya başlar.
- Önceki sahipe bildirim gönderilir ve anlık görüntüyü siler.
Kurtarma işlemi
Bir konak, dizin bölümlerini düzgün bir şekilde teslim etmeden çöktüğünde, sonraki bölüm sahiplerinin kurtarma gerçekleştirmesi gerekir. Bu şunları içerir:
- Kümedeki tüm etkin siloların tanecik kayıtlarını sorgulama.
- Etkilenen aralıklar için dizin durumunu yeniden oluşturma.
- Yinelenen taneli etkinleştirmelerin gerçekleşmemesini sağlama.
Küme üyeliği hızla değiştiğinde kurtarma da gereklidir. Küme üyeliği monotonluğu garantilese de siloların ara üyelik görünümlerini kaçırması mümkündür. Bu gibi durumlarda:
- Anlık görüntü aktarımları bırakılır.
- Kurtarma işlemi, normal bölümden bölüme geçiş yerine gerçekleştirilir.
- Sistem eksik ara durumlara rağmen tutarlılığı korur.
Gelecekteki bir küme üyeliği geliştirmesi, tüm siloların tüm görünümleri görmesini sağlayarak bu senaryoları azaltabilir veya ortadan kaldırabilir.