본 포스트는 AWS로 시작하는 인프라 구축의 정석 책을 활용한 스터디 기록입니다.
Cache란 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 의미합니다.
캐시를 사용하면 처리에 시간이 걸리는 결과 데이터를 저장해두고, 다음에 같은 처리를 수행할 때는 저장된 결과 데이터를 사용해 결과를 빠르게 반환할 수 있습니다!!
캐시는 다음과 같이 동작합니다.
첫 번째 처리에서는 시간이 걸리는 작업의 처리 결과를 서버가 저장하고 있지 않기 때문에 시간이 걸리는 작업을 호출하고 그 결과 값을 사용자에게 전달해 줍니다.
반면 서버에 처리 결과를 저장한 두 번째 처리부터는 시간이 걸리는 작업을 또 처리할 필요없이 서버에 저장된 결과를 사용자에게 반환해주기만 하면 되기 때문에 더 빠르게 처리할 수 있게 됩니다!!
캐시는 무조건 데이터를 빠르게 가져다주는 좋은 시스템이라고 생각할 수 있지만, 그렇게 생각해서 아무런 고려없이 데이터를 캐시에 담아두면 안됩니다.
AWS에서는 이런 캐시 관련 서비스인 Elastic Cache라는 서비스를 제공합니다.
Elastic Cache는 Redis나 Memcached가 이미 적용된 환경을 제공해주기 때문에 EC2에 직접 설치하여 사용하는 것보다 관리 포인트가 줄어듭니다.
Elastic cache는 기본적으로 임의의 키에 대해 캐시된 데이터를 반환하는 간단한 키/값 시스템을 제공하지만 내부적으로는 다루는 데이터 양이나 유형에 따라 성능을 높이는 구성을 제공합니다!
Elastic cache에서는 세 가지 요소가 있습니다.
노드는 Elastic cache의 최소 단위로 캐시된 데이터가 실제로 저장되는 영역을 확보하고 있습니다. (노드별로 캐시 엔진, 시스템, 용량 등을 설정할 수 있습니다.)
샤드는 최소 1개, 최대 6개의 노드로 구성되는 노드의 그룹입니다.
(하나의 프라이머리 노드와 여러 복제 노드로 구성됩니다)
프라이머리 노드는 데이터 갱신과 참조를 수행하며, 복제 노드는 프라이머리 노드에 수행한 업데이트 내용이 복제되어 동일한 상태가 유지하며 데이터 참조가 이루어질 수 있습니다.
데이터 갱신 시에는 모든 복제 노드의 값도 갱신해주어야 하므로 시간이 걸리지만 참조의 경우 노드 숫자만큼 성능이 향상됩니다.
또한 프라이머리 노드에 장애가 발생했을 때에도 복제 노드를 계속 참조할 수 있으므로 내결함성이 향상합니다. (일정 조건을 만족헀을 때 임의의 복제 노드를 프라이머리 노드로 승격시킬 수 있음)
클러스터는 여러 샤드의 그룹입니다. 멀티 AZ 기능을 이용하여 여러 가용 영역으로 분산시켜 사용할 수 있으며, 이를 통해 한 가용 영역에서 장애가 발생했을 때 빠르게 다른 가용영역으로 페일 오버를 수행할 수 있습니다.
기본적으로 캐시 용도로 자주 사용하는 두 가지 오픈소스는 Redis와 Memcached가 있으며, Elastic Cache에서도 이 두가지 엔진을 모두 제공합니다.
간단히 정리를 하자면 두 가지 모두 인메모리 데이터베이스로 캐시 혹은 세션 저장소 용도로 많이 사용합니다.
그러나 Redis가 더 많이 사용하는 이유는 무엇일까요?
참고
https://velog.velcdn.com/images/chaerim1001/post/a2cf0c3f-eb50-4721-b1b0-d342d5b63e94/image.png
https://mangkyu.tistory.com/69
https://escapefromcoding.tistory.com/704
https://aws.amazon.com/ko/memcached/
좋은 정보 얻어갑니다, 감사합니다.