공지

HotKV를 소개합니다

모던 C++로 처음부터 작성한 멀티스레드 Redis 호환 데이터 저장소 HotKV를 만든 이유와 그 배경, 현재 제공하는 기능, 벤치마크 결과를 소개합니다.

HotKV 소개: 뜨겁게 돌아가는 키-값 저장소.

HotKV는 모던 C++로 처음부터 작성한 멀티스레드 Redis 호환 데이터 저장소로, 코어가 많은 최신 서버에서 가능한 한 낮은 비용으로 최대한의 속도를 끌어내도록 만들었습니다. 저는 HotKV Ltd의 창립자 겸 CEO인 Norbert E. Boros입니다. 이 글에서는 제가 HotKV를 만든 이유, 현재 HotKV가 하는 일, 그리고 측정 결과를 설명합니다.

요약. HotKV는 단일 프로세스 안에서 여러 스레드로 명령을 동시에 실행하며, Redis 프로토콜(RESP2 및 RESP3)을 사용합니다. vCPU 160개에서 진행한 2026년 10월 단일 인스턴스 벤치마크에서 HotKV는 측정한 12개 명령 중 11개에서 가장 높은 처리량을 기록했고, 열두 번째 명령에서는 Dragonfly와 대등했습니다. 테스트 구성과 그 한계는 아래에서 설명합니다.

HotKV를 만든 이유

저는 무엇을 만들든 속도를 중요하게 생각합니다. 웹사이트든 도구든 서버든 즉시 응답해야 하며, 그렇지 않을 때는 그 이유를 알고 싶어집니다. 이 습관은 제가 소프트웨어를 작성해 온 내내 제 일하는 방식을 만들어 왔습니다.

C와 C++는 오랫동안 저의 주력 언어였습니다. 저는 10년 가까이 수천 명의 플레이어 PC에서 실행되는 게임 안티치트 소프트웨어를 개발했습니다. 이 소프트웨어는 CPU와 메모리를 최대한 적게 사용하면서 메모리를 스캔해 치트를 찾아내야 했습니다. 소프트웨어가 쓰는 모든 사이클은 게임에서 빼앗아 오는 것이었기 때문입니다. 이 일을 통해 저는 모든 것을 측정하고, 하드웨어를 중심으로 설계하며, 낮은 리소스 사용량을 그 자체로 하나의 기능으로 다루는 법을 배웠습니다.

이와 함께 저는 빠른 캐시가 필요한 여러 프로젝트에서 Redis와 Valkey를 사용했습니다. 세션 저장소, 방화벽이 차단한 IP 주소 목록, 수억 건의 SQL Server 레코드 앞에 두는 캐시 등입니다. 둘 다 훌륭한 도구입니다. 동시에 오늘날 우리가 사용하는 코어가 많은 서버를 위해 처음부터 설계한 키-값 저장소라면 무엇을 할 수 있을지 궁금해졌습니다.

HotKV는 제가 찾은 답입니다. 가능한 한 낮은 비용으로 하드웨어에서 최대한의 속도를 끌어내기 위해 모던 C++로 처음부터 작성했습니다. 아래 벤치마크는 현재 HotKV의 위치를 보여 주며, 저는 아직 더 끌어낼 여지가 있다고 봅니다.

AI의 비용

두 번째 이유도 있었습니다. AI 애플리케이션을 운영하는 비용이 점점 비싸지고 있었습니다. 제게도 그랬고, 개발자들이 온라인에서 공유하는 이야기로 판단하건대 다른 많은 사람에게도 마찬가지였습니다. 그 비용의 상당 부분은 모델이 이미 답한 질문을 다시 보내는 데서 나오는 경우가 많습니다. 반복되거나 비슷한 질문을 알아보고 캐시에서 답하는 빠른 저장소는 그 비용을 줄이는 가장 직접적인 방법 중 하나입니다. 그래서 AI 워크로드를 위한 캐싱은 HotKV의 핵심입니다.

HotKV의 목적

HotKV Ltd는 이런 종류의 소프트웨어를 더 높은 성능으로, 더 저렴하게 만들기 위해 존재합니다. 최신 서버에는 코어가 많으며, 데이터 저장소는 그 코어를 활용해야 합니다. 그래야 가능한 한 낮은 비용으로 최대한의 속도를 얻을 수 있습니다.

두 번째 아이디어는 스택의 더 많은 부분을 한곳에 두는 것입니다. LLM 기반으로 개발하는 팀은 캐시, 벡터 데이터베이스, 에이전트 메모리를 보관할 곳을 따로 운영하고, 그 사이를 수많은 연결 코드로 잇게 되는 경우가 많습니다. 저는 캐싱과 그 주변의 AI 작업이 데이터 바로 옆, 하나의 엔진 안에 있기를 원합니다: 모델 호출의 완전 일치 캐싱과 시맨틱 캐싱, 벡터 검색, 에이전트 메모리, 토큰 예산 말입니다. 운영할 시스템이 줄어들면 움직이는 부품도 줄고 비용 청구액도 낮아질 것입니다. 현재 제공되는 기능은 AI 페이지에 정리되어 있으며, 토큰 절감 벤치마크는 저희 테스트에서 모델 호출 캐싱으로 절감한 결과를 보여 줍니다.

HotKV는 Redis 프로토콜과 익숙한 클라이언트 라이브러리를 그대로 유지합니다.

문제

코어가 많은 머신에서는 단일 명령 실행 스레드가 병목이 될 수 있습니다. 하나의 실행 스레드를 중심으로 만든 데이터 저장소는 보통 여러 인스턴스나 클러스터를 실행해 머신의 나머지 부분을 활용하며, 여기에는 배포 방식의 선택과 운영 작업이 따릅니다. 저는 HotKV를 반대쪽에서 시작하고 싶었습니다. 하나의 인스턴스 안에서 명령을 동시에 실행해, 단일 프로세스로 머신 전체를 활용할 수 있게 하는 것입니다.

HotKV는 무엇이 다른가

HotKV™는 C++20 언어로 작성되었으며 여러 코어에서 명령을 동시에 실행하도록 설계되어, 단일 인스턴스로 머신 전체를 활용할 수 있습니다. 아래에서 저희가 벤치마크한 Dragonfly도 멀티스레드 방식을 채택하고 있습니다.

  • 많은 코어, 하나의 인스턴스. 명령이 머신의 여러 코어에서 동시에 실행되므로, 인스턴스 하나가 작은 서버 여러 대 대신 큰 서버 한 대를 활용할 수 있습니다.
  • 익숙한 클라이언트와 프로토콜. HotKV는 RESP2와 RESP3 프로토콜을 지원하므로 익숙한 클라이언트 라이브러리로 연결할 수 있습니다. 트랜잭션(MULTI/EXEC)과 Lua 스크립팅도 지원합니다. 지원되는 명령과 차이점은 명령 문서를 참조하십시오.

개발 및 테스트 방식

저는 HotKV를 직접 개발하며, 도움이 되는 곳에서는 AI의 도움을 받습니다. 코드 한 줄이 어떻게 작성되었는지보다 중요한 것은 그 코드가 제대로 버티는지이므로, 엔진을 철저하게 테스트합니다. 2,000개가 넘는 자동화 테스트가 있으며, AddressSanitizer, ThreadSanitizer, UndefinedBehaviorSanitizer 환경에서 빌드됩니다. 프로토콜 파서, 명령 디스패치, RDB 및 AOF 로딩, 복제 스트림, 클러스터 버스를 위한 퍼즈 타깃도 갖추고 있습니다.

벤치마크 구성, 그 한계, 전체 결과는 성능 페이지에 있으니 수치를 직접 판단해 보실 수 있습니다.

벤치마크 한눈에 보기

2026년 10월 업데이트: 이 글에 처음 게시한 수치는 나중에 결함이 있는 것으로 확인된 벤치마크 실행에서 나온 것이었습니다(여러 문제 중 하나로, 모든 부하 생성기가 동일한 무작위 시드를 사용했습니다). 그래서 새로 구축한 벤치마크의 결과로 교체했습니다.

2026년 10월: HotKV, Redis, Valkey, Dragonfly

이 벤치마크는 HotKV Ltd가 수행했습니다. 저희는 소스에서 빌드한 HotKV와 Redis 8.10.2, Valkey 9.1.2, Dragonfly 2.0.2의 성능을 측정했습니다. 각 서버는 영속성을 끈 상태에서 Azure D160alds_v7(AMD EPYC 9V45)의 vCPU 160개 전체를 사용하는 단일 인스턴스로 단독 실행했습니다. 별도의 64-vCPU 머신 3대가 memtier_benchmark 도구로 부하를 생성했으며, 값 크기는 256바이트, 파이프라인 깊이는 30, 미리 채운 키는 5,000,000개였습니다. 모든 수치는 10초 실행 3회의 중앙값입니다.

HotKV는 12개 명령 중 11개에서 가장 높은 처리량을 기록했습니다. 명령과 서버에 따라 Redis나 Valkey 대비 8.6배에서 최소 69.7배 사이의 처리량을 기록했고, Dragonfly 대비로는 이 11개 명령에서 1.97배에서 4.41배 사이였으며, 그중 여러 값은 하한값입니다. PING에서는 Dragonfly가 0.6퍼센트 앞섰습니다. 부하 생성기가 자체 한계에 가까웠으므로 저희는 이를 동률로 봅니다. 데이터 명령 중 가장 높은 수치는 초당 9,080만 건의 INCR 연산이었습니다. INCR 및 PING 명령은 이동하는 데이터가 적어 부하 생성기에 의해 제한되므로, 이 두 명령에서 HotKV 자체의 수치는 더 높을 수 있습니다.

명령HotKV (백만 ops/s)HotKV 대 RedisHotKV 대 ValkeyHotKV 대 Dragonfly
SET50.5≥ 14.80x≥ 17.51x≥ 3.36x
GET36.6≥ 32.34x≥ 22.46x≥ 2.73x
MGET4.616.61x8.60x1.97x
SETNX55.3≥ 39.58x≥ 29.73x≥ 3.83x
APPEND25.116.37x19.41x2.83x
INCR90.843.15x47.33x4.41x
LPUSH31.625.34x37.55x2.99x
RPUSH43.8≥ 69.67x≥ 49.83x≥ 3.97x
SADD50.6≥ 24.65x≥ 56.60x≥ 4.20x
HSET29.0≥ 54.05x≥ 37.09x≥ 2.96x
MSET11.3≥ 29.78x≥ 24.26x≥ 3.83x
PING125.2≥ 38.70x≥ 35.98x0.99x (동률)

표 읽는 법

MGET 명령은 한 번에 키 8개를 읽고 MSET 명령은 한 번에 키-값 쌍 4개를 쓰며, 처리량은 명령 수로 집계합니다. 보고서는 HotKV 수치 7개(GET 및 쓰기 명령 6개)를 85% 네트워크 사용률 임계값에 도달했다는 이유로 표시하고, PING 수치는 부하 생성기의 CPU 사용률이 85%를 넘었다는 이유로 표시합니다. 이 수치를 바탕으로 한 배수는 하한값이며 ≥ 기호로 표시했습니다. GET 및 PING에서는 이 한계가 실제 한계입니다. 쓰기 명령 6개의 경우 보고서의 네트워크 사용률 수치는 인바운드와 아웃바운드 트래픽을 합산하여 아웃바운드 상한과 비교하므로, 한계에 얼마나 가까웠는지를 과대평가합니다. 가장 무거운 명령인 SETNX의 사용량은 측정된 인바운드 상한의 최대 약 80%였습니다. 저희는 보수적인 관례로 이 명령들에도 ≥ 표시를 유지합니다. 전체 표, 표시 항목, 방법 노트는 성능 페이지에 있습니다.

벤치마크의 범위

  • 빌드와 튜닝. HotKV는 테스트 CPU에 맞춰 -march=native 옵션으로 컴파일했으며, 다른 서버들은 기본 릴리스 빌드를 사용했습니다.
  • 스레드 설정. 모든 서버에 머신의 전체 코어를 할당했습니다: HotKV는 --threads 160, Dragonfly는 proactor 스레드 160개, Valkey는 io-threads 160, Redis는 최대치인 io-threads 128입니다. Redis와 Valkey는 하나의 스레드에서 명령을 실행하며 I/O 스레드가 더 적을 때 더 높은 처리량에 도달할 수 있으므로, 이들의 수치는 최고치보다 낮을 수 있습니다. 저희는 이들을 클러스터나 여러 인스턴스로 실행하지 않았습니다.
  • 범위. 명령 12개, 값 크기 한 가지, 파이프라인 깊이 한 가지, TLS 없음, 영속성 없음입니다. 이 속도에서는 파괴적 읽기가 메모리에 들어가는 어떤 리스트든 10초 안에 비워 버리므로 LPOP 및 RPOP 명령은 측정하지 않았습니다. 보고서에는 지연 시간과 메모리 사용량이 기록되어 있지만 여기서는 비교하지 않습니다. 각 10초 실행에서 서버마다 수행한 작업량이 크게 달랐으므로 메모리 수치는 같은 조건의 비교가 아닙니다. 혼합 워크로드는 측정하지 않았습니다.
  • 변동. Redis는 여러 명령에서 3회 실행 간 편차가 컸으며, HSET에서는 가장 빠른 실행과 가장 느린 실행의 차이가 최대 7.2배였는데, 중앙값에는 이것이 드러나지 않습니다. 각 경쟁 제품의 중앙값 대신 가장 빠른 실행과 비교해도 HotKV는 11개 명령 모두에서 여전히 앞섰습니다.

Redis, Valkey, Dragonfly는 각 소유자의 상표입니다. 이 이름들은 저희가 측정한 소프트웨어를 식별하기 위해서만 언급되었으며, 후원, 보증 또는 제휴 관계를 의미하지 않습니다.

현재 제공되는 기능

핵심 명령군에는 문자열, 리스트, 세트, 해시, 정렬된 세트, 스트림, 지리 공간 인덱스, 비트맵, HyperLogLog, pub/sub, Lua 스크립팅이 포함됩니다. AI 모듈과 엔터프라이즈 기능은 라이선스 플랜에서 실행되며, 각 플랜에 포함된 내용은 요금에서 확인할 수 있습니다. 현재 명령 지원 범위는 문서를 참조하십시오. Redis 명령 세트 외에도 다음 기능이 있습니다:

  • 키 태깅: 키에 임의의 태그를 붙이고 태그로 조회합니다(TAG.SET, TAG.MEMBERS 외 명령 5개).
  • 나노초 TTL: NEXPIRE, NTTL, NEXPIREAT 명령으로 만료 시간을 나노초 단위로 설정하고 읽을 수 있어, 밀리초보다 세밀한 기한을 지정할 수 있습니다. 만료된 키는 백그라운드 스윕과 접근 시점에 회수됩니다.
  • 선택적 값 압축: 크기 임계값(기본값 512바이트)을 넘는 값에 적용되며, 직접 켜지 않으면 꺼져 있습니다.
  • 포크 없는 스냅샷: BGSAVE 명령은 포크된 프로세스 대신 백그라운드 스레드에서 기록합니다. 스냅샷은 특정 시점의 복사본이 아닙니다. 각 키는 스냅샷 작업이 그 키에 도달했을 때의 상태로 저장됩니다. 추가 전용 파일(append-only file)을 다시 쓸 때는 포크를 사용합니다.
  • Prometheus 메트릭: 내장 HTTP 엔드포인트로, 기본적으로 꺼져 있으며 metrics-port 설정으로 활성화하므로 외부 익스포터가 필요하지 않습니다.

HotKV에는 HNSW 인덱스를 사용하는 벡터 검색도 내장되어 있습니다(VSIM.CREATEINDEX, VSIM.SET, VSIM.SEARCH). 벡터 검색: HotKV 대 Redis 8 벡터 세트, 클라이언트 1개에서 100개까지에서 Redis 8 대비 성능을 측정했습니다.

HotKV Cloud에서 시작하거나, 자체 서버에서 HotKV를 실행하는 방법은 영업팀에 문의하십시오.

유용하셨습니까?

이 글 공유하기

대화 이어가기

댓글

방법에 대해 궁금한 점이 있으십니까? 사용하시는 하드웨어에서 다른 결과가 나왔습니까? 발견한 내용을 공유해 주십시오. 댓글은 검토 후에 게시됩니다.

댓글 남기기

표시 이름과 댓글은 승인 후 공개됩니다. 이메일 주소는 위의 알림에만 사용되며 공개되지 않습니다. 작성을 시작하면 Cloudflare Turnstile이 스팸 여부를 확인합니다. 개인정보 처리 안내.