일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 프로그래머스 등굣길
- 프로그래머스 베스트앨범
- 등굣길 파이썬
- 반도체 설계 파이썬
- 백준 1034 램프 파이썬
- 램프 파이썬
- 가장 긴 팰린드롬 파이썬
- 역사 파이썬
- 순위 파이썬
- 가장 긴 바이토닉 부분 수열 파이썬
- 백준 1043 거짓말 파이썬
- 게임 개발 파이썬
- 베스트앨범 파이썬
- 백준 1516 게임 개발
- 백준 1167 트리의 지름 파이썬
- 백준 11054.가장 긴 바이토닉 부분 수열
- 트리의 지름 파이썬
- 다리 만들기 파이썬
- 다중 컬럼 NOT IN
- 백준 2146 다리 만들기
- 백준 2352 반도체 설계 파이썬
- 프로그래머스 여행경로
- SQL SERVER 장비교체
- 프로그래머스 순위 파이썬
- 백준 1238 파티 파이썬
- 프로그래머스 가장 긴 팰린드롬
- 프로그래머스 순위
- SQL SERVER MIGRATION
- 백준 1613 역사
- SWEA
- Today
- Total
공부, 기록
Valkey의 멀티스레드 아키텍처 본문
Valkey 는 Redis를 포크하여 시작된 NoSQL 오픈소스로 Redis의 기능을 사용하나 차이점 또한 있다.
가장 큰 차이점이라고 생각되는건 멀티스레드 아키텍처인데 이에 대해 공부하고 정리하고자 하였다.
1. Valkey 8.0 의 멀티스레드 아키텍처
과거 Redis의 경우 멀티 i/o 플렉싱을 구현하여 요청에 대하여 멀티처리를 하고 명령어 처리는 싱글스레드로 동작하여 개선을 하였는데 Valkey는 Main Thread라는 구성을 앞단에 두어 단순함을 유지하며 I/O Thread를 추가하여 멀티 스레드로 병렬을 높인 것으로 보인다. Valkey의 멀티스레드 아키텍처는 아래와 같다
I/O 스레드는 메인 스레드에서 실행할 작업을 수신하는 작업자 스레드이다.
I/O 스레드에서는 최소 작업만 하도록 한다.
IO 스레드는 다음을 주로 담당한다.
- 읽기 작업: IO 스레드는 단일 명령만 읽고 파싱합니다. 서버 통계를 업데이트하거나, 읽기 오류를 처리하거나, 파싱 오류를 처리하지 않습니다. 이러한 작업은 메인 스레드에서 처리합니다.
- 쓰기 작업: IO 스레드는 사용 가능한 데이터만 씁니다. 클라이언트의 응답을 해제하거나, 쓰기 오류를 처리하거나, 서버 통계를 업데이트하지 않습니다.
I/O 스레드는 I/O를 처리 메인 스레드는 명령을 처리하는데 집중한다.
메인 스레드는 I/O 스레드에 생성된 작업을 조정하며 경쟁이 발생하지 않도록 한다. 이를 통해 I/O 스레드의 동적 특성에도 불구하고 메인 스레드는 스레드 친화성을 유지하여 가능한 동일한 I/O 스레드가 동일한 클라이언트에 대한 I/O를 처리하도록 하여 메모리 액세스의 지역성을 개선하였다고 한다.
epoll_wait 프로시저를 메인 스레드에서만 호출하는 방식을 통하여 성능을 향상시켰다.
또한 여러 CPU가 사용되기 때문에 자주 액세스되는 데이터를 사전 페치하여 CPU 캐시 미스를 최소화하고 사전 작업에 필요한 메모리 액세스를 줄여 메모리 액세스 패턴을 최적화한다 (prefetch-commands-keys 기능으로 보임)
Valkey는 멀티스레드를 사용하여 명령어를 처리하는데 이로 인한 영향은 아래 내용으로 생각할 수 있을 것 같다
- MGET과 같은 다중 키 작업에서 효율성이 증가한다
싱글스레드인 Redis의 특성상 MGET과 같은 오래걸리는 명령어는 서비스에 영향도가 증가하는데 Valkey는 더 많은 CPU를 사용하여 다른 명령어가 지연되는 상황을 예방할 수 있다 - Hotkey가 있는 상황을 대처할 수 있다
Hotkey는 싱글 스레드인 Redis에서는 대처하기 상당히 어려운 경우인데 멀티스레드가 도입된 Valkey에서는 이에 대한 리스크가 확실히 줄어든다. - 노드 하나의 사이즈가 커지다보니 이로 인한 영향도는 작은 규모의 노드를 여럿 사용하게 되는 Redis 클러스터에 비하여 상대적으로 커질 수 있다.
- 또한 노드가 커지며 복제 노드가 Down 되어 전체 동기화 작업이 발생하였을 때 Master노드와 복제 노드 모두 영향도가 발생한다.
아래는 Valkey 멀티스레의 퍼포먼스 차이로 상당량 개선된 것을 알 수 있다.
참조
https://github.com/valkey-io/valkey/pull/763
https://valkey.io/blog/valkey-8-0-0-rc1/
'공부 > DATABASE' 카테고리의 다른 글
[AWS] Aurora, ElastiCache 타입 변경 스크립트 (0) | 2024.11.21 |
---|---|
SQL Server와 MySQL만 하다가 PostgreSQL을 공부하니.. (0) | 2024.10.15 |
[AWS] DynamoDB (0) | 2024.09.15 |
[AWS] OpenSearch Service (0) | 2024.09.15 |
[PostgreSQL] Aurora PostgreSQL의 Shared Buffer 기본값 (0) | 2024.09.15 |