ElastiCache
: 구축 및 유지보수 작업 없이 인 메모리 캐시 기능을 이용가능한 서비스
-> ElastiCahce를 사용시 RDS에 더욱 효율적인 어플리케이션 퍼포먼스를 보여줄 수 있다.
ElastiCache란?
- Cloud 내에서 In-memory 캐시를 만들어줌
- DB에서 데이터를 읽어오는 것이 아니라 캐시에서 빠른 속도로 데이터를 읽어옴
- Read-Heavy 어플리케이션에서 상당한 Latency 감소 효과를 누림
-> 데이터의 양이 방대할 때 사용하는 것이 가장 좋다
-> 초반 Application 개발에는 효율성이 떨어진다
그러나 On-Premise나 EC2에 구축했을 때는 사용할 수 있었던 기능이나 설정의 일부에 제한이 있을 수 있다
ElastiCache의 Type
1) Memcached
- 멀티 스레드로 실행되고 간단한 데이터 구조만 취급 가능하다
- 휘발성 데이터를 보관하는 용도로 사용되어 백업 기능 등은 없다
- Object Cache System으로 알려져있음
- ElastiCache는 Memcached의 프로토콜을 디폴트로 따른다
- EC2 Auto Scaling처럼 크기가 커졌다 작아졌다한다
- Open Source
Memcached의 사용 상황
- 가장 단순한 캐싱 모델이 필요한 경우
- Object Caching이 주된 목적인 경우
- 캐시 크기를 마음대로 scaling하려는 경우
2) Redis
- 싱글 스레드로 실행된다
- Object와 달리 Key-Value와 같은 데이터를 In-Memory에 저장 가능함
- Multi-AZ지원 (Disaster Recovery)
- Open Source
Redis의 사용 상황
- List,Set과 같은 데이터셋을 사용하는 경우
- 리더보드처럼 데이터셋의 랭킹을 정렬하는 용도가 필요한 경우
- Multi AZ기능이 필요한 경우
인 메모리 캐시 패턴
: ElastiCache를 사용해 데이터베이스의 부하를 줄인다
1) DB 액세스에 대한 안티 패턴
: 웹 서버에서 데이터 취득 요청을 항상 DB에서 처리하는 패턴
: AWS 리소스에 여유가 있는 경우에는 문제가 안되나 부하가 올라갈 경우 문제
-> 웹서버(EC2 인스턴스)에서는 서버의 대수를 늘려 대응 가능하나
-> DB 층은 스케일 아웃이 어려워 스케일 업에 의존하게 되고 이는 한계가 있다
- 스케일 아웃 : 서버 대수를 늘려 확장하는 방식
- 스케일 업 : 서버의 사양을 올려 확장하는 방식
2) 인 메모리 캐시 패턴
: 웹서버와 DB 서버(RDS 인스턴스) 사이에 ElastiCache를 세우고 자주 변경 되지 않는 데이터를 캐시해 위와 같은 문제를 해소할 수 있다.
도입 시의 포인트
- 캐시할 데이터를 선정
: 자주 업데이트되진 않지만 자주 요청되는 데이터 캐시 -> 적중률 상승
- 애플리케이션을 수정
: ElastiCache에 해당 데이터가 있는지 여부 확인 후
: 있다면 그대로 이용
: 없다면 DB에 요청을 보낸 후 응답을 저장해 데이터를 이용
- 복원력을 높이는 설계 수행
: 인 메모리 캐시가 단일 장애점이 되지 않게 한다
- 부하 테스트 -> 적절한 인스턴스 유형 설정