Menjelaskan Apache ZooKeeper


376

Saya mencoba memahami ZooKeeper, cara kerjanya, dan apa fungsinya. Apakah ada aplikasi yang sebanding dengan ZooKeeper?

Jika Anda tahu, lalu bagaimana Anda menggambarkan ZooKeeper sebagai orang awam?

Saya sudah mencoba apache wiki, zookeeper sourceforge ... tapi saya masih belum bisa mengaitkannya.

Saya baru saja membaca melalui http://zookeeper.sourceforge.net/index.sf.shtml , jadi bukankah ada lebih banyak layanan seperti ini? Apakah sesederhana hanya meniru layanan server?


6
Serupa dengan tetapi bukan jawaban yang tepat yang Anda cari: stackoverflow.com/questions/1479442/real-world-use-of-zookeeper
zengr


Anda dapat membaca makalah ini ZooKeeper: Koordinasi bebas-tunggu untuk sistem skala Internet Ditulis oleh dua Yahoo! engineer
yaphet

Berikut ini adalah pembicaraan teknologi yang merupakan pengantar untuk Apache ZooKeeper oleh Camille Fournier yang merupakan CTO dari RentTheRunway. Saya harap ini membantu.
Genadinik

@Luca Geretti ... Menurut saya, Zookeper menyediakan seperangkat apis sehingga kita dapat menggunakannya untuk mengoordinasikan aplikasi yang didistribusikan. koreksi saya jika saya salah.
user3797438

Jawaban:


434

Singkatnya, ZooKeeper membantu Anda membangun aplikasi terdistribusi.

Bagaimana itu bekerja

Anda dapat menggambarkan ZooKeeper sebagai layanan sinkronisasi yang direplikasi dengan konsistensi akhirnya. Itu kuat, karena data yang ada didistribusikan di antara banyak node (kumpulan node ini disebut "ensemble") dan satu klien terhubung ke salah satu dari mereka (yaitu, "server" tertentu), bermigrasi jika satu node gagal; selama sebagian besar node bekerja, ensemble node ZooKeeper tetap hidup. Secara khusus, master node dipilih secara dinamis oleh konsensus dalam ansambel; jika master node gagal, peran master bermigrasi ke node lain.

Bagaimana menulis ditangani

Master adalah otoritas untuk menulis: dengan cara ini menulis dapat dijamin akan tetap ada, yaitu, menulis adalah linier . Setiap kali klien menulis ke ensemble, mayoritas node tetap memiliki informasi: node ini termasuk server untuk klien, dan jelas master. Ini berarti bahwa setiap penulisan membuat server up-to-date dengan master. Ini juga berarti, bahwa Anda tidak dapat menulis secara bersamaan.

Jaminan menulis linier adalah alasan fakta bahwa ZooKeeper tidak berkinerja baik untuk beban kerja yang dominan menulis. Secara khusus, itu tidak boleh digunakan untuk pertukaran data besar, seperti media. Selama komunikasi Anda melibatkan data bersama, ZooKeeper membantu Anda. Ketika data dapat ditulis secara bersamaan, ZooKeeper benar-benar menghalangi, karena memaksakan urutan operasi yang ketat bahkan jika tidak benar-benar diperlukan dari perspektif penulis. Penggunaannya yang ideal adalah untuk koordinasi, di mana pesan dipertukarkan antara klien.

Bagaimana membaca ditangani

Di sinilah ZooKeeper unggul: pembacaan dilakukan bersamaan karena dilayani oleh server tertentu yang terhubung dengan klien. Namun, ini juga merupakan alasan untuk konsistensi akhirnya: "tampilan" klien mungkin sudah ketinggalan zaman, karena master memperbarui server yang sesuai dengan penundaan yang dibatasi tetapi tidak ditentukan.

Secara terperinci

Basis data yang direplikasi dari ZooKeeper terdiri dari pohon znodes , yang merupakan entitas yang secara kasar mewakili node sistem file (menganggapnya sebagai direktori). Setiap znode dapat diperkaya oleh array byte, yang menyimpan data. Juga, setiap znode mungkin memiliki znode lain di bawahnya, secara praktis membentuk sistem direktori internal.

Znodes berurutan

Menariknya, nama znode bisa berurutan , artinya nama yang diberikan klien saat membuat znode hanya awalan: nama lengkap juga diberikan oleh nomor urut yang dipilih oleh ensemble. Ini berguna, misalnya, untuk tujuan sinkronisasi: jika banyak klien ingin mendapatkan kunci pada sumber daya, mereka masing-masing dapat secara bersamaan membuat znode berurutan di lokasi: siapa pun yang mendapatkan angka terendah berhak atas kunci tersebut.

Znodes Ephemeral

Juga, znode mungkin bersifat sementara : ini berarti bahwa znode dihancurkan segera setelah klien yang membuatnya terputus. Ini terutama berguna untuk mengetahui kapan klien gagal, yang mungkin relevan ketika klien itu sendiri memiliki tanggung jawab yang harus diambil oleh klien baru. Mengambil contoh kunci, segera setelah klien memiliki kunci terputus, klien lain dapat memeriksa apakah mereka berhak atas kunci.

Jam tangan

Contoh yang terkait dengan pemutusan klien mungkin bermasalah jika kita perlu melakukan polling secara berkala status znodes. Untungnya, ZooKeeper menawarkan sistem acara di mana arloji dapat diatur pada znode. Jam tangan ini dapat diatur untuk memicu suatu peristiwa jika znode secara khusus diubah atau dihapus atau anak-anak baru dibuat di bawahnya. Ini jelas berguna dalam kombinasi dengan opsi sekuensial dan sesaat untuk znodes.

Di mana dan bagaimana menggunakannya

Contoh kanonik penggunaan Zookeeper adalah perhitungan memori terdistribusi, di mana beberapa data dibagi antara node klien dan harus diakses / diperbarui dengan cara yang sangat hati-hati untuk memperhitungkan sinkronisasi.

ZooKeeper menawarkan perpustakaan untuk membangun primitif sinkronisasi Anda, sementara kemampuan untuk menjalankan server terdistribusi menghindari masalah satu-titik-kegagalan yang Anda miliki ketika menggunakan repositori pesan terpusat (seperti broker).

ZooKeeper adalah fitur-cahaya, yang berarti bahwa mekanisme seperti pemilihan pemimpin, kunci, hambatan, dll. Belum ada, tetapi dapat ditulis di atas primitif ZooKeeper. Jika C / Java API terlalu berat untuk tujuan Anda, Anda harus bergantung pada perpustakaan yang dibangun di ZooKeeper seperti kandang dan terutama kurator .

Tempat membaca lebih lanjut

Dokumentasi resmi terpisah, yang cukup bagus, saya sarankan untuk membaca Bab 14 dari Hadoop: Panduan Definitif yang memiliki ~ 35 halaman yang pada dasarnya menjelaskan apa yang dilakukan ZooKeeper, diikuti oleh contoh layanan konfigurasi.


2
Saya tidak yakin saya memahami skema komunikasi yang Anda sarankan, tetapi Anda dapat menggunakan ZooKeeper untuk "mempublikasikan" informasi dari produsen dan meminta beberapa konsumen membacanya. Jika di sisi lain hanya ada satu contoh dari setiap jenis server, ada sedikit manfaat dalam menggunakan ZK.
Luca Geretti

57
IMO ini gagal menjelaskan apa ZooKeeper adalah untuk orang awam. Kapan saya membutuhkan ZooKeeper? Apa yang akan saya tulis? Masalah apa yang dipecahkan? Apakah ini toko kunci-nilai? Mesin pencari? Kunci terdistribusi? Mengapa saya memilih ZooKeeper misalnya, Redis atau file atau JIRA atau post-it note? Anda jelas tahu banyak tentang ZooKeeper - tetapi bisakah Anda menjelaskannya secara teknis?
Dan Passaro

1
Seperti Zookeeper menulis linear, itu tidak menghentikan saya untuk menggunakan Asynchronous API untuk membuat node dan mengambil respons dalam panggilan balik? Meskipun secara internal mungkin tidak memungkinkan menulis bersamaan, atau apakah saya kehilangan sesuatu?
jdk2588

1
"Setiap kali klien menulis ke ensemble, mayoritas node tetap informasi: node ini termasuk server untuk klien, dan jelas master" => bisakah Anda mengarahkan saya ke dokumen. atau sesuatu di mana ini dijelaskan? Saya bertanya-tanya apakah mungkin bahwa perubahan status berhasil dilakukan tidak termasuk server yang terhubung dengan klien (dalam hal ini, klien dapat mengalami perilaku aneh karena tidak dapat membaca sendiri menulis sejenak)
senseiwu

2
Sepenuhnya dan benar-benar berlawanan dengan pertanyaan yang diajukan. Jika itu adalah jam, ia akan mencari "alat pencatat waktu" bukan deskripsi perasa utama, kereta roda, pelarian dan interaksinya berdasarkan periode osilasi, momen inersia, dan dampak kristal safir buatan.
Rick O'Shea

10

Zookeeper adalah salah satu server open source dan layanan terbaik yang membantu mengoordinasikan proses terdistribusi secara andal. Zookeeper adalah sistem CP (Refer theor Theorem) yang memberikan Konsistensi dan Toleransi partisi. Replikasi status Zookeeper di semua node menjadikannya layanan terdistribusi yang konsisten.

Selain itu, setiap pemimpin yang baru terpilih akan memperbarui pengikutnya dengan proposal yang hilang atau dengan snapshot dari negara, jika pengikut memiliki banyak proposal yang hilang.

Zookeeper juga menyediakan API yang sangat mudah digunakan. Posting blog ini, contoh Zookeeper Java API , memiliki beberapa contoh jika Anda mencari contoh.

Jadi di mana kita menggunakan ini? Jika layanan terdistribusi Anda memerlukan manajemen konfigurasi terpusat, dapat diandalkan dan konsisten, kunci, antrian dll, Anda akan menemukan Zookeeper pilihan yang andal.


4
"Zookeeper adalah sistem CP (Referral CAP Teorema) yang memberikan Konsistensi dan Toleransi partisi", saya pikir Zookeeper memiliki master dan pengikut, ketika master turun, maka salah satu pengikut akan terpilih sebagai Pemimpin, jadi Zookeeper harus menyediakan AP, namun C pada akhirnya konsisten.
YuFeng Shen

5
Dalam hal teorema CAP, "C" sebenarnya berarti linierabilitas. ZooKeeper sebenarnya menyediakan "konsistensi berurutan" dan itu berarti pembaruan dari klien akan diterapkan dalam urutan bahwa mereka diterima .. Ini lebih lemah daripada linierabilitas tetapi masih sangat kuat, lebih kuat dari "konsistensi akhirnya". Zookeeper bukan A dan ini karena Jika pemimpin tidak dapat dipilih (tidak ada kuorum) maka zookeeper akan gagal dalam permintaan. Inilah sebabnya mengapa itu tidak tersedia.
Binu George

7

Saya memahami ZooKeeper secara umum tetapi memiliki masalah dengan istilah "kuorum" dan "otak ganda" jadi mungkin saya dapat membagikan temuan saya dengan Anda (saya menganggap diri saya juga orang awam).

Katakanlah kita memiliki cluster ZooKeeper dari 5 server. Salah satu server akan menjadi pemimpin dan yang lainnya akan menjadi pengikut.

  • 5 server ini membentuk kuorum. Quorum berarti "server-server ini dapat memilih siapa yang harus menjadi pemimpin".

  • Jadi pemungutan suara didasarkan pada mayoritas. Mayoritas hanya berarti "lebih dari setengah" sehingga lebih dari setengah jumlah server harus menyetujui server tertentu untuk menjadi pemimpin.

  • Jadi ada hal buruk yang mungkin terjadi yang disebut "otak terbelah". Otak yang terbelah hanyalah ini, sejauh yang saya mengerti: Cluster dari 5 server terbagi menjadi dua bagian, atau sebut saja "tim server", dengan mungkin satu bagian dari 2 dan yang lainnya dari 3 server. Ini benar-benar situasi yang buruk seolah-olah kedua "tim server" harus menjalankan perintah tertentu bagaimana Anda memutuskan tim mana yang lebih disukai? Mereka mungkin telah menerima informasi berbeda dari klien. Jadi, sangat penting untuk mengetahui "tim server" apa yang masih relevan dan mana yang bisa / harus diabaikan.

  • Mayoritas juga merupakan alasan Anda harus menggunakan jumlah server ganjil. Jika Anda memiliki 4 server dan otak terpisah di mana 2 server terpisah maka kedua "tim server" dapat mengatakan "hei, kami ingin memutuskan siapa yang menjadi pemimpin!" tetapi bagaimana Anda memutuskan 2 server mana yang harus Anda pilih? Dengan 5 server itu sederhana: Tim server dengan 3 server memiliki mayoritas dan diizinkan untuk memilih pemimpin baru.

  • Bahkan jika Anda hanya memiliki 3 server dan salah satunya gagal 2 lainnya masih merupakan mayoritas dan dapat menyetujui bahwa salah satu dari mereka akan menjadi pemimpin baru.

Saya menyadari begitu Anda memikirkannya beberapa saat dan memahami istilah itu tidak begitu rumit lagi. Saya harap ini juga membantu siapa pun dalam memahami istilah-istilah ini.


1

Zookeeper adalah server open-source terpusat untuk memelihara dan mengelola informasi konfigurasi, konvensi penamaan dan sinkronisasi untuk lingkungan cluster terdistribusi. Zookeeper membantu sistem terdistribusi untuk mengurangi kompleksitas manajemen mereka dengan menyediakan latensi rendah dan ketersediaan tinggi. Zookeeper awalnya merupakan sub-proyek untuk Hadoop tetapi sekarang ini adalah proyek independen tingkat atas dari Apache Software Foundation.

Informasi Lebih Lanjut


2
Apa yang membuat Anda mengatakan bahwa penjaga kebun binatang itu terpusat? Zookeeper dapat dan harus dijalankan didistribusikan.
Benjamin Hammer Nørgaard

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.