ARCUS(아커스)는 네이버(NAVER) 서비스들의 요구 사항을 반영하여 개발한 메모리 캐시 클러스터입니다. 오픈소스 프로젝트인 Memcached 기반으로 키-밸류 데이터 모델을 확장하고 Zookeeper를 이용하여 운영 도중에 캐시 노드를 추가 또는 제거할 수 있는 수평 확장(horizontal scale-out) 기능을 장착한 "유연한 캐시 클러스터(elastic cache cluster)" 시스템이며, 2014년 5월부터 오픈소스로 공개하였습니다.

ARCUS(아커스)는 응용 웹/모바일 서비스에서 조회 성격의 API 수행 결과를 빠른 메모리에 캐싱해 두고 반복된 조회에서 이용함으로써 서비스 처리 성능을 극대화하고 사용자들이 쾌적한 웹/모바일 서비스를 경험할 수 있도록 도와주는 캐시 솔루션입니다.


Service Concept

ARCUS는 응용에게 remote caching 서비스를 제공하는 memory cache cluster입니다. ARCUS는 일반적으로 back-end storage인 DB의 앞 단에서 hot-spot 성격의 데이터를 캐싱하여 반복된 조회에서 사용함으로써, 여러 응용들에게 빠른 응답성을 제공하면서 DB로의 load를 경감시켜 줍니다. 그 외에 복잡한 계산에 의한 결과물 또는 웹 처리상의 중간 데이터 등을 신속히 저장 및 조회할 수도 있으며, caching 데이터를 여러 프로세스들 간에 공유하여 사용할 수 있습니다.

arcus_service_concept

arcus_architecture

ARCUS Architecture

ARCUS 캐시 클러스터는 자신의 캐시 노드 목록을 고가용 저장소인 ZooKeeper에 보관하면서 클러스터의 수평 확장 또는 축소로 인해 변경되는 캐시 노드 목록을 실시간으로 응용에 장착된 ARCUS 클라이언트 드라이버에 전달하며, ARCUS 클라이언트 드라이버는 변경된 캐시 노드 목록에 따라 캐시 데이터를 자동으로 재배치합니다. ARCUS 캐시 클러스터의 확장 및 축소에 의한 처리는 모두 ARCUS 클라이언트 드라이버 내부에서 수행되므로, 응용은 어떠한 중단 없이 ARCUS 캐시 클러스터를 안정적으로 사용할 수 있습니다.


Cache Features

ARCUS 캐시 클러스터를 구성하는 개별 캐시 노드는 Memcached 오픈소스를 기반으로 응용 요구를 수용하여 다양한 collection 데이터 타입을 지원하고, 캐시 용도에 적합한 memory allocator를 제공하며, 클러스터 구성을 위한 ZooKeeper 모듈을 가지도록 개발한 제품으로 캐시 서버 역할을 수행합니다. ARCUS 데이터 모델은 하나의 데이터만을 가지는 simple key-value 데이터 타입 외에도 다수의 데이터를 구조화된 형태로 저장하고 일부 또는 전체 데이터를 조회할 수 있는 collection 데이터 타입을 제공합니다. Collection 타입으로List, Set, Map 타입을 기본으로 제공하며, 데이터들의 정렬과 범위 검색 기능 그리고 필터링을 통한 선택적 검색이 가능한 B+Tree collection 타입을 제공하여 응용의 다양한 요구들을 충족시켜 줍니다.

arcus_collection

ARCUS 캐시는 인-메모리 캐시로 제한된 크기의 메모리 공간을 효율적으로 사용할 수 있어야 합니다. Collection 데이터 타입을 제공함에 따라 메모리 공간 요청이 예전보다 다양해 진 상황에서 메모리 파편화(memory fragmentation)를 최소화하여 메모리 사용 효율을 높이는 memory allocator를 자체 개발하여 사용하고 있습니다. 이를 통해, 응용의 다양한 메모리 사용 패턴에서도 안정적인 메모리 사용이 가능합니다.

Collection Structure

단순 key-value 데이터 타입과 비교하여 collection 데이터 타입의 특징과 자료 구조는 아래와 같습니다.

  • Key Value : key-value 쌍으로 저장하는 구조입니다. simple_key-value

  • List : double-linked list 구조를 가집니다. 현재 임의 위치의 데이터에 신속히 접근할 수 있는 기능이 없으므로, queue 또는 stack 형태로 사용하는 경우에만 유용합니다.
    arcus_collection_list

  • Set : unordered set of unique value 구조이며, membership check에 주로 사용합니다. 예를 들어, 사용자 간의 친구 여부를 조회할 때 유용합니다.

  • Map : unordered set of <field, value> 구조이며, field 값의 유일성 보장과 field 기준으로 해당 element 탐색을 빠르게 하기 위한 hash table 구조를 사용합니다.

  • B+Tree : 개념상 sorted map과 유사합니다. 각 element는 <bkey(b+tree key), data>로 구성되며, bkey 기준으로 sorted list 형태를 유지합니다. 하나의 bkey로 특정 data를 조회하거나 bkey 범위로 여러 data를 조회할 수 있습니다. 또한, element 내의 특정 값에 대한 필터링 기능으로 선택적인 조회가 가능합니다.

ARCUS 주요 기능 및 특징


ARCUS(아커스) 캐시 클러스터는 distributed key-value store 구조로 응용의 안정적인 서비스를 위한 다양한 특성들을 제공합니다.


Scalability

Caching 대상 데이터 규모 또는 caching 데이터에 대한 요청량 규모에 따라 cache node 추가/삭제 또는 cache memory 증대/감소를 통해 운영 도중에 서비스 중단 없이 cache cluster 규모를 늘리거나 줄일 수 있습니다.


Fault Tolerance

일부 cache node가 다운되거나 접근되지 않는 문제 등이 발생하면, 자동으로 failed cache node를 찾아 cache cluster에서 제거하고 나머지 cache node들로 cluster를 형성하여 동작합니다.


Replication

캐시 데이터의 이중화 기능으로 마스터 노드에 저장된 캐시 데이터를 슬레이브 노드에 상시 복제합니다. 운영 중에 마스터 노드의 장애나 업데이트로 인해 중지될 경우, 슬레이브 노드가 마스터 노드의 역할을 대신하여 서비스를 유지할 수 있습니다.


Migration

캐시 클러스터를 확장하거나 축소할 시에 consistent hashing에 의해 캐시 데이터의 담당 캐시 노드가 변경되며, 기존의 담당 캐시 노드에서 변경된 담당 캐시 노드로 캐시 데이터를 이관함으로써 캐시 데이터의 가용성을 보장합니다. (릴리즈 예정)


Availability

앞서 기술한 Fault-tolerance, replication, migration 기능으로 ARCUS 캐시 클러스터는 캐시 데이터의 고가용성을 제공합니다.


Monitoring

Hubble(허블)은 ARCUS Enterprise모니터링 도구로, 클러스터에 속한 캐시 노드의 통계 정보와 캐시 장비의 리소스 사용 데이터를 수집하고, 이를 대시보드에 시각화합니다.


Persistence

캐시 데이터의 영구 저장을 위하여, 캐시 데이터의 스냅샷(snapshot)과 명령 로깅(command logging) 방식을 구현하여 캐시 데이터를 영구 저장 장치에 보관하고, 캐시 노드가 종료되더라도 향후 재구동 시에 캐시 데이터를 그대로 복구하는 기능을 제공합니다. Persistence 기능 제공에 따른 수행 오버헤드를 최소화하도록 개발함으로써 ARCUS 기존 성능을 최대한 보장합니다.


ARCUS Operator

Kubernetes 환경에서 ARCUS 캐시 클러스터의 배포 및 운영을 자동화하는 ARCUS Operator를 제공합니다. 네이버의 쿠버네티스 환경에서 현재 ARCUS 캐시 클러스터를 운영하고 있습니다.


ARCUS 캐시 공통 모듈

Java 기반의 응용인 경우, 기본 캐싱 방식인 demand-fill 방식을 응용 코드 수정 없이 적용할 수 있게 합니다. 캐시 대상 응용 API에 대해 Annotation 설정 방식과 Property 파일로 캐시 대상 정보를 명시하여 적용하는 방식이 있습니다. 특히, Property 적용 방식인 경우는 응용 재배포 없이 캐시 대상 API를 변경할 수 있는 기능을 제공합니다.


ARCUS(아커스) 특징이나 기능에 대해 자세히 알아보려면 잼투인의 홈페이지를 방문하거나, 기술 특징들의 세부 정보를 알아보려면 기술 블로그를 확인해보세요.