콘텐츠로 이동하기
데이터베이스

Quizlet의 Memcached 워크로드 비용을 절반으로 줄여준 Memorystore

2021년 4월 12일
Mason Leung

Site Reliability Engineer, Quizlet

Google Cloud 사용해 보기

$300의 무료 크레딧과 20개 이상의 항상 무료인 제품으로 Google Cloud 사용을 시작해보세요.

무료 체험

편집자 주: 이번에는 학생과 교사에게 학습 리소스를 제공하는 온라인 학습 커뮤니티인 Quizlet의 사례를 소개합니다. 이 커뮤니티는 Memcached 노드 확장을 위한 보다 안전하고 편리한 솔루션을 얻기 위해 Memorystore로 전환했습니다.

월 사용자가 5,000만 명이 넘는 Quizlet은 학생과 교사에게 디지털 플래시 카드, 연습 문제, 대화형 다이어그램, 게임 등의 지능형 학습 도구를 제공하는 세계에서 가장 큰 온라인 학습 플랫폼 중 하나입니다. Quizlet은 2015년에 Google Cloud로 마이그레이션하기 시작하여 BigQueryCloud Storage를 포함한 데이터 클라우드 기술 솔루션을 도입했습니다.

Quizlet의 사이트 안정성 엔지니어(SRE)들 사이에는 Memcached(오픈소스 분산 메모리 캐싱 시스템)가 중단되면 Quizlet의 운영도 중단된다는 말이 있었습니다. 휘발성 캐싱 시스템 때문에 Memcached 노드를 관리하기 위해서는 확장성이 보다 뛰어난 솔루션이 필요했습니다. Google Memorystore for Memcached는 불과 절반의 비용으로 중단 없이 이 태스크를 처리해 주었습니다. Memorystore로 전환한 결과 SRE팀의 부담이 크게 줄었고 전반적인 성능이 개선되었습니다.

Memcached 사용 사례

Quizlet에서는 Memcached를 매우 간단한 방식으로 사용합니다. 예를 들어 사용자가 학습 중인 주제를 캡처하는 '학습 집합'을 만들 수 있고, 이 학습 집합에는 일반적으로 용어 및 정의는 물론 이미지와 음성 녹음을 포함할 수 있으며 이러한 요소들은 개별 데이터베이스에 저장됩니다. 처음으로 집합을 로드하면 다양한 데이터베이스에서 데이터를 가져옵니다. 그런 후 데이터를 사용자가 보기 좋은 형태로 조작하고 더 빠르게 액세스할 수 있도록 Memcached에 이 데이터를 저장합니다. 

Memorystore를 사용하기 전, Quizlet의 데이터 인프라에서는 Memcached를 Google Compute Engine 가상 머신에서 실행했습니다. Puppet을 통해 Memcached 풀에서 노드를 관리했으며 캐싱 전략은 Ketama를 사용하는 일관된 해싱이었습니다. 추가 용량이 필요할 때는 새로운 Memcached 노드를 도입하기가 복잡했으며 새 VM을 가동한 후 구성을 추가하고 OS를 로드하며 Memcached 바이너리를 실행하는 데 20~30분이 걸렸습니다.

기존 인프라의 높은 불확실성

확장이 큰 문제였습니다. 예를 들어 해마다 트래픽이 급증하는 개학 시즌의 예상 트래픽을 계산하여 Memcached 리소스가 충분한지 또는 리소스가 더 필요한지 판단해야 했습니다. 항상 추측하는 수밖에 없었습니다. 유지보수가 필요하면 수작업을 해야 했습니다. 다양한 리전에 VM이 배포되도록 Memcached VM을 가져와 다른 리전으로 이전하는 작업도 수동으로 이루어졌습니다. 이 기존 설정에서는 확장, 업데이트, 패치 과정이 모두 매우 어려웠고 많은 시간이 걸렸습니다. 

이러한 문제들은 SRE팀을 지치게 했습니다. 불안정한 구조 때문에 그 누구도 Memcached 레이어 작업을 맡고 싶어 하지 않았습니다. 기본적으로 임시 캐시로 작동할 때는 문제가 없었지만 캐싱 시스템이 중단될 경우 quizlet.com의 운영도 중단되기 때문에 꼭 필요한 경우가 아니라면 절대 수정하려고 하지 않았습니다. 이렇듯 불안정한 인프라는 치명적일 수 있습니다.

Memorystore 테스트

Quizlet의 웹 인프라 확장에도 동일한 문제에 직면했으며 더 많은 관리형 서비스를 채택하는 전사적 전략을 세우게 되었습니다. 예를 들어 자체 VM을 실행하는 대신 컨테이너 시스템으로 전환했습니다. 웹 서비스도 Google Kubernetes Engine(GKE)으로 이전했습니다. 

마이그레이션 과정에서 가용성 보장, 확장성, 패치, 모니터링 등 복잡한 Memcached 태스크의 자동화를 보장하는 Memorystore for Memcached를 평가했습니다. Memorystore의 테스트는 3단계로 이루어졌는데, 먼저 개발 환경에서 Memcached VM 중 하나와 비교하여 미미한 수준부터 허용 가능한 성능 저하까지 부하 테스트를 실시했습니다. 다음으로 Memorystore 노드를 스테이징 단계의 Memcached 풀 중 하나에 추가했습니다. 결과는 양호했고 노드가 호환 가능함을 확인할 수 있었습니다. 마지막으로 Memorystore 클러스터를 만들어 노드 하나를 프로덕션 단계에 두고 동일 풀에서 실행되는 24개의 VM에서 성능을 관측했습니다. 모든 것이 원활하게 실행되었습니다. 

Memorystore의 사용 공간 확보 및 비용 절감 효과

Memorystore는 즉시 작동하여 Quizlet의 니즈를 충족했습니다. 당시 Memcached 인프라를 교체하려면 힘든 마이그레이션 과정을 거쳐야 할 것으로 생각되었는데 그것은 쓸데없는 걱정이었습니다. Memorystore for Memcached에는 호환성 문제가 없었기 때문입니다. Memorystore 노드를 들여온 후 GCE에서 Memcached VM을 종료하기만 하면 되었기 때문에 빠르게 작업할 수 있었습니다. 덕분에 전체를 이전해도 되겠다는 강한 확신을 하게 되었습니다. 

다행히도 Memorystore는 Google Cloud Operations Suite(이전 명칭: Stackdriver)의 모니터링 기능과 통합되어 측정항목을 살펴보고 처음에 생각했던 것만큼 많은 노드를 실행할 필요가 없었음을 분명히 알게 되었습니다. 원래 24개의 Memcached VM이 있었으며 각각은 40~50GB로서 총 캐싱 크기가 1TB였습니다. 지금도 1TB의 캐시를 사용해 실행하고 있지만 배포된 Memorystore 노드가 6개에 불과하고 15~20%만 활용하기 때문에 운영 오버헤드가 크게 줄었습니다. 덕분에 트래픽 급증이나 예측하지 못한 장애에 훨씬 우수한 복원력으로 대응할 수 있게 되었습니다. 

컷오버를 위해 각 Memorystore 노드를 하나씩 풀에 추가하고 며칠 동안 실행해 봤습니다. Quizlet 서비스가 지속적으로 잘 작동하면 VM 노드를 제거했습니다. 몇 주 후 VM 노드를 1개까지 줄였음에도 완벽하게 실행되었고 몇 달 전에는 마지막 VM 노드를 종료했습니다. 

전보다 훨씬 적은 메모리를 사용하는 것 외에도 비용이 절반으로 줄어들었습니다. 현재 용량의 4분의 1만 사용 중이기 때문에 원한다면 더 많은 비용을 줄일 수도 있습니다. 하지만 원활하게 실행되고 있으며 작업해야 할 다른 프로젝트도 있기 때문에 이를 유지하고 계속 모니터링할 예정입니다. Memorystore for Memcached 레이어가 있다면 길게는 아니더라도 다음 '개학' 기간에 충분히 대처할 수 있게 되었습니다.

결과

Memorystore로 전환하면서 확장이 훨씬 쉬워졌고 SRE팀의 업무 부담이 크게 줄었습니다. 비용 절감, 사용 공간 확보, Memcached 작업 시간 단축 외에도 Google Cloud 운영 제품군의 Memorystore 통합으로 모니터링도 한결 쉬워졌습니다. 기준과 알람을 설정할 수 있다는 것도 큰 장점입니다. 또한 대시보드를 빠르게 빌드하여 보다 신뢰할 수 있는 결과를 쉽게 얻을 수 있습니다. 자체 관리 환경에서는 Memcached가 64GB 머신의 메모리 58GB처럼 잘못된 사용량 통계 수치를 보고합니다. 용량에 실제로 근접했는지 파악하기가 힘들었지만 파악하더라도 비즈니스에도 심각한 상황이 발생할 수 있었습니다. 이러한 이유로 안정적인 모니터링 역시 Memorystore로의 전환을 결정하게 된 동기였습니다. 

Memorystore가 효과적이라는 사실을 알게 되었고 향후 모놀리식 캐시 배포에서 서비스별 또는 그룹별 구조로 이전할 때도 사용을 검토할 예정입니다.  

Quizlet은 직원의 복지를 중요하게 생각합니다. Memorystore로의 전환이 SRE팀에 갖는 의미는 매우 큽니다. 자체 관리형 Memcached를 사용할 때는 문제의 발생 여부가 아니라 발생한다는 전제하에 발생 시기에 관한 고민이 지배적이었습니다. 이제는 Memorystore의 안정성과 관리형 서비스 덕분에 사용자와 비즈니스에 도움이 될 새로운 솔루션 개발에 아이디어와 에너지를 집중할 수 있게 되었습니다.

Quizlet에서 학생과 교사에게 제공하는 학습 리소스를 확인하세요. 그리고 Memorystore에서 사용할 수 있는 기능도 살펴보세요.
게시 위치