Developer(s) | Hazelcast Team |
---|---|
Stable release | 2.4 / October 17, 2012 |
Development status | Active |
Written in | Java |
Operating system | Cross-platform |
Type | In memory data grid |
License | Apache License 2.0 |
Website | http://www.hazelcast.com/ |
Hazelcast is an open source in memory data grid for Java.
Hazelcast architecture is peer-to-peer. It supports dynamic discovery using multicast or TCP/IP. After discovery, node communication is only TCP/IP using Java NIO.
Contents[hide] |
[edit]Hazelcast Features
- Distributed Java data structures (Queue, Set, List, Map, Lock, Topic)
- Distributed Executor Service
- Distributed Multimap
- Support for transactions
- J2EE container integration via JCA
- Hibernate 2nd level cache
- Index and Query support
- Dynamic clustering, scaling and partitioning
- WAN (Wide Area Network) Replication
- Decentralized. Each node in the cluster has the same role.
- Data is distributed across the cluster (so each node contains different data).
[edit]Getting Started
Following is the sample usage of distributed hash map using Hazelcast.
import java.util.Map; import java.util.Collection; import com.hazelcast.core.Hazelcast; Map<String, Person> mapPeople = Hazelcast.getMap("people"); mapPeople.put("1", new Person("Jack")); mapPeople.put("2", new Person("Avi")); Collection<Person> colPeople = mapPeople.values(); for (Person person : colPeople) { // print person }
[edit]See also
[edit]External links
정의
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)에 대한 정보
- queue : 생산자와 소비자가 사용할 큐에 대한 정보
- map : 큐에 대한 부가 정보
Worker.java (1) Thread를 상속받고 있으며
(2) Hazelcast에서 큐(BlockingQueue)를 가져와서 사용한다.
Producer.java (1) 3초 간격으로 데이터를 생산
Consumer.java (1) 큐에서 데이터를 꺼내서 출력
Main.java
더보기
실험결과
Producer 실행화면 (주요부분 발췌 및 설명추가)
Consumer 실행화면 (주요부분 발췌 및 설명추가) - 스레드로 작성되었기 때문에 프로그램 구동시점에 따라 로그 내용이 달라질 수 있음
출처 - http://case35.tistory.com/226
'Computer Science > Cache' 카테고리의 다른 글
EHCache (0) | 2013.02.11 |
---|---|
Memcached 설치 및 사용 방법 (0) | 2012.11.06 |
Memcached의 확장성 개선 (0) | 2012.11.06 |
memcached를 적용하여 사이트 성능 향상 (0) | 2012.11.06 |
Memcached 구현 소개 (0) | 2012.11.06 |