본문 바로가기
참고

Redis Architecture OverView

by 상국이 2021. 6. 27.
728x90

클러스터 구성

  • 클러스터
    - 클러스터는 캐시 노드 모음으로 노드에서 Redis 캐시 엔진이 실행됨.
    - Redis(클러스터 모드 활성화 상태) 클러스터에서 Clustering은 데이터를 분산시키는 방법
    - 즉 한 Node의 자원만 사용하는 것이 아닌 다른 Node 자원 또한 사용하여 전체 computing 자원을 사용함

  • 샤드(노드 그룹)
    - 샤드에 여러 노드가 있으며 노드 중 하나의 노드는 읽기/쓰기 기본 노드로 사용됨
    - 기본 노드 이외에 다른 모든 노드는 기본 노드의 읽기 전용 복제본 역할

  • 복제(Replication)
    - Master/Slave 구조로 Cluster Node가 장애가 발생하더라도 Redis가 멈추지 않고 동작하여 가용성 보장
  • * Redis(클러스터 모드 비활성화됨) 클러스터와 Redis(클러스터 모드 활성화됨) 클러스터 비교표
기능 Redis(클러스터 모드 비활성화됨) Redis(클러스터 모드 활성화됨)
수정 가능 복제본 노드 추가/삭제 노드 유형 확장 지원 제한됨
데이터 파티셔닝 X O
샤드 1 1 ~ 90
읽기 전용 복제본 0 ~ 5
중요
복제본이 없으며 노드에 장애가 발생하면 전체 데이터가 손실
샤드당 0 ~ 5
중요
복제본이 없으며 노드에 장애가 발생하면 전체 데이터가 손실
자동 장애 조치가 포함된 다중 AZ 최소 1개의 복제본 필요 필수
스냅샷 (백업) O(단일 .rdb 파일을 생성) O( 샤드에 고유한 .rdb 파일을 생성)
복원 O O
지원되는 버전 모든 Redis 버전 Redis 3.2 이상
엔진 업그레이드 가능 여부 가능(제약사항 있음) 가능(제약사항 있음)
암호화 버전 3.2.6 4.0.10 이상. 버전 3.2.6 4.0.10 이상.
HIPAA 규정 준수 버전 3.2.6  4.0.10 이상. 버전 3.2.6  4.0.10 이상.
PCI DSS 준수 버전 3.2.6  4.0.10 이상. 버전 3.2.6  4.0.10 이상.
온라인 리샤딩 해당 사항 없음 버전 3.2.10 이상.

 

출처: <https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/Replication.Redis-RedisCluster.html>

 

 

(2) 데이터 분산방식

  • Cluster Data Sharding
    - 클러스터 마스터가 3대이면 데이터가 3대에 나누어 저장
    ex) 100개의 데이터가 있다면 1번 마스터에 33개, 2번 마스터에 다른 33개, 3번 마스터에 나머지 34개가 저장되는 방식
    - 데이터를 나누는 방식은 키에 hash 함수를 적용해서 값을 추출하고, 이 값을 각 마스터 서버에 할당
    ex) 1~100까지 나오는 hash 함수가 있고, 클러스터 마스터 서버가 3대이면 1번 서버에 1~33까지, 2번 서버에 34~66까지, 3번 서버에 67~100까지 할당

(3) 데이터 저장방식

  • 캐싱방식
    1. 지연로딩
    - 필요 시 데이터를 캐시에 로드하는 방식
          A. 애플리케이션에서 데이터를 요청할 때마다 ElastiCache 캐시에 먼저 요청
          B. 데이터가 캐시에 있으며 최신 상태인 경우 ElastiCache가 데이터를 애플리케이션에 반환
          C. 캐시에 데이터가 없거나 캐시에 있는 데이터가 만료된 경우 애플리케이션에 데이터를 반환하는 데이터 스토어에서 애플리케이             션이 데이터를 요청
          D. 애플리케이션에서는 다음에 요청할 때 더 빠르게 검색할 수 있도록 해당 스토어에서 수신한 데이터를 캐시에 작성
    2. 동시기록
          - 동시 기록 전략은 데이터베이스에 데이터를 작성할 때마다 데이터를 추가 또는 캐시의 데이터를 업데이트
          - 키가 만료될 때까지의 시간(TTL)을 지정하여 리소스 관리 필요
    3. 캐시 Eviction 정책
          - noeviction : 메모리 제한에 도달하여 클라이언트가 더 많은 메모리를 사용할 수있는 명령을 실행하려고 할 때 오류를 리턴 (대                                부분의 쓰기 명령, DEL 및 몇 가지 예외)
          - allkeys-lru : 가장 최근에 사용되지 않은 (LRU) 키를 먼저 제거하여, 새 데이터를위한 공간을 추가
          - volatile-lru : 가장 최근에 사용되지 않은 (LRU) 키와 만료 집합이있는 키를 먼저 제거하여, 새 데이터 공간을 추가
          - Allkeys-random : 새 데이터를 추가 할 수 있도록 임의의 키를 제거
          - volatile-random : 새 데이터를 추가 할 공간을 만들기 위해 무작위 키를 제거하지만 만료 세트가있는 키만 제거
          - volatile-ttl : 새 데이터를 저장할 공간을 만들기 위해 만료 집합이있는 키만 제거하고 TTL (Short Time to Live) 키를 먼저 제                                거
  • 디스크에 쓰는 경우
    1. RDB
         - 데이터가 덤프가 저장되는 파일명은 디폴트로 dump.rdb이며 RDB(binary 형태)라고도 함.
         - 특정 시점의 데이터를 디스크에 쓰는 방식(스냅샷 방식)
         - 자식 프로세스를 생성(fork)해서 디스크 쓰기를 수행하는 방식으로 부모 프로세스에 영향을 주지 않음.
         - 일일 자동 백업을 활성화하면 ElastiCache가 클러스터 백업을 생성하고 캐시의 모든 데이터를 Redis RDB 파일에 저장
         - *.rdb를 통한 특정시점으로 복구 가능
    2. AOF(append-only file)
         - AOF 파일은 default로 appendonly.aof 파일에 기록되며 입력/수정/삭제 명령이 실행될 때 마다 기록
             (다중 AZ 복제 그룹에는 AOF가 비활성화되며 Redis 버전 2.8.22 이상에서는 AOF가 지원되지 않음)

  • 사용 가능한 메모리에 따른 백업 방법(버전 2.8.22 이상)
    - 메모리가 부족한 경우 ElastiCache에서 forkless 방법을 사용
    - 메모리가 여유있는 경우 기존 처럼 Redis 프로세스에서 하위 프로세스를 생성하여 백업

 

(4) 데이터 타입

타입 특징
Strings 문자열 Text 문자열, Integer 같은 숫자나 JPEG같은 Binary File까지 저장
key 데이터의 최대 크기 512MB

Commands
:http://redisgate.kr/redis/command/strings.php
Lists string들의 집합으로 저장되는 데이타 형태는 set 유사
key 입력할 있는 요소의 최대 개수는 4,294,967,295
입력된 순서대로 저장되며 큐와 스택으로 사용
value
저장되면 키가 생성되며, value 없으면 키가 삭제되므로 별도의 생성 작업 필요없음

Commands
:http://redisgate.kr/redis/command/lists.php
Sets set string 집합으로 정렬되지 않은 집합형으로 key 중복된 데이터는 존재하지 않음
key 입력할 있는 요소의 최대 개수는 4,294,967,295
입력 순서와 상관없이 저장되며 lists 달리 중복되지 않음.

Commands
:http://redisgate.kr/redis/command/sets.php
Sorted sets sets 요소마다 score라는 실수 값을 가지고 있는 형태로 score 값으로 오름차순 정렬
score 범위에 따른 쿼리(range query), top rank 따른 query 등이 가능
key 중복된 데이터는 존재하지 않지만 score 값은 중복 가능

Commands
:http://redisgate.kr/redis/command/zsets.php
Hashes list 비슷한데 field, value 연속으로 이루어져 있음, RDB 테이블과 유사
key 포함할 있는 field-value 쌍의 최대 개수는 4,294, 967,295

Commands
:http://redisgate.kr/redis/command/hashes.php

 

728x90

'참고' 카테고리의 다른 글

쿠키 vs 세션 ?  (0) 2021.07.06
[AWS]ElastiCache  (0) 2021.06.27
비동기 통신  (0) 2021.06.27
HTTP 응답 상태 코드  (0) 2021.06.24
[MQ] KafKa  (0) 2021.06.10

댓글