목차
Memcached란?
- 무료로 사용할 수 있는 오픈소스이며 분산 메모리 캐싱 시스템이다.
- 데이터 베이스의 부하를 줄여 동적 웹 어플리케이션의 속도개선을 위해 사용되기도 함
- DB나 API호출 또는 렌더링 등으로부터 받아오는 결과 데이터를 작은 단위의 key - value 형태로 메모리에 저장하는 방식
- Memcached는 필요량보다 많은 메모리를 가졌을 때, 시스템으로부터 메모리를 사용하고 필요로하는 메모리가 부족한 경우 이를 더 쉽게 가져다 사용할 수 있도록 만들어 줌
- Memcached 사용여부에 따른 메모리 운영방식
Memcached를 사용하지 않을 경우
각 노드는 완벽하게 독립적임
이 경우 고전적으로 사용되던 방식으로 총 캐시 크기가 웹팜(여러 대를 사용해서 웹사이트를 구축한 형태)의 실제 용량의 일부분으로만 사용이 가능하다는 점에서 낭비가 심하다. 각각의 서버에 할당된 캐시 크기만큼 사용할 수 있으므로 웹팜의 캐시 사이즈는 128MB이지만 각 서버에서 사용할 수 있는 사이즈는 65MB이다.
Memcached를 사용할 경우
Memcached를 사용할 경우 Memcached로 묶인 모든 서버는 동일한 가상 메모리 풀을 공유한다. 이것은 특정한 항목이 주어졌을 때, 전체 웹 클러스터에서 항상 동일한 위치에 저장되고 검색되어짐을 뜻한다. 또한 응용프로그램에 대한 수요가 증가하여 서버증설에 대해 필요성을 느낄 때, 정기적으로 접근되어져야 하는 데이터의 관점에서도 수요가 증가한다고 볼 수 있다.
Memcached를 적용하면 분산 메모리 캐시를 적용하게 되는 것이므로 캐싱을 통해 DB나 API 호출에 대한 횟수를 줄일 수 있고 이로 인해 응용프로그램의 수요나 DB 데이터 접근에 대한 부하를 줄여 성능을 향상할 수 있다.
![](https://blog.kakaocdn.net/dn/bhep4E/btryxzvuyT8/EXXS1suk23kKJRC7KH5XxK/img.png)
Redis란
redis는 오픈소스로서 데이터베이스(NOSQL DBMS)로 분류가 되기도 하고 Memcached와 같이 인메모리 솔루션으로 분류되기도 한다.
성능은 memcached에 버금가면서 다양한 데이터 구조체를 지원함으로써 Message Queue, Shared memory, Remote Dictionary 용도로도 사용될 수 있으며, 이런 이유로 인스타그램, 네이버 재팬의 LINE 메신져 서비스, StackOverflow,Blizzard,digg 등 여러 소셜 서비스에 널리 사용되고 있다.
NoSQL관점에서 봤을 때 redis는 가장 단순한 키-밸류 타입을 사용하고 있다. 데이터 모델을 복잡할수록 성능이 떨어지므로 redis는 단순한 구조를 통해 높은 성능을 보장한다고 할 수 있다.
NoSQL에는 다양한 제품이 있지만 이 중, redis가 주목받는 이유는 다음과 같다.
- 데이터 저장소로 가장 입/출력이 빠른 메모리를 채택
- 단순한 구조의 데이터 모델인 키- 밸류 방식을 통해 빠른 속도를 보장
- 캐시 및 데이터스토어에 유리
- 다양한 API지원
redis, memcached, 구아바 라이브러리등 인메모리 캐시방식을 적용한 제품 중 redis는 global cache 방식을 채택하였다. global cache 방식은 네트워크 트래픽이 발생하기 때문에 java heap영역에서 조회되는 local cache의 성능이 더 낫지만, WAS 인스턴스가 증가할 경우엔 캐시에 저장되는 데이터 크기가 커질수록 redis 방식이 더 유리하다.
redis는 급격한 사용자가 집중되는 상황이나 대규모의 확장이 예정되어 있는 환경에 적합하다. global cache 방식이 적용되어 was 인스턴스 확장에는 유리하지만 cache 및 redis 세션 등 관리 포인트가 늘어난다는 단점이 존재한다.
Redis vs Memcached
Redis (Remote Dictionary Storage, 레디스)와 Memcached(맴캐시드)는 유명한 오픈소스인, 인메모리 데이터 저장소이다. 둘 모두 고성능이고 쉽다. 하지만 엔진으로 사용할 때 차이를 반드시 고려야한다. 맴캐쉬드는 명료하고 단순함을 위하여 개발한 반면, 레디스는 다야한 용도에 효과적으로 사용할 수 있도록 많은 특징을 가지고 개발되었다.
Redis | Memcached | |
공통점 | 1. 빠른 응답 시간(1ms이내) 2. 개발의 용이성 3. 데이터 파티셔닝 : 데이터를 노드에 분산 하여 저장가능, 수요가 증가 할 때 더 많은 데이터 효과적으로 처리하기 위하여 스케일아웃이 가능하다. 4. 다양한 프로그래밍 언어 지원 |
|
차이점 | 1. 더욱 다양한 데이터 구조 : List, Set, 정렬된 Set, Hash, Bit배열 등 다양한 자료구조 제공 2. SnapShots : 레디스는 트겆ㅇ시점에 데이터를 저장하여 파일 보관이 가능하여 장애상황시 복구에 용이 3. 복제 : Master -Salve 구조로, 여러개의 복제본을 만들 수 있다. 따라서 데이터베이스 읽기를 확장가능 4. 트랜잭션 : 트랜잭션이란 데이터베이스 상태를 변경시키는 작업 단위이며, 원자성, 일관성, 독립성, 지속성의 특징을 가지고 있다. Redis는 이러한 특징을 지원한다. |
멀티스레드를 지원하기 때문에, 멀티프로세스코어를 사용할 수 있다. 따라서 스케일업을 통해 더욱 많은 작업처리를 할 수 있다. |
주의점 | 위의 특징만 보면, 모든 상황에서 Redis를 선택해야할 것 같습니다. 하지만, Redis는 싱글 쓰레드이기 때문에, 1번에 1개의 명령어만 실행할 수 있습니다. Keys(저장된 모든키를 보여주는 명령어)나 flushall(모든 데이터 삭제)등의 명령어를 사용할 때, 맴캐쉬드의 경우 1ms정도 소요되지만, 레디스의 경우 100만건의 데이터 기준 1초로 엄청난 속도 차이가 있습니다. 또한, RDB 작업(특정 간격마다 모든 데이터를 디스크에 저장)이 매우 오래걸립니다. AWS, 60기가 메모리 기준으로 10분이나 소요됩니다. Redis 장애에 원인의 대부분이 해당 기능 때문에 발생하기 때문에 사용할 때 주의해야합니다. |
단, 공통점의 스케일 아웃은 Redis에 해당된다. 즉, Memcached의 확장성은 Scale up(vertial)을 통해서 얻을 수 있는 반면, Redis는 Scale out(horizontal) 왜냐하면 레디스는 복제가 가능하며 Memcached 복제가 불가능하다.
Data Eviction 전략
캐시는 유한한 리소스를 지니므로, 결국 메모리에 자리잡은 자원을 언젠가 삭제해야한다. Memcache 같은 경우 LRU(Least Recenly Used) 알고리즘만을 채택하고 있다. 반면에 Redis의 경우 보다 다양하고 미세한 방법을 제공한다.
참고
https://brownbears.tistory.com/43
Memcached, Redis
Memcached Memcached란? 무료로 사용할 수 있는 오픈소스이며 분산 메모리 캐싱 시스템 데이터 베이스의 부하를 줄여 동적 웹 어플리케이션의 속도개선을 위해 사용되기도 함 DB나 API호출 또는 렌더링
brownbears.tistory.com
'Back-end > cache' 카테고리의 다른 글
Simple Spring Memcached(SSM) ... 작성중 (0) | 2022.04.05 |
---|---|
[Server] Cache(캐시) (0) | 2021.12.10 |