JavaRush /Java Blog /Random-ID /Penjaga kebun binatang atau seperti apa kehidupan seorang...
Viacheslav
Level 3

Penjaga kebun binatang atau seperti apa kehidupan seorang penjaga kebun binatang

Dipublikasikan di grup Random-ID
Penjaga kebun binatang atau cara hidup pekerja kebun binatang - 1

Perkenalan

Aplikasi Java seringkali memiliki konfigurasi yang berbeda. Misalnya alamat dan port koneksi. Misalnya, akan terlihat seperti ini jika kita menggunakan kelas Properties :
public static void main(String []args) {
	Properties props = new Properties();
	props.setProperty("host", "www.tutorialspoint.com");
	System.out.println("Hello, " + props.getProperty("host"));
}
Dan ini sepertinya sudah cukup, karena... kita bisa mendapatkan Properties dari file tersebut. Dan semuanya tampak berjalan baik dengan kami di satu mesin. Tapi bayangkan sistem kita mulai terdiri dari sistem berbeda yang terpisah satu sama lain? Sistem seperti ini disebut juga sistem terdistribusi. Di Wikipedia Anda dapat menemukan definisi berikut: Sistem terdistribusi adalah sistem yang komponen-komponennya terletak di komputer jaringan berbeda yang berkomunikasi satu sama lain dan mengoordinasikan tindakan mereka dengan bertukar pesan satu sama lain. Anda dapat melihat diagram berikut:
Penjaga kebun binatang atau cara hidup pekerja kebun binatang - 2
Dengan pendekatan ini, satu sistem dibagi menjadi beberapa komponen. Konfigurasi adalah komponen umum yang terpisah. Masing-masing komponen lainnya bertindak sebagai klien untuk komponen konfigurasi. Kasus ini disebut " Konfigurasi terdistribusi ". Ada banyak implementasi berbeda dari konfigurasi terdistribusi. Dan dalam ulasan hari ini saya mengusulkan untuk berkenalan dengan salah satunya, yang disebut Zookeeper.
Penjaga kebun binatang atau cara hidup pekerja kebun binatang - 3

Penjaga kebun binatang

Jalan untuk mengenal Zookeeper dimulai dari situs resmi mereka: zookeeper.apache.org Di situs resminya Anda harus membuka bagian " Unduh " . Pada bagian ini, download arsip dalam format .tar.gz, misalnya “zookeeper-3.4.13.tar.gz”. tar adalah format arsip tradisional untuk sistem Unit. gz - artinya gzip digunakan untuk mengompres arsip. Jika kita bekerja pada mesin Windows, maka hal ini tidak akan mengganggu kita. Kebanyakan pengarsip modern (misalnya, 7-zip ) dapat bekerja dengan baik dengannya di Windows. Mari kita ekstrak isinya ke beberapa direktori. Pada saat yang sama, kita akan melihat perbedaannya - pada disk dalam keadaan diekstraksi akan memakan waktu sekitar 60 megabita, dan kami mengunduh arsip berukuran sekitar 35 megabita. Seperti yang Anda lihat, kompresi benar-benar berfungsi. Sekarang Anda perlu meluncurkan Zookeeper. Secara umum, Zookeeper adalah sejenis server. Zookeeper dapat dijalankan dalam salah satu dari dua mode: Mandiri atau Direplikasi . Mari kita pertimbangkan opsi paling sederhana, juga dikenal sebagai opsi pertama - Mode mandiri. Agar Zookeper dapat dijalankan, diperlukan file konfigurasi. Oleh karena itu, mari kita buat di sini: [КаталогРаспаковкиZookeeper]/conf/zoo.cfg. Untuk Windows, kami akan menggunakan rekomendasi dari Medium: “ Menginstal Apache ZooKeeper di Windows ”. Isi file konfigurasinya akan seperti ini:
tickTime=2000
dataDir=C:/zookeeper-3.4.13/data
clientPort=2181
Mari tambahkan variabel lingkungan ZOOKEEPER_HOME yang berisi path ke direktori root zookeper (seperti dalam instruksi pada media), dan juga tambahkan fragmen berikut ke variabel lingkungan PATH: ;%ZOOKEEPER_HOME%\bin; Selain itu, direktori yang ditentukan dalam dataDir harus ada, jika tidak, Zookeeper tidak akan ada dapat memulai server. Sekarang kita dapat memulai server dengan aman menggunakan perintah: zkServer. Berkat fakta bahwa direktori Zookeeper telah ditambahkan ke variabel lingkungan jalur, kita dapat memanggil perintah Zookeper dari mana saja, tidak hanya dari direktori bin.
Penjaga kebun binatang atau cara hidup pekerja kebun binatang - 4

ZNode

Sebagaimana tercantum dalam " Zookeeper Review ", data di Zookeper direpresentasikan dalam bentuk ZNodes (node) yang disusun dalam struktur pohon. Artinya, setiap ZNode dapat berisi data dan memiliki ZNode turunan. Informasi lebih lanjut tentang organisasi ZNode dapat ditemukan di dokumentasi Zookeeper: " Model data dan namespace hierarki ". Untuk bekerja dengan Zookeeper dan ZNode kita akan menggunakan Zookeeper CLI (antarmuka Command Line). Sebelumnya, kami memulai server menggunakan perintah zkServer. Sekarang untuk menghubungkan mari kita jalankan, zkCli.cmd -server 127.0.0.1:2181 jika berhasil maka sesi koneksi ke Zookeeper akan dibuat dan kita akan melihat kira-kira keluaran sebagai berikut:
Penjaga kebun binatang atau cara hidup pekerja kebun binatang - 5
Menariknya, bahkan segera setelah instalasi, Zookeeper sudah memiliki ZNode. Ini memiliki jalur berikut:/zookeeper/quota
Penjaga kebun binatang atau cara hidup pekerja kebun binatang - 6
Inilah yang disebut " kuota ". Sebagaimana dinyatakan dalam " Apache ZooKeeper Essentials ", setiap ZNode dapat memiliki kuota yang terkait dengannya, sehingga membatasi data yang dapat disimpannya. Batasan jumlah znode dan jumlah data yang disimpan dapat ditentukan. Selain itu, jika batas ini terlampaui, maka pengoperasian dengan ZNode tidak dibatalkan, tetapi peringatan akan diterima tentang melebihi batas tersebut. Disarankan untuk membaca tentang ZNode di " Panduan Pemrogram ZooKeeper: ZNodes ". Beberapa contoh dari sana tentang bagaimana Anda dapat bekerja dengan ZNode:
Penjaga kebun binatang atau cara hidup pekerja kebun binatang - 7
Saya juga ingin mencatat bahwa ZNodes berbeda. ZNode reguler (kecuali jika Anda menentukan tanda tambahan) bertipe " persisten ". Ada ZNode bertipe " Ephemeral Node ". ZNode tersebut hanya ada selama sesi koneksi Zookeeper di mana ZNode tersebut dibuat. Ada ZNode bertipe " Sequence Node ". ZNode ini ditambahkan dengan nomor dari urutan untuk memastikan keunikan. Sequence Node dapat bersifat persisten atau fana. Sedikit informasi latar belakang tentang ZNode juga direkomendasikan di sini: “ Zookeeper ZNodes – Karakteristik & Contoh ”.
Penjaga kebun binatang atau cara hidup pekerja kebun binatang - 8

Pengamat ZNode

Saya juga ingin berbicara tentang pengamat. Detail tentangnya tertulis di dokumentasi Zookeeper: " ZooKeeper Watches ". Singkatnya, pengamat adalah pemicu satu kali yang dipicu oleh suatu peristiwa. Dengan mengambil data dengan melakukan operasi getData(), getChildren(), atau ada(), kita dapat membuat pemicu sebagai tindakan tambahan. Penjaga kebun binatang memastikan urutan pemrosesan acara. Selain itu, dokumentasi menyatakan bahwa sebelum kita dapat melihat nilai ZNode baru, kita akan melihat peristiwa tentang perubahan nilai lama ke nilai baru. Anda dapat membaca lebih lanjut tentang Watchers di sini: “ ZooKeeper Watches – Fitur & Jaminan ”. Untuk mencobanya, mari kita gunakan CLI lagi : Anggaplah kita memiliki beberapa ZNode dengan nilai tempat kita menyimpan status suatu layanan:
[zk: 127.0.0.1:2181(CONNECTED) 0] create /services/service1/status stopped
Created /services/service1/status
[zk: 127.0.0.1:2181(CONNECTED) 1] get /services/service1/status [watch]
stopped
Sekarang, jika datanya /services/service1/statusberubah, pemicu satu kali kita akan diaktifkan:
Penjaga kebun binatang atau cara hidup pekerja kebun binatang - 9
Menariknya, saat terhubung ke Zookeeper, kami juga melihat cara kerja pengamat:
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
SyncConnected adalah salah satu kemungkinan acara Zookeper. Detail lebih lanjut tentang hal ini dapat ditemukan di deskripsi API.
Penjaga kebun binatang atau cara hidup pekerja kebun binatang - 10

Penjaga Kebun Binatang dan Jawa

Kami sekarang memiliki pemahaman dasar tentang apa yang dapat dilakukan Penjaga Kebun Binatang. Sekarang mari kita bekerja dengannya melalui Java, bukan melalui CLI. Dan untuk ini kita memerlukan aplikasi Java, di mana kita akan melihat cara bekerja dengan Zookeeper. Untuk membuat aplikasi, kita akan menggunakan sistem pembangunan proyek Gradle . Dengan menggunakan " plugin Gradle Build Init " kita akan membuat proyek. Untuk melakukan ini, jalankan perintah: gradle init --type java-application Jika Gradle meminta kami untuk mengklarifikasi pertanyaan, maka kami akan membiarkan nilai default (cukup tekan Enter). Sekarang mari kita buka skrip build, mis. file build.gradle. Ini berisi deskripsi tentang apa proyek kami dibuat dan artefak (perpustakaan, kerangka kerja) apa yang bergantung padanya. Karena kami ingin menggunakan Zookeeper, maka kami perlu menambahkannya. Oleh karena itu, mari tambahkan ketergantungan pada Zookeeper ke blok dependensi:
dependencies {
    implementation 'org.apache.zookeeper:zookeeper:3.4.13'
Anda dapat membaca lebih lanjut tentang Gradle di ulasan: " Pengantar Singkat tentang Gradle ". Jadi, kami memiliki proyek Java, kami menghubungkan perpustakaan Zookeeper ke sana. Ayo tulis sesuatu sekarang. Seperti yang kita ingat, dengan menggunakan CLI kita menghubungkan sesuatu seperti ini: zkCli.cmd -server 127.0.0.1:2181 Mari kita mendeklarasikan atribut “server” di kelas App dalam metode utama:
String server = "127.0.0.1:2181";
Koneksi bukanlah tindakan instan. Kita harus menunggu di thread utama eksekusi program agar koneksi dapat terjadi. Oleh karena itu, kita memerlukan kunci. Mari kita nyatakan di bawah ini:
Object lock = new Object();
Sekarang kita membutuhkan seseorang untuk mengatakan bahwa koneksi telah terjalin. Seperti yang kami ingat, ketika kami melakukan ini melalui CLI, pengamat bekerja untuk kami. Jadi dalam kode Java semuanya persis sama. Pengamat kami akan menampilkan pesan tentang penyelesaian yang berhasil dan memberi tahu semua orang yang menunggu melalui kunci. Mari kita menulis pengamat:
Watcher connectionWatcher = new Watcher() {
	public void process(WatchedEvent we) {
		if (we.getState() == Event.KeeperState.SyncConnected) {
			System.out.println("Connected to Zookeeper in " + Thread.currentThread().getName());
			synchronized (lock) {
            	lock.notifyAll();
            }
		}
	}
};
Sekarang mari tambahkan koneksi ke server zooKeeper:
int sessionTimeout = 2000;
ZooKeeper zooKeeper = null;
synchronized (lock) {
	zooKeeper = new ZooKeeper(server, sessionTimeout, connectionWatcher);
	lock.wait();
}
Semuanya sederhana di sini. Saat menjalankan metode utama di thread utama program, kami mengambil kunci dan meminta koneksi ke penjaga kebun binatang. Pada saat yang sama, kami melepaskan kunci dan menunggu sampai orang lain mengambil kunci tersebut dan memberi tahu kami bahwa kami dapat melanjutkan. Ketika koneksi dibuat, pengamat akan bekerja. Dia akan memeriksa apakah acara SyncConnected telah tiba (seingat kita, inilah yang ditangkap oleh pengamat melalui CLI), dan kemudian menulis pesan. Selanjutnya, kita ambil kuncinya (karena thread utama sebelumnya telah melepaskannya) dan beri tahu semua thread yang menunggu kunci tersebut bahwa kita dapat melanjutkan. Thread pemrosesan acara keluar dari blok yang disinkronkan, sehingga melepaskan kunci. Utas utama menerima pemberitahuan dan, setelah menunggu kunci dilepaskan, melanjutkan eksekusi, karena sampai ia menerima kunci, ia tidak akan dapat keluar dari blok yang disinkronkan dan terus bekerja. Jadi, dengan menggunakan multithreading dan Zookeeper API, kita dapat melakukan berbagai tindakan. Zookeeper API jauh lebih luas daripada yang diizinkan CLI. Misalnya:
// Creation нового узла
String znodePath = "/zookeepernode2";
List<ACL> acls = ZooDefs.Ids.OPEN_ACL_UNSAFE;
if (zooKeeper.exists(znodePath, false) == null) {
	zooKeeper.create(znodePath, "data".getBytes(), acls, CreateMode.PERSISTENT);
}

// Получение данных из узла
byte[] data = zooKeeper.getData(znodePath, null, null);
System.out.println("Result: " + new String(data, "UTF-8"));
Seperti yang Anda lihat, saat membuat node kita dapat mengkonfigurasi ACL. Ini adalah fitur penting lainnya. ACL adalah izin yang berlaku untuk tindakan dengan ZNode. Ada banyak pengaturan, jadi saya sarankan Anda merujuk ke dokumentasi resmi untuk detailnya: “ Izin ACL Penjaga Kebun Binatang ”.
Penjaga kebun binatang atau cara hidup pekerja kebun binatang - 11

Kesimpulan

Mengapa kita membaca ini? Karena Zookeeper digunakan dalam teknologi populer lainnya. Misalnya, Apache Kafka memerlukan Zookeeper, yang dapat Anda baca di " Panduan Memulai Cepat Kafka ". Ini juga digunakan dalam database NOSQL HBase, yang dapat Anda baca lebih lanjut di " Panduan Memulai Cepat HBase ". Faktanya, banyak proyek lain yang menggunakan Zookeeper. Beberapa di antaranya tercantum dalam " Menggunakan Zookeeper di Dunia Nyata ". Saya harap saya menjawab pertanyaan “mengapa”. Pertanyaan terpenting saat ini adalah: “Apa selanjutnya?” Pertama, Anda dapat membaca buku berikut tentang topik Apache Zookeeper: Kedua, ada laporan video bagus tentang Zookeeper. Tampilan yang disarankan: Ketiga, ada beberapa artikel bermanfaat yang akan melengkapi gambaran dunia: Sekian ulasan singkatnya, namun sebagai pengantar semoga bermanfaat. #Viacheslav
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION