정의
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 |