12장 캐시 서버 준비하기
캐시 서버
동일한 결과에 대한 요청을 캐시 서버에 저장해놓고 계산 과정없이 바로 응답을 할 수 있다.
캐시 사용시 주의점
- 캐시 데이터는 요청 시점의 데이터가 아니다. 즉, 캐싱되는 순간의 데이터이기 때문에 최신화된 데이터가 아닐 수 있다.
-> 자주 바뀔 필요가 없는 데이터를 캐싱하는게 좋다. - 너무 많은 데이터를 캐시에 저장하면 서버 자체의 부하가 높아지고 처리가 지연될 수 있다.
-> 캐시에 저장할 데이터에 유효기간을 설정해준다.
레디스와 멤캐시드
캐시는 성능이 중요하기 때문에 잘 만들어진 오픈 소스로 제공되는 캐시 구현을 이용한다.
그 중 널리 사용되는 2가지이다.
- 레디스
- 멤케시드
일래스틱 캐시
레디스와 멤케시드는 모두 미들웨어로 제공된다. 즉, EC2에서 생성한 리눅스 서버상에 설치해 서버로 작동시킬 수 있다.
그보다는 AWS에서 제공하는 일래스틱캐시라는 매니지드 서비스를 이용하는 편이 좋다.
일래스틱캐시는 레디스나 멤케시드를 이미 적용한 환경을 제공한다.
일래스틱 캐시 계층 시스템
일래스틱캐시는 임의의 키에 대해 캐시된 데이터를 반환하는 간단한 키/값 시스템을 제공한다.
일랙스틱 캐시의 계층 시스템은 다음과 같은 요소들로 구성된다.
노드
- 일래스틱 캐시의 최소 단위
- 캐시된 데이터가 실제로 저장되는 영역
- 노드별로 캐시 엔진, 시스템, 용량 등을 설정 가능.
샤드
- 1~6개의 노드로 구성. 프라이머리 노드 1개 + 복제노드 여러개
- 프라이머리 노드
- 데이터 갱신과 참조 수행
- 복제 노드
- 프라이머리 노드에 수행한 업데이트 내용이 복제되어 동일한 상태가 유지된다.
- 또한, 데이터 참조도 수행됨
- 프라이머리 노드에 장애가 발생했을 때도 복제 노드를 계속 참조할 수 있으므로 내결함성 향상
클러스터
- 클러스터는 여러 샤드로 구성
- 클러스터를 이용해 일래스틱 캐시를 구성하면 샤드의 내용이 공유된다.
- 멀티 AZ기능을 이용하면 여러 가용 영역으로 분산할 수도 있다.
- 한 가용 영역에서 장애가 발생했을 때는 짧은 시간 내에 다른 가용 영역으로 페일오버를 수행한다.
- 페일오버 : 이용 중인 환경이 이용 불가능한 상태가 되었을 때 미리 준비한 대체 환경으로 자동 전환되는 시스템
- 내결함성 및 읽기 성능을 향상 시킬 수 있다.
샤드를 구성하면 단일 노드 장애가 발생했을 때 내결합성 및 읽기 성능을 향상할 수 있다.
클러스터를 구성하면 가용영역에 장애가 발생했을 때 내결합성을 높일 수 있다.
단, 내결합성이 높을 수록 노드 수와 함께 비용도 증가한다.
일래스틱캐시 생성하기
멀티 AZ에 각각의 샤드가 존재하고 샤드 안의 노드가 3개(프라이머리 노드 1 + 복제 노드 2) 인 일래스틱 캐시를 만들어보자.
ElasticCache -> Redis -> 캐시생성
자체 캐시 설계 구성으로 선택해줬다.
서버리스도 괜찮은 선택지로 보인다.
배포 유형과 서브넷 그룹을 생성해준다.
VPC를 지정해준다.
서브넷에는 private subnet을 선택해줬다.
=> 일랙스틱캐시가 VPC안에 생성되며 EC2 인스턴스 등에서 이용할 수 있다.
작동확인하기
private subnet에 접근 -> nc 명령어로 일래스틱캐시로부터 반응이 돌아오는지 확인
- ping 명령어로 연결을 확인했다.