Memcached(멤캐시드)
사용이 간편한 고성능 인 메모리 데이터 스토어
장점
- 1밀리 초 미만의 응답 시간
- 서버의 주 메모리에 모든 데이터를 유지PostgreSQL, Cassandra 및 MongoDB와 같은 데이터베이스: 데이터 대부분을 디스크 또는 SSD에 저장인 메모리 데이터 스토어: 반복해서 디스크를 왕복할 필요 X → 더 ↑ 작업 처리 + 더 빠른 응답 지원
- 단순성 및 사용 편의성
- 간단하고 일반적이 되도록 설계되었으므로 애플리케이션 개발에 사용하기에 쉬우면서 강력
- 다수의 오픈 소스 클라이언트를 사용
- 지원되는 언어: Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, Go 등
- 확장성
- 분산 및 다중 스레드 아키텍처를 사용하면 손쉽게 확장여러 노드 간에 데이터를 나눌 수 있음 → 클러스터에 새로운 노드를 추가하여 용량을 확장할 수 있음
- 다중 스레드 → 주어진 노드에서 여러 개의 코어를 사용 => 컴퓨팅 파워를 간단하게 확장할 수 있음
- 빠르고 일관된 성능을 제공하도록 설계된 고도로 확장 가능한 분산 캐싱 솔루션을 구축할 수 있음
- 커뮤니티
- WordPress 및 Django와 같은 애플리케이션은 Memcached를 사용한 성능 개선을 지원
- 개방형 표준을 기반, 오픈 데이터 형식을 지원, 다양한 클라이언트 세트를 제공 → 공급업체 or 기술에 대한 종속 X
사례
- 캐싱
- 세션 스토어
Redis(레디스)
REmote DIctinoary Server
‘키-값’ 구조의 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 인 메모리 데이터 스토어
장점
- 빠른 성능: 작업을 실행하는 데 1밀리 초 미만 소요
- 대부분의 데이터베이스 관리 시스템: 데이터를 디스크 or SSD에 저장↔ 서버의 주 메모리에 상주/ 디스크에 액세스해야 할 필요 X → 검색 시간으로 인한 지연 방지 + CPU 명령 ↓ 사용하는 좀 더 간단한 알고리즘으로 데이터에 액세스 O
- 인 메모리 데이터 구조
- 사용자가 다양한 데이터 유형에 매핑되는 키를 저장 O
- 기본적인 데이터 유형: String - 텍스트 or 이진 데이터/ 최대 크기: 512MB
- 문자열이 추가된 순서대로 유지: Lists of Strings, Sets of unordered Strings
/ 점수에 따라 정렬: Sorted Sets/ 필드와 값 목록을 저장: Hashes
/ 데이터 세트에서 고유한 항목을 세는 HyperLogLogs 지원
- 사용자가 다양한 데이터 유형에 매핑되는 키를 저장 O
- 다양성과 사용 편의성
- 개발과 운영 좀 더 쉽고 빠르게 수행할 수 있는 도구 제공
- Pub/Sub: 메시지를 채널에 게시, 채널에서 구독자에 전달→ 채팅과 메시징 시스템에 적합
- TTL 키: 해당 기간 후에 스스로 삭제하는 지정된 Time To Live 값을 가질 수 있음 → 데이터베이스를 불필요한 데이터로 채우지 않도록 하는 데 유용
- 원자성 카운터: 경합 상태가 일관성 없는 결과를 생성하지 않도록 함
- Lua: 강력하지만 간단한 스크립팅 언어
- 개발과 운영 좀 더 쉽고 빠르게 수행할 수 있는 도구 제공
- 복제 및 지속성
- 마스터-슬레이브 아키텍처 사용 → 비동기식 복제 지원, 데이터가 여러 슬레이브 서버에 복제될 수 있음
=> 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산 O
→ 향상된 읽기 성능과 복구 기능 모두 제공
주인과 노예- "노예는 두명의 주인을 섬길 수 없는 것처럼 시리얼 통신의 슬레이브도 마스터가 2개일 수 없다."
- "항상 주인이 먼저 말은 건넨다, 노예는 주인이 명령하는 것에 응답만 한다."
- Replication 구조 중 하나
- 마스터 노드: 쓰기 작업(INSERT, UPDATE, DELETE) 등
- 데이터 변경 사항을 실시간으로 슬레이브 노드에 복제
- 슬레이브 노드: 읽기 작업(SELECT)
- 마스터에서 발생한 데이터 변경 사항을 복사받아 데이터베이스 상태를 동기화
- 슬레이브는 읽기 작업을 처리하여 마스터의 부하를 줄임
마스터 노드가 장애를 일으키면, 슬레이브 중 하나를 수동으로 승격하여 마스터로 전환해야 함
이 과정에서 서비스 중단이 발생할 수 있음
+ 복제 지연, 쓰기가 마스터에 집중돼 마스터 노드의 성능에 의존
-> Microsoft에서 용어 지양 중 - 특정 시점 스냅샷(Redis 데이터 세트 → 디스크로 복사), 데이터가 변경될 때마다 디스크에 저장
Append ONly File(AOF) 생성 지원 => 장애 발생 시 Redis 데이터 신속하게 복원할 수 있음
- 마스터-슬레이브 아키텍처 사용 → 비동기식 복제 지원, 데이터가 여러 슬레이브 서버에 복제될 수 있음
사례
- 캐싱
- 다른 데이터베이스 앞에 배치 → 성능 ↑ 인 메모리 캐시 생성
→ 액세스 지연 시간 ↓ + 처리량 ↑ + 관계형 or NoSQL DB 부담 ↓
- 다른 데이터베이스 앞에 배치 → 성능 ↑ 인 메모리 캐시 생성
- 세션 관리
- 세션 키에 적절한 TTL과 함께 빠른 키 값 스토어로 사용→ 간단하게 세션 관리
- 세션 관리: 게임, 전자 상거래 웹 사이트, 소셜 미디어 플랫폼을 비롯한 온라인 애플리케이션에 필요
- 세션 키에 적절한 TTL과 함께 빠른 키 값 스토어로 사용→ 간단하게 세션 관리
- 실시간 순위표
- `Sorted Set` 데이터 구조 사용 → 요소가 목록에 유지, 점수에 따라 정렬→ 손쉽게 동적 순위표 생성
- 게임에서 앞서있는 사람
- 좋아요 가장 많이 받은 메시지
- `Sorted Set` 데이터 구조 사용 → 요소가 목록에 유지, 점수에 따라 정렬→ 손쉽게 동적 순위표 생성
- 속도 제한
- 이벤트 속도 측정, 필요한 경우 제한할 수 있음
- 클라이언트의 API 키에 연결된 Redis 카운터 사용
→ 특정 기간 동안 액세스 요청의 수 세고 한도가 초과되는 경우 조치 취할 수 있음 - 포럼의 게시물 수 제한, 리소스 사용량 제한, 스패머 영향 억제
- 클라이언트의 API 키에 연결된 Redis 카운터 사용
- 이벤트 속도 측정, 필요한 경우 제한할 수 있음
- 대기열
- `List` 데이터 구조 사용 → 간단한 영구 대기열 손쉽게 구현
- 자동 작업 및 차단 기능 제공 → 신뢰할 수 있는 메시지 브로커 or 순환 목록 필요한 애플리케이션
- `List` 데이터 구조 사용 → 간단한 영구 대기열 손쉽게 구현
- 채팅 및 메시징
- 패턴 매칭과 더불어 PUB/SUB 표준 지원
- 고성능 채팅방, 실시간 코멘트 스트림 및 서버 상호 통신 지원
- 게시된 이벤트 기반으로 작업 트리거할 수 있음
- 패턴 매칭과 더불어 PUB/SUB 표준 지원
Memcached vs. Redis OSS
공통점
- 오픈 소스 인 메모리 데이터 스토어
- 사용하기 쉽고 고성능 제공
- 구문적으로 사용하기 쉬움최소한의 코드만 작성하면 애플리케이션에 통합
- 데이터를 여러 노드에 분산 O→ 수요 ↑ → 더 많은 데이터를 보다 효과적으로 처리하도록 스케일 아웃할 수 있음
- 개발자가 사용할 수 있는 오픈 소스 클라이언트 ↑
- 지원되는 언어: Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, Go 등
차이점
Memcached
- 다중 스레드 아키텍처: 여러 프로세싱 코어를 사용할 수 있음= 컴퓨팅 파워를 스케일 업하여 더 많은 작업을 처리할 수 있음
Redis
- 스냅샷: 보관 or 복구에 사용할 수 있는 특정 시점 스냅샷> 데이터를 디스크에 보관
- 복제: 프라이머리의 복제본을 여러 개 생성할 수 있음→ 데이터베이스 읽기 확장 + 고가용성 클러스터 구축할 수 있음
- 트랜잭션: 명령 그룹을 격리된 원자성 작업으로 실행할 수 있음
- 게시/구독: 고성능 채팅방, 실시간 댓글 스트림, 소셜 미디어 피드 및 서버 상호 통신에 사용할 수 있는 패턴 매칭
- Lua 스크립팅: 성능 ↑ + 애플리케이션 간소화
- 지형 정보 지원: 대규모 실시간 지형 정보 데이터 사용할 수 있도록 특별히 설계된 명령어 O
- 두 요소(예: 사람 또는 장소) 사이의 거리를 구하고 한 지점에서 지정된 거리 내에 있는 모든 요소를 찾는 등의 작업 수행 O
Memcached
: 단순성을 위해 설계 → 단순 캐시 or ↓ 생명주기 데이터 관리
- 단순 캐싱에 최적화
- 키-값 형태 데이터 저장하는 데 최적화 → 복잡한 데이터 구조 X 빠른 캐시 스토리지가 필요한 경우에 적합
- 데이터 일시적인 사용
- 디스크에 저장 X 메모리에 저장 O → 영구적인 데이터 필요 X
- ex. 자주 사용되지만 영구적으로 저장될 필요 없는 데이터 캐시
- 가벼운 메모리 소비
- 메모리 관리 매우 효율적 처리, Redis에 비해 더 가벼운 메모리 사용→ 단순한 캐시에서 더 많은 데이터를 메모리에 저장해야 할 때 유리
- 캐시할 데이터 크기 크지 않음
- 비교적 작은 단위의 데이터를 캐시하는 데 적합
Redis
: 광범위한 사용 사례에 효과적인 풍부한 기능을 제공→ 복잡한 데이터 구조 or 고가용성 필요
- 데이터 구조 복잡할 때
- 키-값 저장소 + 다양한 데이터 구조(리스트, 해시, 집합, 정렬된 집합 등) 지원 → 캐싱 외에도 대기열, 세션 관리, 실시간 분석 등에 유용
- 지속성 필요
- 데이터를 디스크에 기록하는 기능도 제공 **=> 안하는 게 좋다!**→ 시스템 재부팅 or 장애 발생해도 데이터 복구 O(선택사항 → 성능 최적화 위해 비활성화 O)
- 복제 및 고가용성
- 데이터 복제 → 여러 인스턴스에 데이터 동기화, 장애 조치(failover) ~> 고가용성 구성할 수 있음
- 클러스터링 지원 → 큰 규모의 데이터 분산 저장할 수 있음
- Pub/Sub 및 메시지 브로커 기능
- 채팅 애플리케이션이나 알림 시스템 같은 실시간 데이터 스트리밍이 필요할 때 유용
- 트랜잭션 지원
- 여러 명령 원자적으로 실행할 수 있음
=> 지속성이 필요하다면 Redis, 그렇지 않다면 Memcached
출처
Memcached | 분산 키-값 스토어 | AWS
Memcached는 간단하고 일반적이 되도록 설계되었으므로 애플리케이션 개발에 사용하기에 쉬우면서 강력합니다. Memcached 개발자는 다수의 오픈 소스 클라이언트를 사용할 수 있습니다. 지원되는 언
aws.amazon.com
Redis란 무엇입니까? – Amazon Web Services(AWS)
Redis 개발자는 백 개가 넘는 오픈 소스 클라이언트를 사용할 수 있으며, Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go를 비롯한 다수의 언어가 지원됩니다.
aws.amazon.com
Redis OSS와 Memcached 비교 - 인 메모리 데이터 스토어의 차이점 - AWS
Redis OSS와 Memcached에는 개발자가 사용할 수 있는 오픈 소스 클라이언트가 많이 있습니다. 지원되는 언어로는 Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, Go 등이 있습니다.
aws.amazon.com
'💻 > 데이터베이스' 카테고리의 다른 글
Redis (2) | 2025.02.24 |
---|---|
Pessimistic Lock(비관적 락) vs. Optimistic Lock(낙관적 락) (0) | 2025.02.23 |
Trigger & Procedure (0) | 2025.02.23 |
[Real MySQL 8.0 1] 0.7 데이터 암호화 (0) | 2025.01.27 |
[Real MySQL 8.0 1] 0.6. 데이터 압축 (0) | 2025.01.27 |