본문으로 건너뛰기
피드

ForgeKV — Rust로 만든 멀티코어 Redis 대체제

backend 약 4분
vote
0
댓글
북마크

Rust로 만든 Redis 드롭인 대체제. 64-샤드 잠금 아키텍처로 멀티코어 스케일링 지원. 2코어 환경에서 Redis 7 대비 41% 빠른 SET 처리량(158K ops/s). 고동시성에서는 약점 있음. Source-available 라이선스.

  • 1

    64-샤드 잠금 아키텍처(각 샤드별 WAL, memtable, RwLock)

  • 2

    t=2 c=20 기준 158K SET/s — Redis 7 대비 41% 빠름, Dragonfly 대비 3.5배

  • 3

    고동시성(200 연결)에서는 Redis에 역전당하는 약점

  • 4

    RESP2 완전 지원, source-available 라이선스(상업용은 별도 라이선스 필요)

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가 싱글스레드라서 답답했던" 유스케이스가 있다면 한번 테스트해볼 만함.

Redis의 싱글스레드 한계를 정면으로 공략하는 접근. 2-4코어 환경의 성능은 인상적이나, 고동시성 약점과 비오픈소스 라이선스가 프로덕션 도입 시 주요 검토 포인트.

댓글

댓글

댓글을 불러오는 중...

backend

잘못된 추상화보다 중복이 낫다는 샌디 메츠의 고전 조언

샌디 메츠는 중복을 없애려다 잘못된 추상화를 만들면 코드가 조건문과 파라미터로 부풀어 더 위험해진다고 말한다. 이미 틀어진 추상화는 억지로 보존하지 말고, 다시 호출부에 인라인해서 중복을 되살린 뒤 현재 요구사항에 맞는 새 구조를 찾는 편이 빠르다는 주장이다.

backend

리눅스 커널, 6년·360개 넘는 패치 끝에 strncpy 제거

리눅스 커널이 오랫동안 버그의 원인이던 strncpy API 사용을 Linux 7.2에서 제거했어. NUL 종료 동작이 직관적이지 않고 불필요한 zero-fill로 성능 문제도 있던 API를 6년 동안 약 362개 커밋으로 걷어낸 작업임.

backend

덕디비는 왜 빠를까: 서버 없는 분석 엔진의 내부 구조 뜯어보기

DuckDB가 단일 바이너리, 인프로세스 실행, 컬럼형 저장, 최적화 패스, Parquet 푸시다운으로 빠른 분석 쿼리를 처리하는 방식을 깊게 설명한 글이다. 6GB Parquet 파일을 노트북에서 바로 SQL로 읽는 경험 뒤에 어떤 설계가 깔려 있는지 따라간다.

backend

피지독, 포스트그레스를 수평 확장시키겠다고 550만 달러 투자 유치

피지독은 포스트그레스 앞단에 프록시를 두고 샤딩과 라우팅을 처리해 수평 확장을 가능하게 하겠다는 오픈소스 프로젝트다. 이미 프로덕션에서 초당 200만 건이 넘는 쿼리를 처리하고, 확인된 규모만 20테라바이트 이상을 샤딩했다고 밝히며 550만 달러 투자를 공개했다.

backend

펜타시스템, EDB 포스트그레SQL로 국내 엔터프라이즈 DB 전환 시장 공략

펜타시스템테크놀러지가 EDB와 파트너 계약을 맺고 국내에 EDB 포스트그레SQL 기반 데이터 플랫폼을 공급한다. 기존 상용 DBMS 정책 변화로 비용 부담이 커진 기업들을 겨냥해, 오픈소스 기반 엔터프라이즈 데이터 플랫폼 전환 수요를 잡겠다는 전략이다. 금융, 공공, 제조, 유통, 클라우드, AI 데이터 분석 환경까지 적용 범위를 넓히려는 움직임이다.