인 메모리 컴퓨팅 이란?
애플리케이션이 운영을 위한 데이터를 하드 디스크가 아닌 메인 메모리에 모두 올려서 서비스를 수행하는것을 말한다. 연산을 위한 영역으로만 여겨졌던 메모리 영역을 대량의 데이터를 저장하여 처리할 수 있는 공간으로 사용. 예전에는 메인 메모리 가격이 높아서 불가능 하였지만, 지금은 가격의 하락으로 가능하다.
인 메모리 컴퓨팅 기술은 응용 서비스의 클라우드화, 모바일화, 글로벌화로 인하여 발생하는 익스트림 트랜잭션의 고성능 처리를 지원하기 위한 기반 기술로 활용이 확대 되고 있다. 빅데이터와 같이 많은 트랜잭션을 처리하고 효과적으로 분석하기 위해서 실시간성이 중요한데, 인 메모리 컴퓨팅 기술은 이러한 실시간성을 제공하기 위한 기반 플랫폼으로 활용이 될 전망이다.
최근에는 In-memory DBMS , 분산 환경에서 응용의 성능을 높일 수 있는 분산 캐시층을 제공하는 In-memory Data Grid가 있습니다.
인 메모리 DBMS 방식 정말 유용한가 ?
인 메모리 DBMS는 메인 메모리에 레코드들을 저장한다는 것이 기존의 디스크 DBMS 방식과 가장 큰 차이점이라고 할 수 있다. 이러한 차이점으로 디스크 DBMS와의 커다란 성능 차이를 가져오게 된다.
디스크 DBMS의 경우 디스크에 저장된 내용을 메인 메모리로 로딩을 해야 하며 실행을 위해서는 CPU로 해당 데이터를 재 전송해야 한다. 이에 반해서 인-메모리 DBMS는 메인 메모리에서 바로 CPU로 데이터를 전송만 하면 되므로 구조상으로 간단하다.
하지만 메모리 엑세스가 디스크 엑세스 보다 훨씬 빠르다는것은 전혀 새로운 사실이 아니다.
기존의 DBMS는 이러한 문제점을 캐쉬(Cache) 를 통해 해결하고 있었다. 즉 자주 사용되는 레코도들은 캐싱을 통해 미리 메모리에 넣어두고 디스크를 통한 입-출력에서 발생하는 속도 저하 문제를 해결한 것이다.
그렇다면 인-메모리 방식은 기존 방식 보다 얼마나 빠른가?
캐싱을 한다고 해도 설계상의 차이점으로 당연히 인-메모리 DBMS가 좋은 성능을 보인다.
인-메모리 DBMS의 단점
우선 안정성이 떨어진다. 정전이나 정전기 발생시 안전성이 크게 떨어진다. 메인 메모리는 휘발성 주기억 장치로 전력이 끊기면 저장된 방대한 데이터가 전부 사라진다.
< 22.1.20 추가 >
[ Redis Pipelining ]
Redis 는 고성능 key-value store 이지만 TCP 기반의 Client - Server 모델을 따르기에 아래와 같이 동작하고, 네트워크 IO에 대한 병목이 존재할 수 밖에 없다. ( 물리적인 네트워크 지연, 3-way handshake 등의 이유로 )
- Client 가 Server에게 전송한 쿼리는 소켓을 통해 읽혀지고, 보통 blocking 형태로 response 된다.
- Server는 명령을 처리하고 응답을 다시 클라이언트로 보낸다.
따라서 아래의 작업은 각각 1회씩 request 와 response를 거친다. ( 총 5번의 requset / response 가 발생한다.)
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> incr a
(integer) 2
127.0.0.1:6379> incr a
(integer) 3
127.0.0.1:6379> incr a
(integer) 4
127.0.0.1:6379> incr a
(integer) 5
redis가 로컬에서 동작하고 있다면, 클라이언트와 서버 간의 네트워킹 링크가 굉장히 빠르겠지만, 두 호스트 간에 물리적으로 많은 홉이 사용되었다면 지연이 발생될 가능성이 크다. ( 클라이언트 - 서버 - 클라이언트 순서로 패킷이 흘러야하기 때문에 )
이 시간을 RTT (Round Trip Time ) 이라고 한다. 만약 서버가 초당 100k ( 100,000 ) 개의 요청을 처리할 수 있다고 하더라도, RTT가 250ms 이라면 초당 최대 4개의 요청만을 처리할 수 있게 된다. 로컬에서 동작하는 Redis의 경우엔 RTT가 훨씬 더 짧지만, 많은 read/write를 수행하기 위해 서는 여전히 많은 양이다.
* 1000 ms(밀리 세컨) = 1s(세컨)
이런 병목을 개선하기 위해 Redis에서 pipelining API 를 제공한다.
이를 통해 클라이언트는 복수 개의 작업을 쌓아 한번에 전송 할 수 있게 된다.
따라서 응답을 전혀 기다리지 않고 여러 명령을 한꺼번에 서버로 보낼 수 있고, 응답을 한번에 읽을 수 도 있다.
'DB > redis' 카테고리의 다른 글
Redis 데이터 타입 (0) | 2022.01.10 |
---|---|
도스창에서 redis 조작. How To Manage Redis Databases and Keys (0) | 2022.01.07 |