Redis 아키텍처 살펴보기

이민석's avatar
Oct 24, 2024
Redis 아키텍처 살펴보기

결론

업무와 공부로 바쁜 엔지니어 분들을 위해서 아키텍처 리뷰 3줄 요약하겠습니다.

  1. Redis는 인메모리 데이터베이스이다.

  2. Redis의 구성은 대표적으로 Standalone, Sentinel, Cluster 3가지가 있다.

  3. ElastiCache for Redis OSS를 생성할 때,
    클러스터 모드를 비활성화하면 Sentinel 방식으로 생성되며
    클러스터 모드를 활성화하면 Cluster 방식으로 생성된다.

Redis Overview

Redis의 특징은 수없이 많지만 가장 중요한 특징은 인메모리 DB라는 점입니다.
이에 따라서 메모리가 가득찰 경우 알고리즘*에 따라서 선택된 대상이 지워지거나
메모리 및 Redis의 장애가 발생할 경우 메모리에 저장된 데이터가 소실될 수 있습니다.

따라서 Redis Architecture에서 중요한 부분은
각 Architecture 별로 가용성 및 데이터 보존 측면에서
어떤 부분이 다른지에 대한 이해도가 필요하다고 생각합니다.

또한 이런 이해도를 기반으로
최종적으로 ElastiCache의 아키텍처를 선택해야 합니다.

Redis Architecture

Redis의 아키텍처 구성은 크게 3가지가 존재합니다.

Redis Architecture Types

기본적으로 Redis를 실행하면 Standalone으로 실행됩니다.
이 과정에서 Redis는 단일 R/W* 지점만 가지기 때문에 SPoF*를 가진다고 할 수 있습니다.

R/W* : Read / Write, 읽기 / 쓰기
SPoF* : Single Point of Failure, 단일 장애점

Redis의 읽기 가용성을 개선하기 위해서 Sentinel으로 실행할 수 있습니다.
이 과정에서 Redis는 단일 W 지점과 복수의 R 지점을 가지게 됩니다.
따라서 단일 W 지점이 SPoF을 가진다고 할 수 있습니다.

Redis의 쓰기 가용성까지 개선하기 위해서는 Cluster으로 실행할 수 있습니다.
이 과정에서 Redis는 복수의 클러스터를 활용하기 위해서 Sharding 기법으로
데이터를 추가적으로 분할하여 각 클러스터에 임시 저장하게 됩니다.
따라서 Cluster의 수 변경이 발생할 경우에는 Shard Rebalancing* 작업이 발생합니다.

Shard Rebalancing
숫자가 변경됨에 따라서 샤딩을 하는 기준이 변경되고
이에 따라서 데이터가 저장되는 공간이 재정렬되는 현상이 발생
이 과정에서 Redis는 사용이 불가능하기에 Offline Shard Rebalancing이라고 하며,
만약 Redis의 가용성을 보장하고 싶다면 Online Shard Rebalancing 기법을 쓴다.

K8s Redis 사용하기?

K8s를 사용하여 서비스를 운영하고 있을 경우
관리형 DB보다 더 저렴하다는 이유로 K8s 안에 Redis를 사용을 검토할 수 있습니다.
각 사례 별로 장단점에 대해서 기술하고자 합니다

구분

장점

단점

K8s Sidecar Redis

손쉽다

R/W 가용성 및 대역폭이 낮다
인메모리 백업 및 복구 전략이 없다

K8s Redis Sentinel

R 가용성 및 대역폭이 상대적으로 높다

인메모리 백업 및 복구 전략이 없다

K8s Redis Cluster

R/W 가용성 및 대역폭이 제일 높다

Rebalancing을 고려해야 한다
인메모리 백업 및 복구 전략이 없다

물론 AWS K8s 내부 통신의 경우
AWS VPC CNI의 독특한 작동 방식에 의해서
네트워크 통신 레벨의 인켑슐레이션 및 디캡슐레이션이 발생하지 않아
네트워크 통신 측면에서의 효율성은 Redis SaaS를 사용하는 것에 비해 유리할 수 있습니다.

하지만
서비스 운영에서 심각한 단점들이 있는 것으로 보이며
이런 단점을 위해서 별도의 노동력이 들어간다는 점에서 안좋은 것 같습니다.

일부 dev 및 test 환경에서는
비용 절감을 위해서 사용하는 것을 검토할 수도 있겠으나
이 경우에도 서버리스 Redis의 선택이 더욱 합리적일 수도 있다고 생각합니다.

ElastiCache Redis

ElastiCache Redis OSS 이해와 최적화 노드 선택하기라는 글에서
ElastiCache에서는 클러스터 모드에 따라서 아키텍처 및 장단점이 달라짐을 알았습니다.

이런 특징은
기본적으로 Redis Architecture의 Sentinel, Cluster 모드의 장단점과 매우 유사합니다.

따라서 어떠한 ElastiCache for Redis를 선택할 때에는
R/W 작업에 어느 정도의 가용성 및 대역폭이 필요한지 고민 및 계산해보면 좋을 것 같습니다.

참고 자료

Share article

Unchaptered