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.