레디스란??
- NoSQL으로 Key-Value 타입 저장소이다.
- 영속성을 지원하는 인메모리 데이터 저장소이다.
- 읽기 성능 증대를 위해 Replication 지원.
- 쓰기 성능 증대를 위한 샤딩을 지원.
- 문자열뿐만 아니라 리스트, 해시, 셋 등 다양한 데이터 형식을 지원.
- 1ms 이하 빠른 응답시간 지원한다.
- 파티셔닝 지원으로 스케일 아웃이 쉽다.
레디스와 멤캐시드와의 차이
멤캐시드 또한 메모리 객체 시스템
멤캐시드는 멀티쓰레드를 지원해 스케일업을 통해 많은 다중 작업 처리가 가능하지만 레디스는 싱글 스레드 기반이다.
멤캐시드는 문자열만 지원한다
그러나 레디스는 문자열뿐만 아니라 리스트, 해시, 셋 등 다양한 데이터 형식을 지원한다. 스냅샷을 지원해 장애 상황시 복구에 이용할 수 있다. Master-Slave 구조를 통해 가용성 클러스터를 지원한다.
단점으로는 모든 키를 보여주거나 모든 데이터 삭제 명령어 사용시 멤캐시드에 비해 오랜 시간이 소요된다.
추가로 특정 간격으로 데이터에 저장하는 시간도 오래 걸리며 장애의 원인이 될 확률이 높다.
레디스 사용 이유는?
기본적으로 디스크가 아닌 램에 올려 사용하기 때문에 속도가 압도적으로 빠르다.
예를 들어 상품 조회가 갑자기 몰려 1시간 동안 100만건의 데이터베이스 조회가 발생한다고 가정해볼때 캐시 기능을 사용하게 되면 이미 캐시된 데이터이기 때문에 빠른 속도로 조회가 가능하게 된다.
메모리 관리의 필요성
레디스는 일반 데이터베이스와 달리 메모리를 사용하기 때문에 메모리 용량이 부족할 때가 많습니다.
메모리 부족으로 인한 메모리 스왑이 발생할 수 있습니다. 메모리가 부족할 때 부족한 공간을 위해 하드 디스크에 SWAP용 공간을 만들어 임시로 저장합니다. 여기까진 괜찮습니다. 스왑하는 과정 그 잠시동안 레이턴시가 발생하게 됩니다.
사용 목적에 따라 레디스 메모리를 설정해야 서비스의 장애를 대처해낼 수 있습니다.
메모리 단편화 문제
레디스는 jmalloc을 사용해 메모리 할당을 수행한다고 합니다. 페이지 사이즈를 4096byte로 잡고 1byte의 데이터만 넣어도 4096byte를 할당하게 됩니다. 이러한 현상을 내부단편화라고 합니다.
이를 보완하기 위해선 다양한 데이터 타입의 사용을 줄이고 유사한 크기의 데이터를 사용해야 한다는 점
Replication
Redis는 영속성, 가용성을 위해 복제를 지원. Master-slave 관계로 Master에 주로 쓰기 작업을 수행하게 하고 여러 대의 Slave를 두어 상대적으로 요청이 많은 읽기 작업을 수행하게 한다. 동기화 방법은 Non-Blocking으로 Master에 저장된 내용을 Slave 노드가 복제하는 방식. 데이터 복제가 비동기 방식으로 이뤄지기 때문에 마스터 노드의 비정상 종료 시엔 데이터 유실이 발생할 수 있다.
레디스의 모드는 총 3가지이다.
- Standalone Mode 하나의 Redis로 운용하는 방식이다.
- Sentinel Mode 센티넬은 마스터 슬레이브 노드를 모니터링하는 노드이다. 상태 체크, Failover 기능을 자동으로 지원해준다. 비정상 종료시에 Slave를 Master로 자동 승격한다. 승격 조건은 최소 3개의 센티넬이 있어야 하며 센티넬의 과반수가 찬성해야 Failover를 시작한다.
- Cluster Mode 센티넬보다 최신 기술. 확장성 및 고가용성을 가지고 있다. Failover와 샤딩을 지원. 해시 함수를 사용해 클러스터에 자동으로 할당해줍니다.
'언어 & 라이브러리 > 레디스' 카테고리의 다른 글
[레디스] 캐싱 전략에 대해 알아보자 (0) | 2022.07.06 |
---|---|
[레디스] 레디스 클러스터를 도커에서 구성해보자 (0) | 2022.03.17 |
[레디스] 메모리 관리 기법 RDB vs AOF 차이 (0) | 2022.03.17 |
[레디스] 레디스 Master-Slave를 도커에 올려보자 (0) | 2022.03.17 |
댓글