Panduan untuk Hazelcast dengan Java

1. Gambaran keseluruhan

Ini adalah artikel pengantar di Hazelcast di mana kita akan melihat bagaimana membuat anggota kluster, Peta yang diedarkan untuk berkongsi data di antara node kluster, dan membuat klien Java untuk menyambung dan meminta data dalam kluster.

2. Apa itu Hazelcast?

Hazelcast adalah platform Grid Data Dalam Memori yang diedarkan untuk Java. Senibina menyokong skalabilitas tinggi dan penyebaran data dalam persekitaran berkelompok. Ia menyokong penemuan automatik nod dan penyegerakan pintar.

Hazelcast tersedia dalam edisi yang berbeza. Untuk melihat ciri untuk semua edisi Hazelcast, kita boleh merujuk pada pautan berikut. Dalam tutorial ini, kita akan menggunakan edisi sumber terbuka.

Begitu juga, Hazelcast menawarkan pelbagai ciri seperti Struktur Data Terdistribusi, Komputasi Teragih, Pertanyaan Terdistribusi, dan lain-lain. Untuk tujuan artikel ini, kami akan memberi tumpuan kepada Peta yang diedarkan .

3. Ketergantungan Maven

Hazelcast menawarkan banyak perpustakaan yang berbeza untuk menangani pelbagai keperluan. Kami dapat menjumpainya di bawah kumpulan com.hazelcast di Maven Central.

Namun, dalam artikel ini, kami hanya akan menggunakan kebergantungan inti yang diperlukan untuk membuat anggota kluster Hazelcast mandiri dan Klien Hazelcast Java:

 com.hazelcast hazelcast 4.0.2  

Versi semasa boleh didapati di repositori pusat maven.

4. Aplikasi Hazelcast Pertama

4.1. Buat Ahli Hazelcast

Anggota (juga disebut nod) secara automatik bergabung bersama untuk membentuk kelompok. Penggabungan automatik ini berlaku dengan pelbagai mekanisme penemuan yang digunakan ahli untuk mencari antara satu sama lain.

Mari buat ahli yang menyimpan data dalam peta diedarkan Hazelcast:

public class ServerNode { HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance(); ... }

Semasa kita memulakan aplikasi ServerNode , kita dapat melihat teks yang mengalir di konsol yang bermaksud bahawa kita membuat simpul Hazelcast baru di JVM kita yang harus bergabung dengan kluster.

Members [1] { Member [192.168.1.105]:5701 - 899898be-b8aa-49aa-8d28-40917ccba56c this } 

Untuk membuat beberapa nod, kita boleh memulakan beberapa aplikasi aplikasi ServerNode . Hasilnya, Hazelcast secara automatik akan membuat dan menambahkan ahli baru ke kluster.

Sebagai contoh, jika kita menjalankan aplikasi ServerNode sekali lagi, kita akan melihat log berikut di konsol yang mengatakan bahawa terdapat dua anggota dalam kluster.

Members [2] { Member [192.168.1.105]:5701 - 899898be-b8aa-49aa-8d28-40917ccba56c Member [192.168.1.105]:5702 - d6b81800-2c78-4055-8a5f-7f5b65d49f30 this }

4.2. Buat Peta Teragih

Seterusnya, mari buat Peta diedarkan . Kita memerlukan contoh HazelcastInstance yang dibuat lebih awal untuk membina Peta diedarkan yang memanjangkan antara muka java.util.concurrent.ConcurrentMap .

Map map = hazelcastInstance.getMap("data"); ...

Akhirnya, mari kita tambahkan beberapa entri ke peta :

FlakeIdGenerator idGenerator = hazelcastInstance.getFlakeIdGenerator("newid"); for (int i = 0; i < 10; i++) { map.put(idGenerator.newId(), "message" + i); }

Seperti yang dapat kita lihat di atas, kita telah menambah 10 entri ke peta . Kami menggunakan FlakeIdGenerator untuk memastikan bahawa kami mendapat kunci unik untuk peta. Untuk keterangan lebih lanjut mengenai FlakeIdGenerator , kami boleh melihat pautan berikut.

Walaupun ini mungkin bukan contoh dunia nyata, kami hanya menggunakannya untuk menunjukkan salah satu daripada banyak operasi yang dapat kami terapkan pada peta yang diedarkan. Kemudian, kita akan melihat cara mendapatkan entri yang ditambahkan oleh anggota kluster dari klien Hazelcast Java.

Secara dalaman, Hazelcast membahagikan entri peta dan menyebarkan dan mereplikasi entri di antara ahli kluster. Untuk keterangan lebih lanjut mengenai Peta Hazelcast , kami dapat melihat pautan berikut.

4.3. Buat Pelanggan Java Hazelcast

Pelanggan Hazelcast membolehkan kami melakukan semua operasi Hazelcast tanpa menjadi ahli kluster. Ia menghubungkan ke salah satu anggota kluster dan mendelegasikan semua operasi seluruh kluster kepadanya.

Mari buat pelanggan asli:

ClientConfig config = new ClientConfig(); config.setClusterName("dev"); HazelcastInstance hazelcastInstanceClient = HazelcastClient.newHazelcastClient(config); 

Ia semudah itu.

4.4. Akses Peta Teragih Dari Pelanggan Java

Seterusnya, kami akan menggunakan contoh HazelcastInstance yang dibuat lebih awal untuk mengakses Peta yang diedarkan :

Map map = hazelcastInstanceClient.getMap("data"); ...

Sekarang kita dapat melakukan operasi di peta tanpa menjadi anggota kluster. Sebagai contoh, mari kita cuba mengulangi entri:

for (Entry entry : map.entrySet()) { ... }

5. Mengkonfigurasi Hazelcast

Pada bahagian ini, kita akan memfokuskan pada cara mengkonfigurasi rangkaian Hazelcast menggunakan deklaratif (XML) dan terprogram (API) dan menggunakan pusat pengurusan Hazelcast untuk memantau dan menguruskan nod yang sedang berjalan.

Semasa Hazelcast dimulakan, ia mencari harta sistem hazelcast.config . Sekiranya ia ditetapkan, nilainya digunakan sebagai jalan. Jika tidak, Hazelcast mencari fail hazelcast.xml di direktori kerja atau di classpath.

If none of the above works, Hazelcast loads the default configuration, i.e. hazelcast-default.xml that comes with hazelcast.jar.

5.1. Network Configuration

By default, Hazelcast uses multicast for discovering other members that can form a cluster. If multicast isn't a preferred way of discovery for our environment, then we can configure Hazelcast for a full TCP/IP cluster.

Let's configure the TCP/IP cluster using declarative configuration:


    

Alternatively, we can use the Java config approach:

Config config = new Config(); NetworkConfig network = config.getNetworkConfig(); network.setPort(5701).setPortCount(20); network.setPortAutoIncrement(true); JoinConfig join = network.getJoin(); join.getMulticastConfig().setEnabled(false); join.getTcpIpConfig() .addMember("machine1") .addMember("localhost").setEnabled(true);

By default, Hazelcast will try 100 ports to bind. In the example above, if we set the value of port as 5701 and limit the port count to 20, as members are joining the cluster, Hazelcast tries to find ports between 5701 and 5721.

If we want to choose to use only one port, we can disable the auto-increment feature by setting auto-increment to false.

5.2. Management Center Configuration

The management center allows us to monitor the overall state of the clusters, we can also analyze and browse the data structures in detail, update map configurations, and take thread dump from nodes.

To use the Hazelcast management center, we can either deploy the mancenter-version.war application into our Java application server/container or we can start Hazelcast Management Center from the command line. We can download the latest Hazelcast ZIP from hazelcast.org. The ZIP contains the mancenter-version.war file.

We can configure our Hazelcast nodes by adding the URL of the web application to hazelcast.xml and then have the Hazelcast members communicate with the management center.

So let's now configure the management center using declarative configuration:

 //localhost:8080/mancenter 

Likewise, here's the programmatic configuration:

ManagementCenterConfig manCenterCfg = new ManagementCenterConfig(); manCenterCfg.setEnabled(true).setUrl("//localhost:8080/mancenter");

6. Conclusion

In this article, we covered introductory concepts about Hazelcast. For more details, we can take a look at the Reference Manual.

As usual, all the code for this article is available over on GitHub.