Redis互換で25倍高速とする「Dragonfly」が登場。2022年の最新技術でインメモリデータストアを実装

Redisやmemcachedに代表されるインメモリデータストアは、高速なデータアクセスを要求される場面で使われています。

このインメモリデータストアを2022年の最新技術を用いて設計、実装することで、Redis/memcached互換を実現しつつRedisの25倍高速とする「Dragonfly」がオープンソースで登場しています(開発元のアナウンスGitHub)。

fig

Redisやmemcachedが登場した十数年前と比べて、現在ではCPUのマルチコア化やI/Oの高速化、メモリの大容量化など、ハードウェア技術が大きく進化しています。

これらを最大限活用する設計と実装を取り入れることでRedisやmemcachedよりも大幅な高速化と高効率化を目指したのがDragonflyです。

採用した主な技術の1つ目が、マルチコアを活用するために採用されたマルチスレッドにおけるシェアードナッシングアーキテクチャです。これによりそれぞれのコアの能力を最大限に引き出しているとのこと。下記はGitHubのREADME.mdからの引用です。

we used shared-nothing architecture, which allows us to partition the keyspace of the memory store between threads, so that each thread would manage its own slice of dictionary data. We call these slices – shards.

われわれはシェアードナッシングアーキテクチャを採用しています。これにより、メモリストアのキー空間ごとにスレッドを分割し、各スレッドが辞書データのスライスを管理することができます。このスライスをシャード(shard)と呼んでいます。

さらに「Dash」と呼ばれるハッシュテーブルを採用したことで、TTLレコードに対する効率的な期限管理や、LRUやLFUなどよりも高いキャッシュヒット率をメモリのオーバーヘッドなしに実現し、優れたスナップショットアルゴリズムも実現したとのこと。

また、Dragonflyでは操作のアトミック性(操作全体が成功か失敗かどちらかで終わること)が保証されています。

下記が開発チームによるAmazon EC2のインスタンスを用いたベンチマーク結果の一部抜粋です。飛び抜けて高い6本のマーカーがどれもDragoflyによるもの。最大でRedisの25倍高速であり、Dragonflyは1インスタンスで数百万QPS(Query Per Second)を実現するとのこと。

fig

また、メモリ効率もRedisと比較してアイドル時で30%、最大時で3倍優れており、スナップショットも高速に終了するとしています。

Dragonflyは現時点で130のRedisコマンドとすべてのmemcachedコマンドの互換性を有しており、Redis 2.8のほとんどのAPIをサポート。

次はRedisからDragonflyへのレプリケーションとDragonfly同士のレプリケーションの実現による高可用性の実現を目指し、さらに多くのRedis APIのサポートを実装していくとしています。