아마존 엘라스틱캐시의 멤캐시디 클러스터 스케일 아웃

들어가며: 아마존 엘라스틱캐시의 확장

멤캐시디Memcached는 메모리 캐시 시스템으로 키-밸류 형식으로 데이터를 메모리에 저장해서 빠르게 읽고 쓸 수 있도록 설계되있습니다. 멤캐시디는 사용하지 않는 곳을 찾기가 어려울 정도로 여러 서비스에서 사용되고 있습니다. 엘라스틱캐시는 AWS에서 제공하는 매니지드 맴캐시디 서비스로 직접 설치하거나 운영하지 않아도 됩니다.

멤캐시디 서버를 사용하다가 용량 부족으로 더 많은 용량이 필요하다면 스케일 업(Scale up) 혹은 스케일 아웃(Scale out) 방식을 이용합니다.

스케일 업은 메모리를 더 높은 사양으로 교체하는 것인데 엘라스틱캐시에서는 더 좋은 사양의 노드 타입으로 변경하는 것을 의미합니다. 엘라스틱캐시에서는 노드 타입 변경은 지원하지 않으므로 새로운 노드 타입으로 멤캐시디를 만들고 어플리케이션에서 새로운 노드로 접속하도록 변경해야 합니다. 스케일 업을 하는 경우 메모리에 있던 정보가 사라져서 처음부터 다시 캐시를 쌓아야 하므로 캐시가 어느정도 쌓이기 전까지 서비스의 부하가 늘어나는 단점이 있습니다.

스케일 아웃은 멤캐시디 서버를 추가하는 방식입니다. 기존에 있던 서버에 추가로 노드를 투입하는 것으로 기존에 캐시되어 있던 내용이 대부분 유지되므로 부하가 늘어나는 단점이 없습니다. 이 글에서는 스케일 아웃하는 방법에 대해 더 이야기 해보겠습니다.

44BITS 소식과 클라우드 뉴스를 전해드립니다. 지금 5,000명 이상의 구독자와 함께 하고 있습니다 📮

멤캐시디 클러스터의 스케일 아웃

엘라스틱캐시에서는 멤캐시디 서버를 생성하면 기본적으로 클러스터로 생성 됩니다. 클러스터라고 해도 서버를 한 대만 사용할 수도 있고 여러대의 서버를 사용할 수도 있습니다. 클러스터에는 최대 20대의 멤캐시디 노드를 추가할 수 있는데 10기가의 노드를 사용하고 있다면 최대 200기가까지 확장 가능함을 의미합니다.

아마존 엘라스틱캐시 멤캐시디 서버의 클러스터 크기 지정
아마존 엘라스틱캐시 멤캐시디 서버의 클러스터 크기 지정

엘라스틱캐시 멤캐시디 클러스터를 생성하면 엔드포인트Configuration Endpoint에서 접속 주소를 얻을수 있습니다.

멤캐시디 클러스트의 정보. 클러스터에 접속 가능한 엔드포인트를 확인할 수 있습니다
멤캐시디 클러스트의 정보. 클러스터에 접속 가능한 엔드포인트를 확인할 수 있습니다

클러스터에 노드가 1개라면 그냥 이 값을 바로 사용해도 되지만 노드가 여러 개라면 추가 작업이 필요합니다. 일반적으로 라이브러리에 멤캐시디 주소를 설정할때 각각의 클러스터의 Configuration Endpoint 대신 각 노드의 Endpoint를 일일이 명시합니다. 루비 온 레일즈Ruby on Rails에서 사용하는 달리dalli 젬에서는 다음과 같은 방법으로 지정합니다.

멤캐시디 클러스터에 서버가 추가되거나 삭제 되면 설정에 새로운 노드의 주소를 추가하고 재시작하는 방식입니다.

이러한 불편함을 없애기 위해서 엘라스틱캐시에서는 오토 디스커버리Auto Discovery 기능을 제공합니다. 이 기능을 이용하면 클러스터의 엔드포인트Configuration Endpoint 주소 하나만 설정하면 클러스터에 속한 노드들을 자동으로 찾아서 분산 저장합니다. 노드 한대가 갑자기 빠지거나 노드를 추가해도 알아서 잘 동작합니다.

하지만 아쉽게도 오토 디스커버리를 모든 언어에서 사용할 수 있는것은 아닙니다. 이를 지원하는 라이브러리가 필요한데 현재는 자바Java, PHP, 닷넷.NET만 공식적으로 지원하고 있으면 루비에서 많이 사용하는 dalli 젬에서는 공식지원하지 않습니다. 대신 dalli-elasticache에서 비공식으로 지원하는데 노드가 추가되거나 삭제되었을때 자동으로 반영되지는 않고 서버 재시작이 필요합니다.

엘라스틱캐시 멤캐시디 클러스터를 이용해 노드를 추가하고 삭제하는 것은 쉽지만 주의해야할 점이 있습니다. 클러스터 효율을 위해 캐시키가 여러대의 노드에 적절하게 분산되게 하는 방법 중 일관적 해싱Consistent hashing을 사용해야 대량의 캐시키 이동으로 인해 캐시 누락 사태를 방지할 수 있습니다. 일관적 해싱 알고리즘은 멤캐시디 클라이언트 라이브러리에서 지원해야 하는데 레일즈의 멤캐시디 라이브러리 달리에서는 일관적 해싱을 지원하고 있습니다.

44BITS 로고

아마존 웹 서비스(AWS, Amazon Web Serivce)란?

🏷️ 키워드, 2020-01-20 - 아마존 웹 서비스는 아마존의 자회사로 같은 이름으로 퍼블릭 클라우드 컴퓨팅 서비스를 제공하고 있습니다. 대표적인 서비스로는 컴퓨팅 자원을 제공하는 EC2, 오브젝트 스토리지 S3, 프라이빗 클라우드 VPC, 권한 제어 IAM, 컨테이너 오케스트레이션 ECS, EKS 등이 있습니다.
도움이 되셨나요?
RSS 리더 피들리에서 최신 글을 구독할 수 있습니다.
트위터, 페이스북으로 44BITS의 새소식을 전해드립니다.
✔ 44BITS의 다른 활동도 확인해보세요. 다양한 채널에서 만나볼 수 있습니다.
✔ 따뜻한 댓글 하나와 피드백은 큰 힘이 됩니다.

구글, 사이트 신뢰성 엔지니어링 워크북(Site Reliability Workbook) 온라인 무료 공개

🗞 새소식, 2019-02-12 - 구글에서는 작년 말 사이트 신뢰성 워크북을 출간했습니다. 2019년 1월부터 이 책을 온라인 상에 무료로 읽을 수 있습니다. 이와 함께 구글 클라우드 블로그에서 소개한 SRE 팀 체크리스트를 소개합니다.

구글, 도커(Docker) 컨테이너 기반 서버리스 서비스인 클라우드 런(Cloud Run) 발표

🗞 새소식, 2019-05-01 - 구글은 지난 4월 11일, 구글 클라우드 넥스트 2019에서 도커 컨테이너를 서버리스 환경에서 운영할 수 있는 클라우드 런 서비스를 발표했습니다.

44bits 프로젝트 2019년 결산: 블로그, 팟캐스트, 유튜브 인기 컨텐츠 등

🗒 기사, 2019-12-26 - 44bits의 2019년 활동 보고서입니다. 44bits에서는 2018년 7월 블로그를 시작으로, 팟캐스트, 유튜브 등에서 컨텐츠를 제작하고 있습니다. 각 채널의 올해 인기 있었던 컨텐츠들과 앞으로의 계획을 공유합니다.