IT/AWS

[Netflix] Distributed In-memory Datastore

물통꿀꿀이 2019. 2. 23. 00:57

이번 포스팅에서는 Netflix에서 공개한 클라우드 환경에서의 분산형 데이트스토어인 EVCache에 대해 알아보려고 한다. 원문은 해당 페이지를 참조하면 된다.

(https://medium.com/netflix-techblog/announcing-evcache-distributed-in-memory-datastore-for-cloud-c26a698c27f7)


EVCache는 Netflix에서 개발한 인-메모리 데이터스토어이다. Github에 공개되어 있는 소스 코드를 보면 좀 더 확실히 알 수 있겠지만 기본 문서를 읽어보면 기본 바탕은 memcached로 이루어져 있다. 이를 기본으로 클라우드 환경에서 적절히 사용 할 수 있는 인-메모리 데이터 스토어를 확장한 것이다.

(https://github.com/Netflix/EVCache)


EVCache의 Naming에는 3가지 중요한 의미가 담겨있다.

- Ephemeral : 짧은 기간 동안 유지 (TTL)

- Volatile : 언제든지 삭제

- Cache : 인-메모리 key-value 스토어

그런데 사실 위에서 언급한 3가지는 대부분의 Cache에서 가지고 있는 기능들이다. 

(Cache 자체가 인-메모리를 사용하기 때문에 데이터를 효과적으로 사용하기 위해서는 필요없는 데이터는 삭제해야 한다.)


기존 Cache와 큰 차이점은 없어보이는데 그렇다면 EVCache 장점은 무엇일까? Netflix에서는 크게 3가지라고 설명한다.

1) 데이터 fetch가 빠르다.

2) 서비스의 처리량이 증가한다.

3) 대부분의 요청을 Cache에서 처리하기 때문에 외부의 요청은 수행할 서버의 수나 로드(Load)를 줄일 수 있다.

1번은 Cache이기 때문에 당연해보이지만 2,3 번은 클라우드 환경에서의 아키텍처에 따라 많이 달라질 수 있다. 때문에 내부적인 아키텍처를 확인해 보고 EVCache의 장점을 좀 더 명확하게 알아보도록 하자.


그림 1. Basic EVCache


그림 1에서도 확인 할 수 있듯이, memcahced 라고 쓰여있는 부분이 EVCache 서버이다. 각 서버에는 memcached 인스턴스 및 여러 Java 어플리케이션*을 운영한다. 또한 EVCache App는 memcached 인스턴스를 논리적으로 그룹화한다. (EVCache App 별로 데이터를 공유한다.) 마지막으로 EVCache 클라이언트는 EVCache App과 통신하는 역할을 한다.

*memcached 프로세스를 모니터링 및 Servo에 데이터를 수집, 보고하는 역할을 하는 Euraka와 연결하는 어플리케이션이다.


그림 2. EVCache App in 2 Clusters


그럼 그림 1을 확장한 그림 2을 확인해보자. EVCache App에 2 개의 클러스터가 존재한다. 각 클러스터는 low latency, reliability, isolation를 확립하기 위해 클러스터 내부에 있는 EC2 인스턴스 모두 같은 AZ에 구성한다. (클러스터는 논리적인 개념으로 내부의 인스턴스를 같은 AZ로 묶으면 AZ 간에 영향을 주지 않는다.)

또한 EVCache에서 특정 클러스터에서 장애가 발생하면 정상 클러스터로 failover 하면 되기 때문에 장애에 영향을 받지 않는다. (클러스터 간에 데이터를 replicate*하기 때문에 데이터 손실이 발생하지 않는다.) 

*클라이언트에서 클러스터로 데이터를 보낼 때, 데이터는 클러스터 내부에 있는 memcached instance에 consistent hashing 알고리즘에 따라 sharding된다.


이처럼 EVCache는 HA(High Availability), Reliability, Isolation 등의 특징을 가지고 있기 때문에 클라우드 환경에서 큰 문제 없이 사용 할 수 있다.


그림 3. EVCache App Scenario in 3 Clusters with AZs


그림 1, 2의 내용을 합쳐서 보면 그림 3과 같다. 이전의 그림 보다 좀 더 자세히 그려지긴 했지만 전반적인 부분은 동일하다. 이렇듯 Netflix에서는 클라우드 환경에서 Cache를 좀 더 효율적으로 사용하기 위해 EVCache를 개발하였다.

그런데 클라우드의 분산 환경에서 HA나 Reliability 등등과 같은 기능은 거의 필수 있다. 때문에 이번 포스팅에서는 EVCache의 전반적인 부분만 살펴보고 내부적인 부분은 살펴보지 않았기 때문에 EVCache 만의 다른 점이 있다고 말하기는 어렵다. 다음 포스팅에서 EVCache 내부를 좀 더 살펴보고 어떻게 외부의 요청을 효과적으로 처리하는지 알아보도록 하겠다. 


참조

https://medium.com/netflix-techblog/announcing-evcache-distributed-in-memory-datastore-for-cloud-c26a698c27f7