클라우드 컴퓨팅 & NoSQL/Data Grid (IMDG)

간단한 HazelCast 테스트

Terry Cho 2014. 2. 11. 00:38

EmbeddedServer 애플리케이션

애플리케이션이 로딩될때, HazelCast를 같은 JVM에서 수행 시킴

1. HazelCast를 다운로드 받은 후, 압축을 푼다. (www.hazelcast.org)

2. 서버 애플리케이션 코드 작성

package terry.hazelcast;

 

import com.hazelcast.core.*;

import com.hazelcast.config.*;

import java.util.Map;

import java.util.Queue;

 

public class GettingStarted {

 

    public static void main(String[] args) {

        Config cfg = new Config();

        HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);

        Map<Integer, String> mapCustomers = instance.getMap("customers");

        mapCustomers.put(1, "Joe");

        mapCustomers.put(2, "Ali");

        mapCustomers.put(3, "Avi");

 

        System.out.println("Customer with key 1: "+ mapCustomers.get(1));

        System.out.println("Map Size:" + mapCustomers.size());

 

        Queue<String> queueCustomers = instance.getQueue("customers");

        queueCustomers.offer("Tom");

        queueCustomers.offer("Mary");

        queueCustomers.offer("Jane");

        System.out.println("First customer: " + queueCustomers.poll());

        System.out.println("Second customer: "+ queueCustomers.peek());

        System.out.println("Queue size: " + queueCustomers.size());

    }

}

3. 서버 실행 

% java terry.hazelcast.GettingStarted


2월 11, 2014 12:33:22 오전 com.hazelcast.cluster.MulticastJoiner

INFO: [192.168.219.154]:5701 [dev] 



Members [1] {

Member [192.168.219.154]:5701 this

}


2월 11, 2014 12:33:22 오전 com.hazelcast.core.LifecycleService

INFO: [192.168.219.154]:5701 [dev] Address[192.168.219.154]:5701 is STARTED

2월 11, 2014 12:33:22 오전 com.hazelcast.partition.PartitionService

INFO: [192.168.219.154]:5701 [dev] Initializing cluster partition table first arrangement...

Customer with key 1: Joe

Map Size:3

First customer: Tom

Second customer: Mary

Queue size: 2

※ 만약에 같은 애플리케이션을 한번 더 수행 시키면, 새로운 HazelCast 인스턴스가 뜨면서 Cluster에 Join 되는 것을 확인할 수 있다.


Client/Server 형 애플리케이션

1. Client 코드 작성

package terry.hazelcast;

 

import com.hazelcast.client.config.ClientConfig;

import com.hazelcast.client.HazelcastClient;

import com.hazelcast.core.HazelcastInstance;

import com.hazelcast.core.IMap;

 

public class GettingStartedClient {

 

    public static void main(String[] args) {

        ClientConfig clientConfig = new ClientConfig();

        clientConfig.addAddress("127.0.0.1:5701");

        HazelcastInstance client = HazelcastClient.newHazelcastClient(clientConfig);

        IMap map = client.getMap("customers");

        System.out.println("Map Size:" + map.size());

    }

}

 2. 서버 실행

% {hazelcast_home}/bin/server.bat를 실행



3. 클라이언트 코드를 실행

% java terry.hazelcast.GettingStartedClient

2월 11, 2014 12:35:46 오전 com.hazelcast.core.LifecycleService

INFO: HazelcastClient[hz.client_0_dev] is STARTING

2월 11, 2014 12:35:47 오전 com.hazelcast.core.LifecycleService

INFO: HazelcastClient[hz.client_0_dev] is STARTED

2월 11, 2014 12:35:47 오전 com.hazelcast.client.spi.ClientClusterService

INFO: 


Members [1] {

Member [192.168.219.154]:5701

}


Map Size:0


참고. 위의 예제에 사용된 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

 

  <groupId>terry</groupId>

  <artifactId>hazelcast</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>jar</packaging>

 

  <name>hazelcast</name>

  <url>http://maven.apache.org</url>

 

  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  </properties>

 

  <dependencies>

    <dependency>

            <groupId>com.hazelcast</groupId>

            <artifactId>hazelcast-all</artifactId>

            <version>3.1.3</version>

        </dependency>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>

  </dependencies>

</project>

 

노트

코드를 보면 알겠지만, 사용 방법이 다른 IMDG에 비해서 매우 쉽다. Learning Curve가 매우 낮다.

WSO2,Mule,Vert.x,Camel,Atlassian (이것도 레퍼런스 올라왔던데, 예전에는 Coherence를 사용했는데, 아마 Oracle 인수후, 이쪽으로 온듯) 등 여러 솔루션에 사용되고 있으며, 자체 Clustering 기능이 구현이 아주 쉽기 때문에, 다른 솔루션에 클러스터 구성용으로 많이 사용된다. 그외에서 message queue 기능, HTTP Session replication, Hibernate level2 캐쉬, Spring과 integration이 쉽기 때문에 사용성 면에서는 매우 높은 점수를 줄 수 있으나, 아직까지 Infinispan과의 성능 비교 글들을 보면, 열세인데, 이부분은 조금 더 리서치가 필요할듯


  • 내용 원본 : http://www.hazelcast.org/getting-started/
  • 테스트 소스 코드 https://github.com/bwcho75/hazelcast (향후 다른 코드 추가 예정)