본문 바로가기
CSP (Cloud Service Provider)/AWS

[AWS] Elasticache

by BTC_222 2022. 6. 20.

💙베하💙 누구든 탑승할 수 있는  팀입니다!!💨😉

지난주에 이어 이번 주에는 aws의 Elasticache에 대해서 알아보았습니다!

Amazon ElastiCache 란?

Amazon ElastiCache는 유연한 실시간의 유스케이스를 서포트하는 풀 매니지드의 인메모리 캐싱 서비스로, Memcached 또는Redis 프로토콜에 호환성이 있습니다.

 

특징

읽는 양이 많은 애플리케이션의 대량의 작업 부하(소셜 네트워킹, 게임, 미디어 공유, Q&A, 포털 등)나
방대한 계산 처리를 필요하는 작업 부하 (레커멘데이션 엔진 등)의 레이턴시나 스루풋을 개선하기 위해서 사용할 수 있습니다.
게다가 Redis는 고도한 데이터 구조를 서포트하기 때문에 코스트 효율이 높은 방법으로
데이터베이스 층을 확장하여 데이터베이스 경우로는 간단하게 달성할 수 없는 기능을 실행할 수 있습니다.

요금

온디멘드의 노드는 1시간당의 과금이 되어 리저브드 노드는 1년 또는 3년으로의 지불이 됩니다. 이들에 더해 백업 스토리지와 데이터 전송(리전 내/외), ElastiCache for Outposts 이용 부여에 따라서 요금이 정해집니다.

유스케이스

비즈니스 유스케이스에서도 가장 유저가 필요로 하고 있는/더욱 많이 액세스 되는 데이터를 고속으로 리스폰스로 답하고 싶을 때 데이터를 캐시해서 이용합니다.
애플리케이션과 데이터 베이스 퍼포먼스를 고속화하는 캐싱에 쓰거나 세션 스토어, 게이밍 리더 보드, 스트리밍 및 분석 등의 내구성을 필요하지 않는 유스케이스의 프라이머리 데이터 스토어로 사용할 수 있습니다.

개인적의 경험상, 멀티 플레이어 게임의 유저 랭킹 계산/표시, Form데이터 계산 결과의 일시 저장, 각 유저 상태에 의존하는 분기 조건, 또 추첨 사이트나 방송 사이트의 세션 데이터, 레커멘데이션, DB데이터의 일시 퇴피, 용장 퇴피 등 많은 장면에서 쓸 수 있는 것 같습니다.

● Memcached UseCase
● Redis UseCase

 

노드, 샤드, 클러스터란?

노드란 Amazon ElastiCache를 디플로이할 때의 최소 구성 요소입니다.

이것은 네트워크에 접속된 시큐어한 RAM의 고정 사이즈의 단편입니다.

각 노드에서는 Memcached 또는Redis 프로토콜 준거 서비스의 인스턴스가 실행되어 각각 DNS명과 포트가 있습니다.

관련된 메모리 양이 다른, 복수 타입의 노드가 서포트되고 있습니다.

Redis 샤드는 클러스터의 키 스페이스의 서브 세트이고 프라이머리 노드 및 0개 이상의 리드 레플리카를 포함할 수 있습니다. 클러스터는 복수 샤드로 형성됩니다.

 

샤드는 노드의 그룹입니다.(샤드 (API 와 CLI에서는 노드 그룹) 는 노드의 계층적 배열)

 

Redis vs. Memcached 비교

Redis(Remote Dictionary Storage, 레디스)와 Memcached(맴캐시드)는 유명한 오픈소스인, 인메모리 데이터 저장소입니다.

둘 모두 사용하기 쉽고, 고성능을 자랑합니다. 하지만, 엔진으로 사용할 때 차이를 반드시 고려해야합니다. 맴캐쉬드는 명료하고 단순함을 위하여 개발된 반면, 레디스는 다양한 용도에 효과적으로 사용할 수 있도록 많은 특징을 가지고 개발되었습니다. 각 엔진들이 제공하는 기능과 필요한 상황을 고려하면, 선택이 어렵지 않을 것 같습니다.

공통점

1. 1ms 이하의 응답대기시간

1ms 이하의 응답시간을 제공합니다. 데이터를 메모리에 저장하기 때문에, 디스크 기반의 데이터베이스보다 빠르게 데이터를 읽을 수 있습니다.

2.개발의 용이성

문법적으로 사용하기 쉽고, 개발코드 양 또한 적습니다.

3. 데이터 파티셔닝

데이터를 여러 노드에 분산하여 저장시킬 수 있습니다. 따라서 수요가 증가할 때 더 많은 데이터를 효과적으로 처리하기 위하여 스케일아웃이 가능합니다.

4. 다양한 프로그래밍 언어 지원

여러 개발언어를 지원합니다. 자바, 파이썬, C, C++, C#, JavaScript, Node.Js, Ruby, Go 그리고 다른 언어들을 지원합니다.

Memcached만 의 특징

멀티스레드를 지원하기 때문에, 멀티프로세스코어를 사용할 수 있습니다. 따라서, 스케일업을 통하여 더욱 많은 작업처리를 할 수 있습니다.

Redis만 의 특징

1. 더욱 다양한 데이터 구조

문자열 뿐만 아니라 List, Set, 정렬된 Set, Hash, Bit 배열, hyperloglogs (매우 적은 메모리로 집합의 개수를 추정할 수 있는 방법)을 지원합니다. 프로그램에서 위의 다양한 자료구조를 사용할 수 있습니다. 예를 들어, Sorted Set을 활용하여 게임유저의 상위랭크 정보를 쉽게 제공할 수 있습니다.

2. Snapshots

레디스는 특정시점에 데이터를 디스크에 저장하여 파일 보관이 가능합니다. 또한, 장애상황시 복구에 사용할 수 있습니다.

3. 복제

Master — Salves 구조로, 여러개의 복제본을 만들 수 있습니다. 따라서 데이터베이스 읽기를 확장할 수 있기 때문에 높은 가용성(오랜 시간동안 고장나지 않음) 클러스터를 제공합니다

3. 트랜젝션

트렌젝션이란 데이터베이스 상태를 변경시키는 작업 단위를 의미하고, 원자성, 일관성, 독립성, 지속성의 특징을 가지고 있습니다. Redis는 이러한 특징을 지원합니다.

4. Pub / Sub messaging

Publish(발행)과 Sub(구독)방식의 메시지를 패턴 검색이 가능합니다. 따라서 높은 성능을 요구하는 채팅, 실시간 스트리밍, SNS 피드 그리고 서버상호통신에 사용할 수 있습니다.

5. 루아 스크립트 지원

매우 경량화된 절차스크립트 언어인 루아를 지원합니다. eval 명령어를 사용하여 루아스크립트를 실행시킬 수 있습니다. 따라서, 프로그램을 명료하게하고 성능을 높일 수 있습니다.

6. 위치기반 데이터 타입 지원

Redis는 실시간 위치기반데이터를 지원합니다. 따라서, 두 위치의 거리를 찾거나, 사이에 있는 요소 찾기등의 작업을 수행할 수 있습니다. 이를 활용하여 맛집, 길찾기 그리고 지도기반의 고성능 서비스를 제공할 수 있습니다.

주의점

위의 특징만 보면, 모든 상황에서 Redis를 선택해야할 것 같습니다.

하지만, Redis는 싱글 쓰레드이기 때문에, 1번에 1개의 명령어만 실행할 수 있습니다. Keys(저장된 모든키를 보여주는 명령어)나 flushall(모든 데이터 삭제)등의 명령어를 사용할 때, 맴캐쉬드의 경우 1ms정도 소요되지만, 레디스의 경우 100만건의 데이터 기준 1초로 엄청난 속도 차이가 있습니다.

또한, RDB 작업(특정 간격마다 모든 데이터를 디스크에 저장)이 매우 오래걸립니다. AWS, 60기가 메모리 기준으로 10분이나 소요됩니다. Redis 장애에 원인의 대부분이 해당 기능 때문에 발생하기 때문에 사용할 때 주의해야합니다.

 

 

다음번엔 더욱 유익한 내용으로 찾아오겠습니다.

날씨가 많이 더워지고 있는데 얼음 나눠먹어요~,~

 

댓글