IMDG?
IMDG란 In-momory-data-grid로 아래 사진과 같은 형태의 아키텍쳐 입니다.
다음 그림과 같이 여러개의 메모리를 grid 형태로 보관하며, 메모리를 데이터베이스와 같은 형식으로 사용하는것입니다. 당연히 memory를 데이터 베이스로 사용한다면 더 빠르다는 장점이 있습니다.
또한 예전에는 memory의 크기가 작다는 한계가 있었지만, 기술적인 발전으로 memory의 크기가 상대적으로 증가하고 위와 같은 형태의 여러개의 memory를 하나의 memory처럼 사용하여 빠른속도로 데이터를 read/write를 할 수 있습니다.
IMDG 사용 예제
- Hazelcast
- Terracotta Enterprise Suite
- VMware Gemfire
- Oracle Coherence
- Gigaspaces XAP Elastic Caching Edition
- IBM eXtreme Scale
- JBoss Infinispan
IMDG vs Cache System
처음 IMDG를 공부하면서 캐시 시스템과 어떤게 다른지 헷갈렸는데 아래의 정리된 표를 가져와봤습니다.
Cache System | IMDG | |
읽기 | 캐시 안에 데이터가 있다면 데이터 베이스에서 읽어오지 않는다. 캐시 안에 데이터가 없을 때는 데이터베이스에서 읽어온다. |
언제나 IMDG에서만 읽어온다. 항상 메인 메모리에서 읽어오기 때문에 빠르다. |
쓰기 | 영구 저장소에 쓰기 때문에 캐시 시스템 적용과 쓰기 성능 향상은 관계 없다. | 영구 저장소에 데이터를 동기화하도록 구성하더라도, 제품에 따라 비동기 쓰기를 지원하는 제품이 있다. 비동기 쓰기를 지원하는 경우에는 매우 높은 수준의 쓰기 성능을 기대할 수 있다. |
Redis VS Hazelcast
간단하게 imdg개념에 대해서 알아보았습니다. 대표적인 IMDG 솔루션이 redis와 hazelcast가 있는것으로 알고있는데, 어떤 차이가 있는지 알아보았습니다.
Redis | Hazelcast | |
서버운영체제 | linux,windows.. | JVM |
지원언어 | c, c#, c++, java, js, haskell, pascal, D.. 등 대부분언어 | .net, c++, go, java, js, python |
데이터 구조 | map, list, set, queue등 제공 | |
deque, sortedset, priorityqueue, tansferqueue 등 더많이 제공 | ||
cluster 구성 | master/slave구조 | 모두 동등한 노드로 구성 |
장애조치 | 슬레이브 노드 마스터 노드로 승격 | hazelcast내 자동 장애 복구 blue/green deploy 전략 |
SQL 지원 | enterprise에서만 지원 | O |
데이터 Persistence | RDB, AOF 방식으로 저장 | partion$sharding 구성의 백업 java api, management-center 등을 사용하여 백업트리거 설정 |
API 및 기타 접근 방법 | propritetary protocol | jcahce, jpa, restful http API |
Scale out | 어느정도의 고가용성 보장 (redis cluster는 추후에 만들어짐) |
고가용성 보장 (처음부터 고가용성 cluster를 위해 만들어짐) |
thread | single | nuliti |
reference | 다수 존재 | 부족 |
관리자 UI tool | O | O |
license | opensource | opensource |
제가 생각했을때 가장 큰 차이점은 redis는 처음부터 imdg 사상을 가지고 생겨난것이 아닙니다. 실제로 imdg를 구성할 수 있게 해주는 redis cluster는 추후에 만들어졌으니까요
반대로 hazelcast는 imdg사상을 가지고 만들어 졌기에 imdg를 구성하는데 적합하다고 볼 수 있습니다.
하지만 아직 국내에는 hazelcast를 사용하는곳은 적기에 reference가 부족하다고 할 수 있습니다. 저라면 아직까지는 redis를 사용할 것 같긴합니다.... ㅎㅎ
참고
https://d2.naver.com/helloworld/106824
https://hazelcast.com/
https://redis.io/docs/reference/