Panduan untuk Hazelcast dengan Java

1. Ikhtisar

Ini adalah artikel pengantar di Hazelcast di mana kita akan melihat cara membuat anggota cluster, Peta terdistribusi untuk berbagi data di antara node cluster, dan membuat klien Java untuk menghubungkan dan meminta data di cluster.

2. Apa itu Hazelcast?

Hazelcast adalah platform In-Memory Data Grid terdistribusi untuk Java. Arsitekturnya mendukung skalabilitas tinggi dan distribusi data dalam lingkungan berkerumun. Ini mendukung penemuan otomatis node dan sinkronisasi cerdas.

Hazelcast tersedia dalam berbagai edisi. Untuk melihat fitur-fitur untuk semua edisi Hazelcast, kita dapat merujuk ke tautan berikut. Dalam tutorial ini, kami akan menggunakan edisi sumber terbuka.

Demikian pula, Hazelcast menawarkan berbagai fitur seperti Struktur Data Terdistribusi, Komputasi Terdistribusi, Kueri Terdistribusi, dll. Untuk tujuan artikel ini, kami akan fokus pada Peta terdistribusi .

3. Ketergantungan Maven

Hazelcast menawarkan banyak perpustakaan berbeda untuk menangani berbagai persyaratan. Kami dapat menemukannya di grup com.hazelcast di Maven Central.

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

 com.hazelcast hazelcast 4.0.2  

Versi saat ini tersedia di repositori pusat maven.

4. Aplikasi Hazelcast Pertama

4.1. Buat Anggota Hazelcast

Anggota (juga disebut node) secara otomatis bergabung bersama untuk membentuk cluster. Penggabungan otomatis ini terjadi dengan berbagai mekanisme penemuan yang digunakan anggota untuk menemukan satu sama lain.

Mari buat anggota yang menyimpan data di peta terdistribusi Hazelcast:

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

Saat kita memulai aplikasi ServerNode , kita dapat melihat teks mengalir di konsol yang berarti kita membuat node Hazelcast baru di JVM kita yang harus bergabung dengan cluster.

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

Untuk membuat banyak node, kita dapat memulai beberapa instance aplikasi ServerNode . Hasilnya, Hazelcast secara otomatis akan membuat dan menambahkan anggota baru ke cluster.

Misalnya, jika kita menjalankan aplikasi ServerNode lagi, kita akan melihat log berikut di konsol yang menyatakan bahwa ada dua anggota di cluster.

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 Terdistribusi

Selanjutnya, mari buat Peta terdistribusi . Kita membutuhkan contoh HazelcastInstance yang dibuat sebelumnya untuk membuat Peta terdistribusi yang memperluas antarmuka java.util.concurrent.ConcurrentMap .

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

Terakhir, mari 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 bisa kita lihat di atas, kami telah menambahkan 10 entri ke peta . Kami menggunakan FlakeIdGenerator untuk memastikan bahwa kami mendapatkan kunci unik untuk peta. Untuk lebih jelasnya tentang FlakeIdGenerator , kita dapat melihat tautan berikut.

Meskipun ini mungkin bukan contoh dunia nyata, kami hanya menggunakannya untuk mendemonstrasikan salah satu dari banyak operasi yang dapat kami terapkan pada peta terdistribusi. Nanti, kita akan melihat bagaimana mengambil entri yang ditambahkan oleh anggota cluster dari klien Java Hazelcast.

Secara internal, Hazelcast mempartisi entri peta dan mendistribusikan serta mereplikasi entri di antara anggota cluster. Untuk lebih jelasnya tentang Peta Hazelcast , kita dapat melihat tautan berikut.

4.3. Buat Klien Java Hazelcast

Klien Hazelcast memungkinkan kita melakukan semua operasi Hazelcast tanpa menjadi anggota kluster. Ini menghubungkan ke salah satu anggota cluster dan mendelegasikan semua operasi cluster ke sana.

Mari buat klien asli:

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

Sesederhana itu.

4.4. Akses Peta Terdistribusi Dari Klien Java

Selanjutnya, kami akan menggunakan instance HazelcastInstance yang dibuat sebelumnya untuk mengakses Peta yang didistribusikan :

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

Sekarang kita bisa melakukan operasi pada peta tanpa menjadi anggota cluster. Misalnya, mari kita coba mengulang entri:

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

5. Mengonfigurasi Hazelcast

Di bagian ini, kita akan fokus pada cara mengonfigurasi jaringan Hazelcast menggunakan deklaratif (XML) dan terprogram (API) dan menggunakan pusat manajemen Hazelcast untuk memantau dan mengelola node yang sedang berjalan.

Saat Hazelcast dimulai, ia mencari properti sistem hazelcast.config . Jika disetel, nilainya digunakan sebagai jalur. Jika tidak, Hazelcast mencari file 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.