0
ForgeKV — Rust로 만든 멀티코어 Redis 대체제
backend
요약
기사 전체 정리
ForgeKV — Rust로 만든 멀티코어 Redis 대체제
Redis의 고질적 한계인 싱글스레드 구조를 Rust로 해결하겠다는 프로젝트임. Redis 프로토콜(RESP2)을 완전히 지원해서 기존 Redis 클라이언트를 그대로 쓸 수 있는 드롭인 대체제를 표방함.
아키텍처: 64-샤드 잠금 구조
- 핵심 설계는 64개 샤드 잠금 아키텍처임. 각 샤드가 자체 WAL(Write-Ahead Log), memtable, RwLock을 가짐
- 동시 쓰기가 같은 샤드에 해시되지 않는 한 서로 블로킹하지 않음 → 코어 수에 비례해서 처리량이 올라감
- Redis 키를 인식해서 샤딩하기 때문에, 같은 Redis 키의 메타데이터와 실제 데이터가 항상 같은 샤드에 들어감
put2명령으로 SET 시 메타+데이터를 한 번의 WAL 잠금으로 처리해서 라운드트립을 줄임
벤치마크 결과
memtier_benchmark 기준, pipeline=16, 64바이트 값 기준 SET 처리량:
- 스위트 스팟 (t=2, c=20, 40개 연결): ForgeKV 158K ops/s vs Redis 7 112K vs Dragonfly 45K
- Redis 7 대비 41% 빠름, Dragonfly 대비 3.5배
- 레이턴시도 우수: 같은 조건에서 ForgeKV 0.367ms vs Redis 0.546ms vs Dragonfly 1.273ms
- 싱글스레드(t=1)에선 Redis가 약간 앞서는데, 코어를 추가하면 ForgeKV가 올라가고 Redis는 정체되는 패턴
약점도 명확함:
- 고동시성 환경 **(t=4, c=50, 200개 연결)**에서는 ForgeKV가 59K로 떨어지고 Redis가 82K, Dragonfly가 95K로 역전됨
- 이건 WAL 그룹 커밋 최적화로 개선 예정이라고 함
Redis 호환성
지원하는 명령어 범위가 상당히 넓음:
- Strings, Keys, Hashes, Lists, Sets, Sorted Sets 등 기본 자료구조 전부
- HyperLogLog, Geo, Bitmaps, Pub/Sub, Streams까지 지원
- 트랜잭션(MULTI/EXEC), 스크립팅(EVAL/EVALSHA)도 됨
- JSON, Bloom Filter 모듈과 RedisSearch 스텁까지 포함
블로킹 커맨드(BLPOP, BRPOP 등)는 Tokio broadcast 채널로 구현함.
라이선스 주의
- Source-available 라이선스임. 완전한 오픈소스가 아님
- 평가 및 비상업적 사용은 무료, 상업적 사용이나 SaaS 형태 재배포는 별도 상업 라이선스 필요
- forgekv.com에서 라이선스 문의 가능
정리
2코어 정도의 환경에서 Redis를 대체할 만한 성능을 보여주고, 호환성도 꽤 탄탄함. 다만 고동시성 환경의 성능 하락과 source-available 라이선스는 도입 전에 반드시 따져봐야 할 부분임. "Redis가 싱글스레드라서 답답했던" 유스케이스가 있다면 한번 테스트해볼 만함.
댓글
댓글
댓글을 불러오는 중...