Özetle, ZooKeeper dağıtılmış uygulamalar oluşturmanıza yardımcı olur.
Nasıl çalışır
ZooKeeper'ı, nihai tutarlılığa sahip çoğaltılmış bir eşitleme hizmeti olarak tanımlayabilirsiniz. Kalıcı veri birden fazla düğüm arasında dağıtıldığından (bu düğüm grubuna "topluluk" adı verilir) ve bir istemci bunlardan herhangi birine (yani, belirli bir "sunucu") bağlandığından, bir düğüm başarısız olursa geçiş yapar; düğümlerin katı çoğunluğu çalıştığı sürece, ZooKeeper düğümleri topluluğu canlıdır. Özellikle, bir ana düğüm topluluk içindeki konsensüs tarafından dinamik olarak seçilir; ana düğüm başarısız olursa, ana rol başka bir düğüme taşınır.
Yazılar nasıl ele alınır?
Usta yazma yetkisidir: bu şekilde yazmaların sırayla devam ettirilmesi garanti edilebilir, yani yazmalar doğrusaldır . Bir istemci topluluğa her yazışında, düğümlerin çoğunluğu bilgileri saklar: bu düğümler istemcinin sunucusunu ve tabii ki ustayı içerir. Bu, her yazma işleminin sunucuyu master ile güncel hale getirdiği anlamına gelir. Ancak aynı zamanda eşzamanlı yazma işlemlerine sahip olamayacağınız anlamına gelir.
Doğrusal yazma garantisi, ZooKeeper'ın yazma baskın iş yükleri için iyi performans göstermemesinin nedenidir. Özellikle, medya gibi büyük verilerin değişimi için kullanılmamalıdır. İletişiminiz paylaşılan veriler içerdiği sürece ZooKeeper size yardımcı olur. Veriler eşzamanlı olarak yazılabildiğinde, ZooKeeper aslında yoluna girer, çünkü yazarlar açısından kesinlikle gerekli olmasa bile sıkı bir işlem sırası uygular. İdeal kullanımı, mesajların müşteriler arasında paylaşıldığı koordinasyon içindir.
Okumalar nasıl ele alınır?
ZooKeeper burada mükemmeldir: istemcinin bağlandığı belirli bir sunucu tarafından sunulduğu için okumalar eşzamanlıdır. Bununla birlikte, nihai tutarlılığın nedeni de budur: Ana istemci ilgili sunucuyu sınırlı ancak tanımsız bir gecikmeyle güncellediğinden, istemcinin "görünümü" eski olabilir.
Detayda
ZooKeeper'ın çoğaltılmış veritabanı, kabaca dosya sistemi düğümlerini temsil eden varlıklar olan bir znodes ağacı içerir (bunları dizin olarak düşünün). Her znode veri depolayan bir bayt dizisi ile zenginleştirilebilir. Ayrıca, her znode altında pratik olarak bir iç dizin sistemi oluşturan başka zodlar olabilir.
Sıralı zodlar
İlginç bir şekilde, bir zodun adı sıralı olabilir , yani istemcinin znode oluştururken sağladığı ad sadece bir önektir: tam ad aynı zamanda topluluk tarafından seçilen bir sıralı numara tarafından verilir. Bu, örneğin senkronizasyon amaçları için kullanışlıdır: birden fazla istemci bir kaynak üzerinde kilit almak isterse, her biri aynı anda bir konumda sıralı bir znode oluşturabilir: en düşük numarayı alan kişiye kilit hakkı verilir.
Geçici zodlar
Ayrıca, bir znode geçici olabilir : bu, onu oluşturan istemcinin bağlantısı kesilir kesilmez imha edildiği anlamına gelir. Bu esas olarak bir müşterinin ne zaman başarısız olduğunu bilmek için yararlıdır, bu da müşterinin kendisi yeni bir müşteri tarafından alınması gereken sorumluluklara sahip olduğunda önemli olabilir. Kilidin örneğini alarak, kilidi olan istemcinin bağlantısı kesilir kesilmez, diğer istemciler kilide hak kazanıp kazanmadıklarını kontrol edebilir.
Saatler
İstemci bağlantısının kesilmesine ilişkin örnek, zodların durumunu periyodik olarak yoklamamız gerektiğinde sorunlu olabilir. Neyse ki, ZooKeeper bir znode bir saatin ayarlanabileceği bir olay sistemi sunuyor . Bu saatler, znode özellikle değiştirilir veya kaldırılırsa veya altında yeni çocuklar oluşturulursa bir olayı tetikleyecek şekilde ayarlanabilir. Bu, zodlar için sıralı ve geçici seçeneklerle birlikte açıkça yararlıdır.
Nerede ve nasıl kullanılır?
Zookeeper kullanımının kanonik bir örneği, bazı verilerin istemci düğümleri arasında paylaşıldığı ve senkronizasyonu hesaba katmak için çok dikkatli bir şekilde erişilmesi / güncellenmesi gereken dağıtılmış bellek hesaplamasıdır.
ZooKeeper, eşitleme ilkelerinizi oluşturmak için kütüphaneyi sunarken, dağıtılmış bir sunucu çalıştırma yeteneği, merkezi (aracı benzeri) bir ileti deposu kullanırken karşılaştığınız tek hata noktası sorununu önler.
ZooKeeper özellik-hafiftir, yani lider seçimi, kilitler, bariyerler vb. Mekanizmalar zaten mevcut değildir, ancak ZooKeeper ilkellerinin üzerine yazılabilir. C / Java API'si amaçlarınız için çok kullanışsızsa, kafesler ve özellikle küratör gibi ZooKeeper üzerine kurulmuş kütüphanelere güvenmelisiniz .
Daha fazla bilgi nerede
Resmi belgelerin yanı sıra, oldukça iyi, Hadoop: Kesin Kılavuzun 14. Bölümü'nü okumanızı ve ~ 35 sayfanın esasen ZooKeeper'ın ne yaptığını açıklayan bir yapılandırma servisini izlemesini öneririm.