인메모리 컴퓨팅이란?
하드웨어 관점 : 데이터 분석 시스템은 세가지 구성요소로 이루어져 있다.
1. 연산을 수행하는 프로세서
2. 처리의 대상이 되는 데이터를 저장할 저장장치
3. 이 둘 사이에 데이터를 전송하는 전송할 시스템
현재 사용되는 시스템에서의 병목은 단연 저장장치이다. 정확히 말하면 대용량 저장장치로 사용되는 하드디스크 시스템이 전체 시스템의 성능을 저하하는 병목이다.
이러한 병목 현상을 극복하기 위해서 오랫동안 사용되고 발전된 방법은 캐시—메모리—하드디스크로 구성되는 메모리 계층 구조를 사용하는 것이었다.
하지만, 기술의 발전에 따라 처리해야 할 데이터양 증가 기존의 캐시 시스템으로 지원 불가.
이를 해결하기 위해 인메모리 컴퓨팅 사용
즉, 병목현상을 해결하기 위한 대안으로 데이터를 메모리에 보관·처리하고 하드디스크 데이터를 안전히 보관(stash)하기 위해 사용하는 구조
인메모리 데이터 그리드 (IMDG) 란?
인메모리 데이터 그리드 (IMDG)는 데이터를 메모리에 저장하고 처리하는 분산 데이터 저장 및 처리 시스템입니다.
IMDG는 여러 대의 컴퓨터 노드로 구성된 클러스터에서 실행되며, 각 노드의 메모리를 사용하여 데이터를 저장하고 분산 처리 작업을 수행합니다.
- 다수의 컴퓨터 메모리(RAM)를 클러스터링 하여 하나의 큰 메모리 저장소로 구축
- 데이터 유실방지 및 복구를 위해 여러 서버에 데이터를 분산, 복제 관리
- 메모리(RAM) 클러스터의 수평적 확장이 가능하여 무제한 용량 지원
- 데이터는 객체 지향 및 비 관계형 데이터 모델로 관리
- 사용자의 데이터 요청은 다수의 컴퓨터에서 병렬로 처리
- 메모리(RAM) 외 디스크, DBMS 등의 저장소에서 데이터 영구 보관 가능
Hazelcast 는?
- 헤이즐캐스트(Hazelcast)는 자바 기반의 오픈 소스 인메모리 데이터 그리드(IMDG)입니다. 이 제품을 개발하는 회사의 이름이기도 합니다.
https://github.com/hazelcast/hazelcast
Hazelcast 특징
- 오픈소스 입니다.
- Jar 파일로만 배포됩니다.
- 모든 데이터를 메모리(RAM)에 저장하여 빠른 읽기 및 업데이트를 수행하도록 설계되었습니다.
- 피어투피어 구성으로 SPoF 가 없도록 설계되었습니다. 클러스터의 각 멤버는 기능적으로 동일하고 각각 동일한 양의 데이터를 저장하고 동일한 양의 처리를 수행합니다.
- 기존 자바 어플리케이션에 포함하거나 클라이언트/서버 모드로 사용할 수도 있습니다.
- 메모리 크기와 컴퓨팅 요구사항이 증가하면 새 멤버를 Hazelcast 클러스트에 조인하여 확장할 수 있습니다.
- 멤버 오류에 대한 복원력이 있습니다. 데이터 백업은 전체 클러스터에 분산됩니다.
- 클러스터 멤버는 항상 서로를 알고 있습니다.
- redis와 다르게 멀티스레드로 동작하고, 제공하는 컬렉션들도 자바의 컬렉션과 사용법이 같아 사용하기 편합니다
Redis가 나왔는데 다른 대표적인 Im-MemoryDB인 Memcached도 보자
Memcached의 특징
- 데이터 타입을 String만 지원한다.
- 데이터 저장은 오직 메모리에만 저장한다.
- 멀티쓰레드를 지원한다.
- 캐시 용량은 Key는 250byte, Value는 1MB를 지원한다.
- 수평적 확장이 가능하다.
Memcached 안쓰는 이유 및 단점
Memcached는 적은 양의 데이터를 임시로 저장할 수 있는 장점이 있습니다.
빠른 다중 처리는 다중 스레딩의 이점입니다.
그러나 그 외에는 모든 것이 부정적이다.
Hazelcast 의 적절한 사용처
- Cache, 특히 분산 확장성을 갖춘 오픈소스 JCache 구현체
- 최고의 성능, 확장성 및 짧은 대기 시간 요구 사항이 있는 응용 프로그램을 위한 기본 데이터 저장소
- 메모리 내 NoSQL 키 값 저장소
- 응용 프로그램 간의 빠른 속도와 확장성으로 통신/구독 게시
- 응용 프로그램을 위한 고가용성 분산 캐시
Hazelcast Spring Boot에서 사용해보기
https://github.com/zbum/spring-boot-hazelcast-example
Hazelcast를 이해하기 위한 간단한 코드 작성하기
'1.프로그래밍 > 개발' 카테고리의 다른 글
Connection Timeout과 Read Timeout (3) | 2024.10.29 |
---|---|
Docker 란? (0) | 2024.10.24 |
[NHN Academy] NHN Academy 인증 과정 (9) | 2023.03.24 |
[NHN Academy] NHN Academy 인증 과정 프로젝트 발표 (0) | 2023.03.24 |
[JWT] JWT 토큰이란? 토큰 기반 인증 방식 (0) | 2023.01.16 |