Apache ZooKeeper açıklaması


376

ZooKeeper'ı, nasıl çalıştığını ve ne yaptığını anlamaya çalışıyorum. ZooKeeper ile karşılaştırılabilir herhangi bir uygulama var mı?

Eğer biliyorsan, ZooKeeper'ı bir layman'a nasıl tarif edersin?

Apache wiki'yi denedim, zookeeper sourceforge ... ama hala onunla ilişki kuramıyorum.

Ben sadece http://zookeeper.sourceforge.net/index.sf.shtml aracılığıyla okudum , bu yüzden böyle daha fazla hizmet yok mu? Bir sunucu hizmetini çoğaltmak kadar basit mi?


6
Aradığınız yanıtla aynı değil, tam olarak aradığınız stackoverflow.com/questions/1479442/real-world-use-of-zookeeper
zengr


Bu makaleyi okuyabilirsiniz ZooKeeper: İnternet ölçeğinde sistemler için ücretsiz koordinasyon İki Yahoo! mühendisleri
yaphet

İşte RentTheRunway'in CTO'su olan Camille Fournier'in Apache ZooKeeper'ına giriş niteliğindeki bir teknoloji konuşması . Umarım faydalıdır.
Genadinik

@Luca Geretti ... Bana göre Zookeper, apis seti sağlıyor, böylece dağıtılmış uygulamayı koordine etmek için kullanabiliyoruz. yanlışım varsa düzelt.
user3797438

Yanıtlar:


434

Ö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.


2
Önerdiğiniz iletişim şemasını anladığımdan emin değilim, ancak bir üreticiden bilgileri "yayınlamak" ve birkaç tüketicinin okumasını sağlamak için ZooKeeper'ı kullanabilirsiniz. Öte yandan, her sunucu türünün yalnızca bir örneği varsa, ZK kullanmanın çok az yararı vardır.
Luca Geretti

57
IMO, ZooKeeper'ın bir meslekten olan kişiyi açıklayamıyor. Ne zaman ZooKeeper'a ihtiyacım olacak? Ne yazardım? Hangi sorunu çözüyor? Bir anahtar / değer deposu mu? Bir arama motoru? Dağıtılmış bir kilit? ZooKeeper'ı neden Redis veya bir dosya veya JIRA veya post-it notlarının üzerine seçeyim? ZooKeeper hakkında çok şey biliyorsunuz - ama daha az teknik olarak açıklayabilir misiniz?
Dan Passaro

1
Zookeeper'ın doğrusal yazımları olduğu için, düğüm oluşturmak ve geri aramada yanıt almak için Eşzamansız API'ları kullanmama engel olmuyor mu? Dahili olarak eşzamanlı yazmalara izin vermese de, bir şey mi kaçırıyorum?
jdk2588

1
"İstemcinin topluluğa her yazışında, düğümlerin çoğunluğu bilgileri saklar: bu düğümler istemcinin sunucusunu ve tabii ki ustayı içerir" => lütfen beni bir dokümana yönlendirebilir misiniz? ya da bunun açıklandığı bir şey mi? İstemcinin bağlı olduğu sunucu dışında bir durum değişikliğinin başarılı bir şekilde yapılıp yapılmadığını merak ediyorum (bu durumda, istemci kendi yazısını bir an için okuyamama garip davranışı yaşayabilir)
senseiwu

2
Sorulan soruya tamamen ve tamamen antitetiktir. Eğer bir saat olsaydı, “zaman tutma cihazı” nı aralarında, yaylanma, tekerlek treni, kaçış ve salınım dönemine, atalet momentine ve yapay safir kristallerin etkisine dayanan etkileşimlerinin bir tanımını aramayacaktı.
Rick O'Shea

10

Zookeeper, dağıtılmış işlemleri güvenilir bir şekilde koordine etmeye yardımcı olan en iyi açık kaynaklı sunucu ve hizmetlerden biridir. Zookeeper, Tutarlılık ve Bölüm toleransı sağlayan bir CP sistemidir (Bakınız CAP Teoremi). Zookeeper durumunun tüm düğümlerde çoğaltılması, onu sonunda tutarlı bir dağıtılmış hizmet haline getirir.

Ayrıca, yeni seçilen herhangi bir lider, takipçilerinin eksik önerileri varsa takipçilerini eksik tekliflerle veya devletin anlık görüntüsü ile güncelleyecektir.

Zookeeper ayrıca kullanımı çok kolay bir API sağlar. Örnek arıyorsanız , Zookeeper Java API örnekleri olan bu blog gönderisinde bazı örnekler vardır.

Peki bunu nerede kullanıyoruz? Dağıtılmış hizmetinizin merkezi, güvenilir ve tutarlı bir yapılandırma yönetimine, kilitlere, kuyruklara vb. İhtiyacı varsa, Zookeeper'ı güvenilir bir seçim olarak göreceksiniz.


4
"Zookeeper Tutarlılık ve Bölme toleransı sağlayan bir CP sistemidir (Bkz. CAP Teoremi)", bence Zookeeper ustası ve takipçileri var, master kapandığında, takipçilerden biri Lider olarak seçilecek, bu yüzden Zookeeper AP, ancak C eninde sonunda tutarlı.
YuFeng Shen

5
CAP teoremi açısından, "C" aslında doğrusallaştırılabilirlik anlamına gelir. ZooKeeper aslında "sıralı tutarlılık" sağlar ve istemcilerin güncellemelerinin alındıkları sırayla uygulanacağı anlamına gelir .. Bu doğrusallaştırılabilirlikten daha zayıftır, ancak yine de çok güçlüdür, "nihai tutarlılıktan" çok daha güçlüdür. Zookeeper A değil ve bunun nedeni lider seçilemezse (çoğunluk yok) zookeeper istekleri başarısız olur. Bu yüzden yüksek oranda mevcut değildir.
Binu George

7

Genel olarak ZooKeeper'ı anlıyorum ama "çekirdek" ve "bölünmüş beyin" terimleriyle ilgili problemler yaşadım, bu yüzden belki de bulgularımı sizinle paylaşabilirim (kendimi de bir layman olarak görüyorum).

Diyelim ki 5 sunucudan oluşan bir ZooKeeper kümemiz var. Sunuculardan biri lider, diğerleri sunucu olacak.

  • Bu 5 sunucu bir çekirdek oluşturur. Çekirdek sadece "bu sunucular kimin lider olması gerektiğine oy verebilir" anlamına gelir.

  • Bu yüzden oylama çoğunluğa dayanıyor. Çoğunluk basitçe "yarıdan fazlası" anlamına gelir, bu nedenle sunucu sayısının yarısından fazlası belirli bir sunucunun lider olmasını kabul etmelidir.

  • Yani "bölünmüş beyin" diye adlandırılabilecek bu kötü şey var. Anladığım kadarıyla bölünmüş bir beyin budur: 5 sunuculu küme iki parçaya ayrılıyor ya da "sunucu takımları" diyelim, belki bir kısmı 2 ve diğer 3 sunucuyla. Bu her iki "sunucu takımı" belirli bir sipariş yürütmek zorunda gibi hangi takımın tercih edilmesi gerektiğine nasıl karar verirsiniz? Müşterilerden farklı bilgiler almış olabilirler. Bu nedenle, hangi "sunucu ekibinin" hala alakalı olduğunu ve hangisinin göz ardı edilebileceğini / ihmal edileceğini bilmek gerçekten önemlidir.

  • Çoğunluk aynı zamanda tek sayıda sunucu kullanmanızın nedenidir. Eğer 4 sunucunuz ve 2 sunucunun birbirinden ayrıldığı bir beyniniz varsa, her iki "sunucu takımı" "hey, kimin lider olduğuna karar vermek isteriz!" ancak hangi 2 sunucuyu seçmeniz gerektiğine nasıl karar vermelisiniz? 5 sunucuyla basit: 3 sunuculu sunucu ekibi çoğunluğa sahiptir ve yeni lideri seçmesine izin verilir.

  • Sadece 3 sunucunuz varsa ve bunlardan biri başarısız olsa bile diğer ikisi hala çoğunluğu oluşturur ve bunlardan birinin yeni lider olacağını kabul edebilir.

Bir süre düşündüğünüzde ve artık o kadar da karmaşık olmayan terimleri anladığımda anlıyorum. Umarım bu da herkesin bu terimleri anlamasına yardımcı olur.


1

Zookeeper, yapılandırma bilgilerinin korunması ve yönetilmesi, adlandırma kuralları ve dağıtılmış küme ortamı için eşitleme için merkezi bir açık kaynaklı sunucudur. Zookeeper, düşük gecikme süresi ve yüksek kullanılabilirlik sağlayarak dağıtılmış sistemlerin yönetim karmaşıklıklarını azaltmasına yardımcı olur. Zookeeper başlangıçta Hadoop için bir alt projeydi, ancak şimdi Apache Software Foundation'ın üst düzey bağımsız bir projesidir.

Daha fazla bilgi


2
Hayvanat bahçesinin merkezileştirildiğini söyleyen nedir? Hayvan bekçisi dağıtılabilir ve çalıştırılmalıdır.
Benjamin Hammer Nørgaard

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.