hazelcast - In-Memory Data Grid

PUBLISHED 2011. 11. 7. 14:04
POSTED IN 공장


정의
Hazelcast 문서의 첫 줄에는 이를 다음과 같이 설명하고 있다.

Hazelcast is a clustering and highly scalable data distribution platform for Java.

조금 풀어서 써보면...
(1) 일단은 자바에서 사용할 수 있는 것이고
(2) 프로그램들을 그룹화(clustering)해서 걔들 간에 데이터를 가변적으로 분산시켜주기 위한 것이다.
저자의 의도대로 이해했는지 모르겠다.


조금 더 자세히
 


그림으로 표현하면 위와 같다. 
(1) 네트워크 상에 물려있는 2개의 프로그램이 있고, 이 프로그램은 hazelcast 기반으로 작성되었다. 
(2) hazelcast상에서 정의된 어떤 자료구조에 파란 옷을 입은 사람이 데이터를 쓰면 
(3) 이를 파란색 옷을 입은 사람도 꺼내갈 수 있고, 녹색옷을 입은 사람도 꺼내갈 수 있다.
즉, 물리적으로 떨어져 있는 두 프로그램이 하나의 자료구조를 공유할 수 있다.

이는 파란옷을 입은 사람이 데이터를 자료구조에 쓰면 hazelcast가 이 자료를 녹색옷 입은 사람에게도 전달하기 때문이고, 데이터 전달에는 multicast, tcp, aws가 사용될수 있다. 뒷단에서 데이터는 왔다 갔다 하겠지만 이 얼마나 아름다운가!! 

라이브러리는 apache license 2.0을 따르고 있으며 elastic memory, security 기능이 빠져있는 community edition은 무료로 다운로드 하여 사용할 수 있고, 이를 포함한 enterprise edition은 돈 주고 사야한다. (commercial license)


샘플 작성하기
hazelcast 기반으로 고리타분한 생산자-소비자를 만들어보자!! 생산자는 hazelcast에서 큐를 가져와 데이터를 생산하고, 소비자는 해당 큐에서 데이터를 꺼내오는 아주 아주 고전적인 실험이다. 프로그램 구조는 다음과 같다.


- conf/hazelcast.xml : hazelcast 환경설정 파일로, 생산자와 소비자가 공유할 자료구조와 통신방법에 대해 정의
- conf/log4j.properties : 로그를 찍기위한 환경설정 파일
- lib/hazelcast_1.9.4.4 : hazelcast 라이브러리 파일
- lib/log4j_1.2.15 : 로그 출력을 위한 라이브러리 파일
- mytest/listener : hazelcast가 생성하는 인스턴스에 대한 리스너로 이 실험에서는 로그를 찍어보기 위한 용도
- mytest/worker/Consumer.java : 생산자
- mytest/worker/Producer.java : 소비자
- mytest/worker/Worker.java : 생산자와 소비자의 슈퍼 클래스
- mytest/Main.java : 프로그램 시작 지점


소스
hazelcast.xml
- group : 이 프로그램이 속하는 그룹(clustering)에 대한 정보
- network : 통신 방법에 대한 정의
- queue : 생산자와 소비자가 사용할 큐에 대한 정보
- map : 큐에 대한 부가 정보


Worker.java (1) Thread를 상속받고 있으며
(2) Hazelcast에서 큐(BlockingQueue)를 가져와서 사용한다.


Producer.java (1) 3초 간격으로 데이터를 생산


Consumer.java (1) 큐에서 데이터를 꺼내서 출력


Main.java


실험결과
Producer 실행화면 (주요부분 발췌 및 설명추가)

Consumer 실행화면 (주요부분 발췌 및 설명추가) - 스레드로 작성되었기 때문에 프로그램 구동시점에 따라 로그 내용이 달라질 수 있음

'공장' 카테고리의 다른 글

Java 한글 인코딩 실험  (0) 2011.11.08
HTML5 - input type 실험  (0) 2011.11.04
HTML5 - localStorage 실험  (0) 2011.11.04