메모리와 성능

메모리와 성능 (Memory and performance) (memory-performance)

Redis 공식 문서의 memory-performance 페이지를 한국어로 풀어드릴게요. 옆에서 하나씩 설명해 드리는 느낌으로 읽으시면 돼요.

출처: Redis 공식 문서 — memory-performance

Redis Enterprise Software에서 메모리와 성능을 다루는 방법을 알려드릴게요. 데이터베이스 메모리 한도, 축출 정책, 영속성, Auto Tiering, shard 배치, 확장까지 순서대로 살펴볼게요.

메모리 한도 (Memory limits)

데이터베이스 메모리 한도는 클러스터의 모든 데이터베이스 replica와 shard에 걸쳐 데이터베이스가 도달할 수 있는 최대 크기를 정의해요. 메모리 한도는 필요한 shard 수를 결정하기도 해요.

메모리 한도는 데이터셋 외에도 복제, Active-Active 오버헤드, 모듈 오버헤드 등 여러 요소를 반영해야 해요. 이들은 데이터베이스 크기를 크게 늘릴 수 있는데, 때로는 4배 이상 늘어나기도 해요.

메모리 한도에 대한 자세한 내용은 Database memory limits 문서를 참고하세요.

축출 정책 (Eviction policies)

데이터베이스가 메모리 한도를 초과하면 **축출 정책(eviction policy)**이 어떤 데이터를 제거할지 결정해요. 축출 정책은 사용 빈도, 최근 사용 여부, 무작위, 만료 날짜 또는 이들의 조합에 따라 키를 제거해요.

정책을 noeviction으로 설정하면 더 많은 데이터를 넣으려 할 때 메모리 한도 오류를 반환하도록 할 수도 있어요.

  • 데이터베이스의 기본 축출 정책은 volatile-lru인데, expire 필드가 설정된 모든 키 중에서 가장 오래 사용되지 않은 키를 축출해요.
  • Active-Active 데이터베이스의 기본값은 noeviction이에요.

자세한 내용은 eviction policies 문서를 참고하세요.

데이터베이스 영속성 (Database persistence)

서버나 프로세스가 실패하면 RAM 메모리와 플래시 메모리 모두 데이터 손실 위험이 있어요. 데이터를 디스크에 영속화하면 그런 상황에서 손실을 보호할 수 있어요. 영속성은 데이터베이스 생성 때나 데이터베이스 구성을 편집할 때 설정할 수 있어요.

Redis Enterprise Software에는 두 가지 주요 영속성 전략이 있어요: **append-only files (AoF)**와 snapshots.

**Append-only files (AoF)**는 데이터 변경 기록을 유지하고 각 변경을 파일 끝에 기록해요. append-only 로그에서 쓰기를 재생(replay)해 데이터셋을 복구할 수 있게 해주죠.

영속성에 대한 자세한 내용은 Database persistence with Redis Enterprise Software 또는 Durable Redis를 참고하세요.

Auto Tiering

기본적으로 Redis Enterprise Software는 성능 향상을 위해 데이터를 전적으로 RAM에 저장해요. Auto Tiering 기능은 데이터가 RAM과 SSD 스토리지(플래시 메모리)에 걸쳐 있게 해줘요.

키는 항상 RAM에 저장되지만, Auto Tiering은 값(value)의 위치를 관리해요. 자주 쓰이는(hot) 값은 RAM에, 자주 안 쓰이는(warm) 값은 플래시 메모리로 옮겨져요. 이렇게 하면 비싼 RAM 공간을 아낄 수 있고, 대용량 데이터셋에서 더 낮은 비용으로 비슷한 성능을 얻을 수 있어요.

Shard 배치 (Shard placement)

클러스터 노드에서 primary와 replica shard의 위치는 데이터베이스 성능에 영향을 줄 수 있어요. primary shard와 그에 대응하는 replica shard는 데이터 복원력과 고가용성을 위해 항상 별도 노드에 배치돼요.

Shard 배치 정책은 최적의 성능과 복원력을 유지하도록 도와줘요. Redis Enterprise Software는 두 가지 shard 배치 정책을 제공해요.

  • dense: 가능한 한 많은 shard를 가장 적은 수의 노드에 배치.
  • sparse: shard를 가능한 한 많은 노드에 분산.

데이터베이스 확장 (Scaling databases)

각 Redis Enterprise 클러스터는 여러 데이터베이스를 담을 수 있어요. Redis에서 데이터베이스는 단일 애플리케이션, 테넌트 또는 마이크로서비스에 속한 데이터를 나타내요. Redis Enterprise는 클러스터당 수백 개의 데이터베이스로 확장하도록 설계되어 유연하고 효율적인 멀티 테넌시 모델을 제공해요.

각 데이터베이스는 적거나 많은 Redis shard를 가질 수 있어요. 샤딩은 Redis 애플리케이션에 투명해요. 데이터베이스의 마스터 shard들은 특정 키 부분집합에 대한 데이터 연산을 처리해요. 데이터베이스당 shard 수는 구성 가능하며, 애플리케이션의 처리량 요구에 따라 달라져요.

Redis Enterprise의 데이터베이스는 sub-millisecond 지연을 유지하면서 처리량을 확장하기 위해 더 많은 Redis shard로 리샤딩(resharding)될 수 있어요. 리샤딩은 다운타임 없이 수행돼요.

Redis Enterprise에서 각 데이터베이스는 **RAM 쿼터(quota)**를 가져요. 쿼터는 노드에서 사용 가능한 RAM 한도를 초과할 수 없어요. 하지만 Redis Enterprise Flash에서는 RAM이 로컬 플래시 드라이브(SATA, NVMe SSD 등)로 확장돼요. 데이터베이스의 총 쿼터는 RAM과 플래시 드라이브를 모두 활용할 수 있어요.

더 알아보기 (Learn more)

메모리·성능 주제를 더 깊이 배우고 싶다면 아래 링크를 추천해요.