Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: [AWS] AWS ElastiCache란?? #41

Merged
merged 1 commit into from
Jan 22, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 107 additions & 0 deletions AWS/ElastiCache.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@

## AWS ElastiCache란??

![](https://i.imgur.com/DwAkz37.png)

ElastiCache는 인메모리 캐싱 서비스이다.
사실 Redis라고 이해해도 무방하다.

Memcached, Redis, Valkey 등이 있긴하지만
보통 Redis만 사용한다.
~~요즘은 Valkey도..~~

### 인메모리 캐시란?

보편적으로 사용하는 RDBMS와 같은 데이터베이스가 아닌
모든 데이터를 메모리(RAM)에 올려놓고 사용하는 데이터베이스의 일종이다.

보통 RDBMS는 디스크에 데이터를 영구적으로 저장하고 필요한 데이터를 메모리에 올려 사용하는 구조이다.

인메모리는 디스크에 접근하지 않고 메모리로만 처리를 하기에 데이터 저장, 검색 속도가 매우. 매우 빠르다.
다만 메모리 용량이 작은 만큼 비용이 비싸고 서버가 꺼지게 되면 데이터는 소멸된다.

현재 ElastiCache에서 지원하는 종류는
- Redis
- Memcached
- Valkey
3가지이다.

Valkey는 Redis가 라이선스 정책을 변경 후 AWS와 같은 Provider들이 Redis 사용하는것에 제약이 생길 수 있게 되면서 이에 반발하며 만들어진 Redis Fork 프로젝트이다.

물론 우리 같은 개발자들이 Redis 설치해서 사용하고 라이브러리 사용하는건 문제가 없다!

### 특징

인메모리 캐싱 서비스인만큼
IO가 많은 서비스에서 작업 부하를 줄이기 위해서 사용한다.
- 예) 소셜 네트워킹, 미디어 공유, 게임, 등등

보통 서비스에선 응답 속도를 줄이기 위해서 캐싱용으로 많이 사용한다.
또한 Redis는 다양한 데이터 구조를 지원하기에 코스트 효율이 높은편이다.

그리고 ElastiCache는 다중 AZ, 서버리스 구성을 지원해 높은 수준의 가용성을 보장한다.

### Memcached vs Redis

각 엔진은 똑같이 인메모리 키 벨류 저장소이다.
그치만 서로 유즈케이스가 조금 다르다.

우선 Memcached를 선택하는게 유리한 상황으로
- 가능한 단순한 모델이 필요한 경우
- 여러 코어, 스레드 있는 큰 노드를 실행해야하는 경우
- 노드를 스케일링하는 기능이 필요할떄
- 객체를 캐시에 저장해야할때

이렇게 보면 Redis 써도 괜찮지 않나??라는 생각이 들것이다.
사실 Redis 써도 된다.

가장 큰 차이점은 스레드 모델, 자료구조 차이다.
- Redis는 싱글 스레드 기반이다.
- Memcached 는 멀티 스레드를 지원한다.
Comment on lines +58 to +60
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Redis가 싱글 스레드로 동작하기에 가지는 장점과 단점이 무엇이라고 생각하시나요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 역시 데이터 무결성 유지가 젤 장점이죠 경합 발생 안하니 안전하다!
  • 아쉬운건 병렬 처리가 안되다보니까 좀 느리다..?

근데 멀티플랙싱이란 기술도 있고 실제로는 백그라운드에서 disk i/o 같은건 멀티 쓰레드로 하는걸로 알고 있어요
Redis의 명령어처리만 싱글스레드


- Redis 다양한 자료구조
- Memcached 문자열 형태


또한 싱글 스레드로 데이터를 Atomic 하게 관리한다는 장점도 존재하고.
Redis에 ThreadedIO, 클러스터 모드가 추가되면서
기존 Memcahced의 장점들을 대부분 커버한다.

그래서 대부분 Redis를 사용한다.

### 노드, 샤드, 클러스터

![](https://i.imgur.com/97JIQvA.png)

![](https://i.imgur.com/9qegCdV.png)

ElastiCache에서 알아야할 구성 요소들이다.

우선 Node는 ElastiCache를 사용할때 최소 구성 요소이다.
- 예) Redis 노드 1대

샤드는 노드의 그룹이다.
Master 노드 와 0개 이상의 Read Replica로 구성되고

클러스터는 샤드의 그룹이다.
Comment on lines +72 to +86
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ElastiCache를 클러스터 모드로 해놓고 코드 레벨에서 클러스터링에 대한 설정을 추가하지 않아, 간헐적으로 개발 서버가 잘 동작했다가 동작하지 않는 현상이 발생했던 경험이 있어요 ㅎㅎ AWS가 알아서 해주는 줄 알았던... 😅

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

핫. 저도...



### 사용 예시

- 캐싱
- 빠른 데이터 엑세스를 위해서 사용한다.
- 같은 데이터에 반복적으로 접근하는 경우 데이터를 캐싱한다.
- API 응답 캐싱
- 웹 페이지 캐싱
- 세션 스토리지
- `GET`, `SET`, `EXPIRE` 등 간단한 명령어를 통해 구현 가능하다.
- 실시간 순위
- 실시간 데이터 처리가 가능해 랭킹 시스템 등에 사용한다.
- 특정 점수 기반 리더 보드, 인기 게시물 등
- `ZSET` 같은 Sorted Set 등 자료 구조를 사용하여 구현한다.
- Message Queue
- ![](https://i.imgur.com/CZd9kre.png)

- Redis를 MQ처럼 사용이 가능하다.
- Pub/Sub, List, Stream 형태로 각각 구현이 가능한데 Kafka 와 같은 이벤트 브로커에 비해서는 안정성이나 성능이 떨어지긴한다.
- 정말 간단한 MQ가 필요한 경우에 Redis를 사용하고 이후 사용량이 늘어나면 RabbitMQ, Kafka, SQS 등으로 넘어가는 것도 좋을것 같다.