Java를 사용한 Hazelcast 가이드

1. 개요

이것은 Hazelcast의 입문 기사로, 클러스터 구성원, 클러스터 노드간에 데이터를 공유 하는 분산 을 만들고, 클러스터에서 데이터를 연결하고 쿼리하기위한 Java 클라이언트를 만드는 방법을 살펴 봅니다 .

2. Hazelcast는 무엇입니까?

Hazelcast는 Java 용 분산 형 인 메모리 데이터 그리드 플랫폼입니다. 이 아키텍처는 클러스터 환경에서 높은 확장 성과 데이터 배포를 지원합니다. 노드 자동 검색 및 지능형 동기화를 지원합니다.

Hazelcast는 다양한 버전으로 제공됩니다. 모든 Hazelcast 에디션의 기능을 보려면 다음 링크를 참조하십시오. 이 자습서에서는 오픈 소스 버전을 사용합니다.

마찬가지로 Hazelcast는 Distributed Data Structure, Distributed Compute, Distributed Query 등과 같은 다양한 기능을 제공합니다.이 기사에서는 분산 에 초점을 맞출 것 입니다.

3. Maven 종속성

Hazelcast는 다양한 요구 사항을 처리하기 위해 다양한 라이브러리를 제공합니다. Maven Central의 com.hazelcast 그룹에서 찾을 수 있습니다.

그러나이 기사에서는 독립형 Hazelcast 클러스터 구성원과 Hazelcast Java 클라이언트를 만드는 데 필요한 핵심 종속성 만 사용합니다.

 com.hazelcast hazelcast 4.0.2  

현재 버전은 Maven 중앙 저장소에서 사용할 수 있습니다.

4. 첫 번째 Hazelcast 애플리케이션

4.1. Hazelcast 회원 생성

구성원 (노드라고도 함)은 자동으로 결합하여 클러스터를 형성합니다. 이 자동 결합은 구성원이 서로를 찾기 위해 사용하는 다양한 발견 메커니즘으로 발생합니다.

Hazelcast 분산 맵에 데이터를 저장하는 멤버를 만들어 보겠습니다.

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

ServerNode 응용 프로그램 을 시작하면 콘솔에서 맞춤 텍스트를 볼 수 있습니다. 즉, JVM에 클러스터에 가입해야하는 새 Hazelcast 노드를 만듭니다.

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

다중 노드를 생성하기 위해 ServerNode 애플리케이션 의 다중 인스턴스를 시작할 수 있습니다 . 결과적으로 Hazelcast는 클러스터에 새 구성원을 자동으로 만들고 추가합니다.

예를 들어 ServerNode 애플리케이션을 다시 실행 하면 클러스터에 두 개의 구성원이 있음을 나타내는 다음 로그가 콘솔에 표시됩니다.

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. 분산 된지도 만들기

다음으로 분산 맵을 생성 해 보겠습니다 . java.util.concurrent.ConcurrentMap 인터페이스 를 확장 하는 분산 을 구성하려면 이전에 생성 한 HazelcastInstance 인스턴스가 필요합니다 .

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

마지막으로 맵에 몇 가지 항목을 추가해 보겠습니다 .

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

위에서 볼 수 있듯이 지도 에 10 개의 항목을 추가했습니다 . FlakeIdGenerator 를 사용 하여 맵에 대한 고유 키를 얻었습니다. FlakeIdGenerator 에 대한 자세한 내용 은 다음 링크를 확인하십시오.

실제 사례가 아닐 수도 있지만, 우리는 분산 맵에 적용 할 수있는 많은 작업 중 하나를 보여주기 위해서만 사용했습니다. 나중에 Hazelcast Java 클라이언트에서 클러스터 구성원이 추가 한 항목을 검색하는 방법을 살펴 보겠습니다.

내부적으로 Hazelcast는 항목을 분할 하고 클러스터 구성원간에 항목을 배포 및 복제합니다. Hazelcast Map 에 대한 자세한 내용 은 다음 링크에서 확인할 수 있습니다.

4.3. Hazelcast Java 클라이언트 생성

Hazelcast 클라이언트를 사용하면 클러스터의 구성원이 아니어도 모든 Hazelcast 작업을 수행 할 수 있습니다. 클러스터 구성원 중 하나에 연결하고 모든 클러스터 전체 작업을 여기에 위임합니다.

네이티브 클라이언트를 만들어 보겠습니다.

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

그렇게 간단합니다.

4.4. 자바 클라이언트에서 분산 맵에 액세스

다음으로 이전에 생성 한 HazelcastInstance 인스턴스 를 사용하여 분산 된 Map 에 액세스합니다 .

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

이제 우리는 클러스터의 구성원이 아니 어도 맵에서 작업을 수행 할 수 있습니다 . 예를 들어 항목을 반복 해 보겠습니다.

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

5. Hazelcast 구성

이 섹션에서는 선언적 (XML) 및 프로그래밍 방식 (API)을 사용하여 Hazelcast 네트워크를 구성하고 Hazelcast 관리 센터를 사용하여 실행중인 노드를 모니터링하고 관리하는 방법에 중점을 둡니다.

Hazelcast가 시작되는 동안 hazelcast.config 시스템 속성을 찾습니다 . 설정된 경우 해당 값이 경로로 사용됩니다. 그렇지 않으면 Hazelcast 는 작업 디렉토리 또는 클래스 경로에서 hazelcast.xml 파일을 검색합니다 .

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.