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?
apache-zookeeper
distributed-computing
topgun_ivard
sumber
sumber
Jawaban:
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.
sumber
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.
sumber
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.
sumber
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
sumber
Saya akan menyarankan sumber daya berikut:
Saya sarankan menonton video, membaca koran, dan kemudian menonton video lagi. Akan lebih mudah dipahami jika Anda tahu Raft sebelumnya.
sumber