Search

ElastiCache

Elasticache
완전관리형 In-Memory Cache 서비스
Elasticache for Redis
Elasticache for Memcached
고가용성 캐시 서비스 구성
관리 부담 감소 사용 편의성
빠른 응답이 필요한 애플리케이션에 사용
기존의 DB와 연결하여 DB 응답 성능을 개선하기 위해 사용
ElasticCache를 사용하기 위해서는 애플리케이션의 코드 변경이 필요
세션 스토어, 게임 리더보드, 스트리밍 및 분석과 같이 내구성이 필요하지 않는 기본 데이터 스토어로 사용
Memcached는 멀티스레드 지원
Redis는 싱글스레드만 지원

Vs RDS Read Replica

RDS Read Replica
영구적인 데이터 저장
데이터가 계속 변경되는 쿼리의 읽기 성능 향상에 적합
ElasticCache
RAM과 같이 빠른 하드웨어에 일시적으로 저장
지연시간을 줄이는 목적으로 주로 사용
속도는 빠르지만 저장할 수 있는 공간에 제약이 있음
변경이 없는 동일한 데이터를 계속 읽는 경우의 성능 향상에 적합
Elasticache for Redis의 3가지 클러스터 형태
싱글 클러스터
Replication
Data Partitioning
Scaling Up / Down
Multi-AZ
클러스터 모드 비활성
Replication (최대 5개)
Data Partitioning
Scaling Up / Down
Multi-AZ 최소 1개 Replica 필요
클러스터 모드
Replication
Data Partitioning
Scaling In / Out
Multi-AZ

Memcached

Memcached는 심플한 캐싱 활용에 적합하다.
Multi Thread로 작동한다. 즉, 여러 스레드가 동시에 요청을 처리할 수 있다.
Redis와 달리 Memcached는 데이터의 영구 보존이나 백업 기능이 없다.
그렇기 때문에 장애나 재부팅이 발생하면 캐시 데이터가 남지 않고 사라진다.
계속 유지해야 하는 데이터는 스토리지나 다른 DB 서비스에 저장해두고, 애플리케이션의 속도를 높이기 위한 캐시로 사용하는 경우에 적합하다.

Redis

Redis는 Memcached보다 고기능의 데이터베이스 엔진이다.
Single Thread로 작동한다. 즉, 한 번에 하나의 작업만 처리한다.
Snapshot (Amazon S3에 저장) 기능을 통한 백업 및 복원이 가능하며, 데이터를 영구적으로 보존할 수 있다.
"자동 페일오버""Multi AZ"가 있다. (장애 대책 기능])
자동 페일오버 : 프라이머리 노드에 장애가 발생하면 자동으로 레플리카 노드가 프라이머리 노드로 승격된다.
Multi AZ : AZ를 넘나드는 복제가 가능하므로, 프라이머리 노드가 있는 AZ에 장애가 발생해도 다른 레플리카 노드를 승격시켜 운영을 지속할 수 있다.
[보안 기능]: Redis는 Memcached에는 없는 보안 기능을 제공한다.
저장된 데이터의 암호화나 SSL/TLS를 통한 통신 암호화
클라이언트를 비밀번호로 인증하는 Redis 인증 등을 지원한다.
이러한 기능을 사용하려면, ElastiCache 데이터베이스를 생성할 때 Redis를 선택하고 암호화를 활성화해야 한다

Redis와 Memcached 공통점

in-memory DB로써 속도가 빠르다.
key-value 형태로 데이터를 저장
캐시새션, 상태 정보 저장에 최적화 되어 있다.

캐싱 전략

ElastiCache는 애플리케이션 성능 향상을 위해 주로 사용된다.
데이터를 어떻게 저장할 것인가는 데이터의 일관성과 가용성을 유지하면서 성능을 최대화하는 데 중요하다.
이를 캐싱 전략이라고 하며 대표적인 2 가지 캐시 전략이 있다.
Write-Through - 바로 바로 업데이트
DB에 데이터를 업데이트(write)할 때마다, 동시에 캐시에도 데이터를 업데이트한다.
이 전략에서는 캐시의 데이터가 항상 최신 상태로 유지되므로, 데이터 일관성이 유지된다.
그러나 쓰기 성능이 약간 저하될 수 있으며, 액세스되지 않는 데이터가 캐시에 쌓이는 단점이 있다
Cache-Aside (Lazy loading) - 살짝 지연 but 효율적
DB에 데이터를 업데이트(write) 우선시하고, 필요할 때만 캐시에 데이터를 업데이트한다.
요청 발생 : 애플리케이션이 데이터를 DB 요청할 때 먼저 캐시(ElastiCache)를 확인한다.
만약 캐시에 그 데이터가 있다면, 애플리케이션에 보낸다.
만약 캐시에 그 데이터가 없다면, 데이터베이스(DB)에서 해당 데이터를 가져온다.
캐시에 저장: 가져온 데이터를 캐시(ElastiCache)에 저장해 둔다.
이후에 동일한 데이터 요청이 들어오면 캐시에서 빠르게 가져올 수 있게 됩니다.
이 방법에서는 요청된 데이터만 캐시되므로 리소스 낭비를 줄일 수 있지만, 캐시와 데이터베이스 간에 일시적인 데이터 불일치가 발생할 수 있는 가능성이 있다.
또한, cache miss(캐시 미스 : 캐시에서 데이터를 가져올 수 없는 경우)가 발생하면 데이터 가져오는 데 시간이 걸릴 수 있다.