udamy/AWS Devleoper

5-1. AWS ElastiCache (AWS Certified Developer Associate)

머혀기 2023. 2. 16. 15:05

1. Amazon ElastiCache Overview

- RDS와 동일한 방식으로 관계형 DB를 관리할 수 있다.

- Redis와 Memcached와 같은 캐시 기술을 관리할 수 있도록 한다.

:: 캐시란??

 높은 성능과 낮은 지연 시간을 가진 인-메모리 DB이다.

- 읽기 집약적인 워크로드의 부하를 줄일 수 있다. 그 이유는 App의 상태를 일래스틱 캐시에 저장해 일반적인 쿼리문을 캐시에서 쿼리 결과를 검색할 수 있해주므로 DB에 읽기 부하를 줄일 수 있다.

- 애플리케이션에 관한 몇가지 어려운 코드 변경을 요청할 수 있다 -> 단순 활성화가 아닌 캐시를 사용한다,

 

2. 일래스틱 캐시 사용을 위한 아키텍처

2-1.일래스틱 캐시와 RDS 그리고 App이 있고 App은 일래스틱 캐시를 쿼리한다고 가정하자.

이때 해당 쿼리문의 데이터가 일래스틱 캐시에 이미 생성되어 저장됐는지 확인하는 기능인 Cache Hit(캐시 히트)가 발생한다.

만약 캐시에 해당 데이터가 존재한다면 캐시는 해당 쿼리문 데이터를 app에게 바로 응답을 얻어 DB의 비용을 줄여준다. 하지만 해당 데이터가 존재하지 않으면 DB에서 데이터를 가저와 전달하는게 이것을 우리는 Cache Miss(캐시 미스)라고 한다. 만약 동일한 쿼리가 발생하는 다른 app이나 인스턴스에서는 데이터를 캐시에 다시 기록해 다음에는  같은 쿼리로 캐시 히트를 얻도록한다. 데이터를 캐시에 저장하기 때문에 캐시 무효화 전략이 있어야 하며 가장 최근 데이터만 사용하는지 확인해야된다. 

2-2. 사용자 세션을 저장해 app을 무상태로 만드는 아키텍처

사용자가 app의 모든 계정에 로그인하면 app이 일래스틱 캐시에 세션 데이터를 기록하는 것이다. 만약 사용자가 다른 인스턴스로 리디렉션 되면 app은 일래스틱 캐시에서 직접 세션 캐시를 검색할 수 있어 사용자는 계속 로그인한 상태로 유지시켜 app을 무상태로 만든다.

3.Redis vs Memcached

3-1.Redis

- 장애 조치로 다중 AZ를 수행하는 기술이며 읽기 전용 Replicas는 읽기 스케일링에 사용되며 가용성이 높다.

- 지속성으로 인해 데이터 내구성이 존재하며 백업과 기능 복원 기능도 있다.

3-2.Memcached

- sharding(샤딩)이란 데이터 분할에 다중 노드를 사용한다.

- 가용성이 높지않고 복제가 발생하지 않는다. 따라서 지속적인 캐시가 아니기떄문에 백업과 복원 기능 또한 없다.

- 다중 스레드 아키택처로 몇몇 샤딩과 함께 캐시에서 함께 실행되는 여려 인스턴스가 있다.

 

4. Chaching Implementation Considerations : 캐싱 전략과 고려 사항

- 캐시 데이터로 안전한 것인가?

 데이터를 캐싱하는 것은 보통 안전하지만 최선이 아닐 수 있다. 결국에는 일관성을 유지되는 데이터를 캐싱해야 된다.

- 캐싱이 데이터에 효과적인가?

 데이터의 패턴을 기준으로 판단할 수 있다. 일반적으로 데이터값이 자주변경되지 않으면서 자주필요한 키가 적을 경우 캐싱 데이터로 적합합 패턴(Pattern)의 데이터이다. 하지만 데이터가 빠르게 바뀌고 데이터셋의 모든 키가 필요한 경우는 효과적이지 않은 데이터패턴 즉 안티 패턴(anti patterns)이다.

- 데이터 구조가 캐싱에 적합한가?

 예를 들어 키값이 있고 집계 결과를 저장하는 경우 캐싱은 좋다. 하지만 데이터의 구조가 적합한지 캐싱하기 전 확인해야 한다. 캐싱은 시간을 절약하고 최적화 하기떄문에  데이터 구조가 쿼리에 올바른 방식인지 확인해야 된다.

- ****중요**** 어떤 캐싱 설계 패턴이 가장 접합한가??

1. Lazy Loading/ Cache-Aside/ Lazy Population

2. Write Through

- DB가 업데이트될때 캐시를 추가하거나 업데이트하는 것을 의미한다.

- Chche Evictions and Time-to-live(TTL)

 항목을 캐시에서 명시적으로 삭제하거나 메모리가 꽉 찼을때 사용한다. 

- 정리

5. Redis에서 할 수 있는 일래스틱 캐시 복제 방식 (ElastiCache Replication)

5-1. Cluster Mode Disable : 클러스터 모드 비활성화

 기본 노드(primary node)는 1개이며 5개까지 노드가 복제할 수 있다. 레디스에는 기본 노드(primary mode)는 읽기/쓰기 모두 사용할 수 있고 다른 노드 즉 복제본 5개는 읽기 기능만 가능하다. 기본 캐시 노드는 모드는 데이터를 가지고 있는데 기본 노드가 실패하면 복제된 디른 노드가 이를 대신한다.

 복제본은 장애 복구 외에도 읽기 복제본을 활성화 함으로써 레디스용 일래스틱 캐시의 읽기 성능을 올릴 수 있다. 그리고 이 기능은 다중 AZ일 때 유용하다는 것을 잘 알고 있자.

5-2.  Cluster Mode abled : 클러스터 모드 활성화

 클러스터 모드를 활성화 하게 되면 데이터가 여러 샤드로 분할 되며 쓰기를 확장할 때 유용하게 된다.

예를 들어 클러스터 모드를 활성화하면 N개의 샤드를 가지게되며 각 샤드별로 최대 5개의 Replica를 생성 할 수 있다. Replica는 앞에 클러스터 모드 비활성화와 동일한 기능을 한다..

클러스터 당 최대 500개의 노드를 가질 수 있다. 이말은 즉 복제본이 없는 노드면 500개의 샤드를 갖을 수 있고, 기본노드 1개,Replica 1개면 노드당 250개의 샤드를 갖는다. 이렇게 기본 노드 1개, Replica 5개이면 각각 83개의 샤드를 가질 수 있다는 얘기이다. 

5-3 결론

결론은 클러스터 모드를 비활성화 하면 기본노드 1개에 모든 데이터를 쓰게되고 활성화하게 되면 데이터를 여러 기본 노드로 분할해서 쓰다는 내용이다.

(솔직히 이걸 왜 알아야되는지 모르겠다....... 여기소 한문제정도 나온다는까 일단 둘의 차이정도는 숙지하자,,,, ㅠㅠㅠㅠ)

 

참고 문헌

- 캐싱 전력과 고려사항

https://aws.amazon.com/caching/best-practices/

 

Caching Best Practices | Amazon Web Services

Lazy caching, also called lazy population or cache-aside, is the most prevalent form of caching. Laziness should serve as the foundation of any good caching strategy. The basic idea is to populate the cache only when an object is actually requested by the

aws.amazon.com