Zookeeper, Dubbo, Hadoop, Kafka, vb. Gibi birçok çerçevede uygulamalara sahiptir, ancak birkaç tipik kullanım vardır. Bu tür kullanımlarda ustalaştıktan sonra, ilgili çerçevelerde zookeeper uygulamasına bakmak kolaydır. Sonraki makale Makale, daha derin bir anlayışa sahip olmak için zookeeper'ın dubbo'da kullanımını ayrıntılı olarak tanıtacaktır.
Zookeeper'ın veri modeli, dosya sistemine benzerdir. Her bir düğüm, zookeeper'daki en küçük veri birimi olan znode olarak adlandırılır. Her znode, verileri rapor edebilir ve hiyerarşik bir öznitelik yapısı oluşturmak için alt düğümleri bağlayabilir.
Aşağıdaki dört tür düğümü oluşturabilirsiniz (znode)
Kalıcı düğüm: Düğüm oluşturulduktan sonra, aktif olarak silinene kadar her zaman zookeeper sunucusunda bulunacaktır.
Kalıcı sıra düğümü: her düğüm, birinci düzey alt düğümleri için bir sırayı korur
Geçici düğüm: Geçici bir düğümün yaşam döngüsü, istemcinin oturumuyla tutarlıdır. İstemci oturumu başarısız olduğunda, düğüm otomatik olarak temizlenir
Geçici sıra düğümü: geçici düğüme ek bir sıra özelliği eklenir
Yaygın olarak kullanılan komutları kısaca gösterin
yol verisi acl oluştur-s: sıralı düğümler oluşturun -e: geçici düğümler oluşturun yol: yol verileri: veri acl: izinler
Oluştur, varsayılan olarak kalıcı düğümler oluşturur
oluştur / seviye-1123 oluştur / seviye-1 / seviye-1-2456 get / level-1 (düğüm seviyesi-1, çıktı 123'ün değerini alın) ls / seviye-1 (Seviye-1 düğümünün alt düğümlerini alın, çıktı) // Bir sıra düğümü oluşturun oluştur -s / düğümler 123 (aslında düğümler0000000003) oluştur -s / düğümler 456 (aslında düğümler0000000004)Yukarıdaki komutu uyguladıktan sonra veri yapısı aşağıdaki gibidir
Sıralı düğümlerin özellikleri hakkında kısa bir konuşma. Bir sıra düğümü her oluşturulduğunda, zk otomatik olarak yoldan sonra 10 basamaklı bir sayı (sayaç) ekler, örneğin < yol > 0000000001, < yol > 0000000002, ...... Bu sayacın aynı ebeveyn düğüm altında benzersiz olması garanti edilebilir. Zk içinde, bu sayacı temsil etmek için 4 baytlık işaretli bir tamsayı kullanılır.Yani, sayacın boyutu 2147483647'yi aştığında taşma meydana gelir. Üst düğüm altında bir sıra düğümü her oluşturulduğunda, boyut 1 artar, Yukarıdaki resimde 3 ila 4
Zookeeper, müşterinin sunucuya bir izleyici kaydetmesine olanak tanıyan dağıtılmış veri yayınlama / abonelik sağlar.Sunucudaki bazı belirli olaylar izleyiciyi tetiklediğinde, dağıtılmış bildirim işlevini gerçekleştirmek için belirtilen istemciye bir olay bildirimi gönderilir. .
Sadece birkaç izleyici etkinlik türü verin
Etkinlik tipi
Tetikleme koşulları
NodeCreated (düğüm oluşturma)
Watcher tarafından izlenen ilgili veri düğümü oluşturulur
NodeDeleted (düğüm silindi)
Watcher tarafından izlenen ilgili veri düğümü silinir
NodeDataChanged (düğüm veri değişikliği)
Watcher tarafından izlenen ilgili veri düğümünün veri içeriği değişti
NodeChildrenChanged (alt düğüm değişikliği)
Watcher değişiklikleri tarafından izlenen ilgili veri düğümünün alt düğüm listesi
Temel bilgiler açıklandıktan sonra, hayvan bakıcısının rolü resmi olarak aşağıda paylaşılmıştır.
1. Veri yayınlama / abone olma
Veri yayınlama / abone olma (Yayınlama / Abone Olma) sistemi, sözde yapılandırma merkezi, Gu Ming, yayıncının, abonelerin verilere abone olmaları için verileri bir veya bir dizi zookeeper düğümünde yayınladığını ve böylece dinamik olarak veri elde etme amacına ulaştığını düşünüyor. , Yapılandırma bilgilerinin merkezi yönetimini ve verilerin dinamik güncellemesini elde etmek.
Zookeeper, bir yayınlama ve abone olma sistemini uygulamak için bir itme-çekme kombinasyonu kullanır: istemci, dikkat etmesi gereken düğümü sunucuya kaydeder.Düğümün verileri değiştiğinde, sunucu, karşılık gelen istemciye bir Watcher olay bildirimi gönderir ve müşteri bunu alır. Bu mesaj bildirildikten sonra, sunucudan en son verileri almak için inisiyatif almanız gerekir.
Programın her zaman yapılandırılması gerekir Program birden çok makineye dağıtılırsa, yapılandırmayı değiştirmek zorlaşır. Tamam, şimdi tüm bu yapılandırmaları zookeeper'a koyun, onları zookeeper'ın belirli bir dizin düğümüne kaydedin, ardından ilgili tüm uygulamalar bu dizin düğümünü izleyecektir.Yapılandırma bilgileri değiştiğinde, her uygulama zookeeper alacak Ve sonra zookeeper'dan yeni konfigürasyon bilgilerini alın ve sisteme uygulayın
2. Yük dengeleme
Her sunucu, başladığında zookeeper'ın sunucuları düğümü altında geçici bir düğüm kaydedecektir (geçici düğüm kaydedilir çünkü hizmet mevcut olmadığında, geçici düğüm kaybolur ve istemci bu sunucuyu talep etmez), her istemci Terminal başladığında, mevcut tüm çalışan sunucuların bir listesini almak için sunucular düğümüne gidecek ve isteğin belirli bir yük dengeleme algoritması aracılığıyla hangi sunucuya gönderilmesi gerektiğini hesaplayacaktır.
3. Dağıtılmış benzersiz bir kimlik oluşturun
Geçmişteki tek veritabanı tekli fenotip sisteminde, veritabanı alanının auto_increment özelliği, genellikle her kayıt için otomatik olarak benzersiz bir kimlik oluşturmak için kullanılabilir. Ancak alt veritabanı ve alt tablodan sonra, veritabanının auto_increment özniteliğine güvenerek bir kaydı benzersiz şekilde tanımlamak imkansızdır. Bu noktada, dağıtılmış bir ortamda küresel olarak benzersiz bir kimlik oluşturmak için zookeeper'ı kullanabiliriz. Yöntem şu şekildedir: her yeni bir Kimlik üretildiğinde, kalıcı bir sıra düğümü yaratıldığında, oluşturma işlemi tarafından döndürülen düğüm sıra numarası yeni Kimliktir ve sonra sizinkinden daha küçük düğüm silinebilir.
4. usta seçimi
Ana seçim, dağıtılmış sistemlerde çok yaygın bir uygulama senaryosudur. Dağıtılmış bir sistemde, Master genellikle sistemdeki diğer sistem birimlerini koordine etmek için kullanılır ve dağıtılmış sistemin durumundaki değişikliklere karar verme hakkına sahiptir. Örneğin, okuma ve yazmanın birbirinden ayrıldığı bazı uygulama senaryolarında, istemcinin yazma talebi genellikle Ana Bilgisayar tarafından işlenirken, diğer senaryolarda ise genellikle karmaşık mantığı işlemekten ve işleme sonuçlarını kümeyle senkronize etmekten Ana birim sorumludur. Diğer sistem birimleri. Ana seçim, zookeeper'ın en tipik uygulama senaryosu olduğu söylenebilir
Hayvan bakıcısının güçlü tutarlılığını kullanarak, dağıtılmış yüksek eşzamanlılık durumunda düğümlerin oluşturulmasının küresel benzersizliği garanti etmesini sağlayabilir, yani zookeeper, müşterinin tekrar tekrar mevcut bir veri düğümünü oluşturamamasını sağlar. Başka bir deyişle, birden fazla istemci aynı anda aynı düğümü oluşturma isteğinde bulunursa, sonunda yalnızca bir istemci başarıyla oluşturulabilir. Bu özelliği kullanarak, dağıtılmış bir ortamda Master seçimi yapmak kolaydır.
İstemci kümesi, zookeeper üzerinde / master geçici düğümü oluşturur. Bu süreçte, yalnızca bir istemci bu düğümü başarıyla oluşturabilir, ardından bu istemci yönetici olur. Aynı zamanda, zookeeper'da başarılı bir şekilde bir düğüm oluşturmayan diğer istemciler, mevcut ana makinenin canlı olup olmadığını izlemek için düğümde / yöneticide değiştirilmiş bir izleyici kaydedecekler. Mevcut ana makinenin çalışmadığı tespit edildiğinde, kalan istemciler Ustayı yeniden seçin
5. Dağıtılmış kilit
Aynı JVM'de, bir dosyaya veri yazmak gibi bir kaynağa düzenli erişim sağlamak için, kaynaklara karşılıklı olarak münhasır erişim elde etmek için senkronize edilmiş veya ReentrantLock'u kullanabilirsiniz. İki program farklı JVM'lerde ise ve her ikisi Aynı dosyaya veri yazarken özel erişim nasıl sağlanır? Şu anda, dağıtılmış bir kilit gereklidir
Şu anda dağıtılmış kilitlerin iki temel uygulaması vardır
Anahtar yoksa redis setnex (anahtar değeri) kullanın, anahtar varsa 0 döndür, 1 döndür
Zookeeper, özel kilit ve paylaşılan kilidi fark eder (okuma kilidi)
İşte özel kilitlerin uygulanmasına kısa bir giriş
Uygulama ilkesi ana seçimle benzerdir.Tüm istemciler / exclusive_lock düğümü altında geçici alt düğümler / exclusive_lock / lock oluştururlar. Zookeeper, tüm istemcilerde yalnızca bir istemcinin başarıyla oluşturulabilmesini sağlar, ardından istemcinin elde ettiği kabul edilir. Kilitlemeden sonra, kilidi edinmemiş diğer istemcilerin, kilit düğümündeki değişiklikleri gerçek zamanlı olarak izlemek için / exclusive_lock düğümündeki çocuk düğüm değişiklikleri için bir izleyici kaydetmeleri gerekir.
Kilidi serbest bırakmak için iki durum vardır
Şu anda kilidi alan istemci kapalıysa, zookeeper'daki geçici düğüm silinecek
İş mantığı normal şekilde yürütüldükten sonra, müşteri kendi oluşturduğu geçici düğümü silmek için inisiyatif alacaktır.
Tüm özel kilit edinme ve serbest bırakma süreci aşağıdaki şekil ile gösterilebilir
6. Dağıtılmış kuyruk
Aşağıdaki şekilde gösterildiği gibi, bir kuyruk olarak oluşturun / sıraya koyun ve ardından bir mesaj olarak bir sıra düğümü oluşturun (düğüm tarafından depolanan veriler mesaj içeriğidir), üretici her seferinde üretici gönderilecek bir mesaj olarak yeni bir düğüm oluşturduğunda, tüketici kuyruğu izler Alt düğümü değiştirilir (veya düzenli olarak sorgulanır), en küçük düğüm her tüketim mesajı olarak alındığında, işlemden sonra düğüm silinir. Bir FIFO (ilk giren ilk çıkar) kuyruğu uygulamaya eşdeğerdir. Not: Zookeeper, yüksek eşzamanlılık ve yüksek performans senaryoları için özel olarak tasarlanmamış CP'yi (tutarlılığı) vurgular.Yüksek eşzamanlılık ve yüksek qps kullanılırsa, dağıtılmış kuyrukların uygun olduğu düşünülmelidir.
Bu makale WeChat genel hesabından yeniden üretilmiştir: Jav Zhitang