Memandangkan aplikasi moden terus berkembang dan keperluan untuk ketersediaan tinggi serta keselarasan berkembang, seni bina sistem teragih menjadi semakin biasa. Dalam sistem teragih, berbilang proses atau nod berjalan pada masa yang sama dan menyelesaikan tugas bersama-sama, dan penyegerakan antara proses menjadi sangat penting. Memandangkan banyak nod dalam persekitaran teragih boleh mengakses sumber yang dikongsi pada masa yang sama, cara menangani isu konkurensi dan penyegerakan telah menjadi tugas penting dalam sistem teragih. Dalam hal ini, ZooKeeper telah menjadi penyelesaian yang sangat popular.
ZooKeeper ialah perkhidmatan penyelarasan aplikasi teragih sumber terbuka yang boleh menyediakan beberapa perkhidmatan asas yang dikongsi, seperti penyelenggaraan konfigurasi, perkhidmatan penamaan, perkhidmatan penyegerakan, kunci teragih dan perkhidmatan kumpulan, dsb. Dalam artikel ini, kami akan membincangkan cara menggunakan ZooKeeper untuk melaksanakan pengendalian kunci teragih dalam pembangunan API Java.
Mekanisme kunci ZooKeeper
Idea utama untuk melaksanakan mekanisme kunci dalam ZooKeeper ialah menggunakan status nod. Dalam ZooKeeper, setiap nod mempunyai tiga keadaan: Dibuat, Wujud dan Dipadamkan. Kita boleh menggunakan keadaan ini untuk melaksanakan kunci teragih.
Apabila berbilang proses cuba memperoleh kunci pada masa yang sama, hanya satu proses boleh berjaya mencipta nod ZooKeeper. Proses lain akan melihat bahawa nod sudah wujud dan menunggu untuk dialih keluar. Setelah proses memegang kunci telah menyelesaikan kerjanya dan melepaskan kunci, nod yang sepadan akan dipadamkan. Pada ketika ini, proses menunggu kunci akan mempunyai peluang untuk berjaya mencipta nod dan memperoleh kunci.
Gunakan ZooKeeper untuk melaksanakan kunci dalam Java
Sangat mudah untuk menggunakan ZooKeeper untuk melaksanakan kunci yang diedarkan di Java. Berikut ialah langkah untuk melaksanakan kunci teragih menggunakan ZooKeeper dalam API Java:
Berikut ialah contoh kod Java ringkas yang menunjukkan cara melaksanakan pengendalian kunci teragih menggunakan ZooKeeper:
public class ZooKeeperLock { private final ZooKeeper zooKeeper; private final String nodePath; private String myNode; public ZooKeeperLock() { try { zooKeeper = new ZooKeeper("localhost:2181", 5000, null); nodePath = "/lock"; } catch (Exception e) { throw new RuntimeException(e); } } public void lock() { while (true) { try { myNode = zooKeeper.create(nodePath + "/lock_", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); List<String> children = zooKeeper.getChildren(nodePath, false); Collections.sort(children); if (myNode.equals(nodePath + "/" + children.get(0))) { return; } String myNodeSuffix = myNode.substring(myNode.lastIndexOf("/") + 1); String prevNodeSuffix = children.get(Collections.binarySearch(children, myNodeSuffix) - 1); String prevNode = nodePath + "/" + prevNodeSuffix; final CountDownLatch latch = new CountDownLatch(1); Stat prevStat = zooKeeper.exists(prevNode, new Watcher() { public void process(WatchedEvent event) { if (event.getType() == Event.EventType.NodeDeleted) { latch.countDown(); } } }); if (prevStat != null) { latch.await(); } } catch (Exception e) { throw new RuntimeException(e); } } } public void unlock() { try { zooKeeper.delete(myNode, -1); zooKeeper.close(); } catch (Exception e) { throw new RuntimeException(e); } } }
Dalam contoh ini, kami mencipta kelas ZooKeeperLock yang melaksanakan The lock() dan kaedah buka kunci() disertakan. Kaedah lock() akan memperoleh kunci dan tunggu sehingga proses lain melepaskan kunci. Kaedah buka kunci() melepaskan kunci. Seperti yang anda lihat, proses melaksanakan kunci teragih di Java menggunakan ZooKeeper adalah sangat mudah.
Kesimpulan
ZooKeeper ialah perkhidmatan penyelarasan teragih yang sangat berkuasa yang boleh digunakan untuk menyelesaikan banyak masalah konkurensi dalam sistem teragih. Dalam artikel ini, kami membincangkan penggunaan ZooKeeper untuk melaksanakan pengendalian kunci teragih dalam pembangunan API Java. Dengan menggunakan ZooKeeper, kami boleh melaksanakan kunci teragih dan protokol penyegerakan lain dengan mudah tanpa perlu risau tentang berbilang proses yang mengakses sumber kongsi pada masa yang sama. Jika anda sedang membina sistem teragih dan perlu menangani isu penyegerakan dan konkurensi, pertimbangkan ZooKeeper.
Atas ialah kandungan terperinci Menggunakan ZooKeeper untuk pemprosesan kunci teragih dalam pembangunan API Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!