LoginSignup
2
0

More than 1 year has passed since last update.

話題のデータストア!? Dragonfly をサクっと使ってみた

Last updated at Posted at 2022-07-20

はじめに

最近、Redis互換で25倍高速とする「Dragonfly」が登場。2022年の最新技術でインメモリデータストアを実装Publickeyに掲載されていて、Dragonfly がかなり気になったので、サクっとインストールして使ってみました。備忘録として残します。

Dragonfly の概要

Dragonfly は、Linux上で動作するフリーのインメモリデータストアです。スレッドパーコア・アーキテクチャを採用し、低レイテンシーを実現しています。Dragonfly は Redis や Memcached と互換性があります。KeyDBの代替品として適しています。 また、Dragonflyは垂直方向に拡張でき、1つのインスタンスで数百万QPS(queries per second)と数百GBのメモリを処理できます。この Dragonfly は、2022年の最新技術を用いて設計、実装することで、Redis/memcached互換を実現しつつRedisの25倍高速を達成した。と Dragonfly の webサイト、GitHub リポジトリの README.md で語っています。
以下のグラフは、開発コミュニティで公開しているベンチマークの結果です。

Dragonfly公表のベンチマーク

Dragonfly の特徴

Dragonfly は、次のような特徴があります。

  • Build with C++
  • Redis API と互換
  • マルチスレッドアーキテクチャ
  • 非同期 I/O を使用
  • いくつかのクライアントライブラリをサポート
  • HTTPプロトコルとRedisプロトコルで Dragonfly と接続可能
  • シンプルでメモリ効率の良いキャッシング・アーキテクチャ
  • Linux kernel 5.10 以上の Linux OS で動作
  • BSLライセンス

Dragonfly をソースコードからビルドして実行

Linux kernel 5.10 以上が Dragonflyの動作条件になっているので、kernelのバージョンが 5.10 以上であることを確認します。

$ uname -r
5.15.0-41-generic

Dragonfly GitHub リポジトリをローカルのディレクトリにクローンします。

$ git clone --recursive https://github.com/dragonflydb/dragonfly

ビルドに必要なパッケージをインストールします。Dragonfly は ninja というビルドシステムを使用しています。

$ sudo apt install ninja-build libunwind-dev libboost-fiber-dev libssl-dev autoconf-archive libtool cmake g++

以下のコマンドで Dragonfly をビルドします。

$ cd dragonfly
./helio/blaze.sh -release
$ cd build-opt
$ ninja dragonfly

それでは Dragonfly を実行しましょう。
alsologtostderrオプションは、ログメッセージはログファイルに加え、標準エラーにも出力されます。

$ ./dragonfly --alsologtostderr
I20220718 19:51:55.958289 14139 init.cc:56] ./dragonfly running in opt mode.
I20220718 19:51:55.958747 14139 dfly_main.cc:169] Starting dragonfly df-dev
........
I20220718 19:51:55.960114 14140 listener_interface.cc:79] sock[9] AcceptServer - listening on port 6379

ソースコードからビルドする方法以外に、Dockerを使用する方法、Docker Compose を利用する方法があります。2つの方法は、公式ドキュメントの以下のページを参照して下さい。

Dragonfly を使ってみる

Redisクライアントの redis-cli を起動して、Dragonflyに接続します。事前に【入門】Redisを参考に Redis がインストールしておきます。

$ redis-cli
127.0.0.1:6379> info
# Server
redis_version:df-dev
redis_mode:standalone
arch_bits:64
.....

INFO コマンドでサーバー状況を確認すると、redis_version が df-dev と表示され、Dragonfly に接続していることが確認できます。

次にいくつか Redisのコマンドを実行します。問題なく実行されることが確認できます。

127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set test "HELLo, World!!"
OK
127.0.0.1:6379> keys *
1) "test"
127.0.0.1:6379> get test
"HELLo, World!!"
127.0.0.1:6379> exit

次に memcached と同じように telnet で接続できるか確認します。

$ $ telnet 127.0.0.1 6379
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get test
$14
HELLo, World!!
set test1 "Dragonfly"
+OK
get test1
$11
"Dragonfly"
quit
+OK
Connection closed by foreign host.
$

Dragonfly をシャットダウン

Redis と同様に redis-cli で shutdown コマンドを実行して、Dragonefly をシャットダウンします。

$ redis-cli
127.0.0.1:6379> shutdown
OK
127.0.0.1:6379> exit
$

以下のようなログが出力され問題なく Dragonfly がシャットダウンされました。

I20220718 21:57:13.075809 14752 listener_interface.cc:146] Listener stopped for port 6379
$

Dragonfly をベンチマーク!?

「Redis/memcached互換を実現しつつRedisの25倍高速を達成」と言っているので、ベンチマークを実施してみました。Redis をビルドすると作成される redis-benchmark というツールでベンチマークができます。実際に実行すると、ZPOPINコマンドでエラーとなります。Dragonfly の webサイト で、ZPOPINコマンドは Unsupported になることは納得なのですが、Redisの25倍のスループットDragonflyを試してみるの投稿では、redis-benchmark が実行できているので、バージョンの違いなのか・・・。

$ redis-benchmark -q
PING_INLINE: 45850.53 requests per second, p50=0.551 msec                   
PING_MBULK: 39936.10 requests per second, p50=0.663 msec                   
SET: 47169.81 requests per second, p50=0.599 msec                   
GET: 49726.51 requests per second, p50=0.567 msec                   
.........
Error from server: ERR unknown command `ZPOPMIN`
$ 

次に memtier_benchmark という ReidsLabs が開発するRedisベンチマークツールで、Redis と Dragonfly をそれぞれ測定しました。詳細は省略しますが、レイテンシ、スループットもほぼ同じような測定結果となりました。仮想マシンを使っているので環境問題なのか、設定問題なのか・・・。次回までにもう少し深堀してみます。

まとめ

話題のデータストア Dragonfly をサクっと使ってみました。redis-cli から Dragonfly に接続して、Redisコマンドが実行できることを確認しました。
ただ、Redisの25倍のスループットについては、残念ながら確認できませんでした。たぶん、環境に問題があると思います。こちらは後日、別途、調査して報告したいと思います。

もし、記述について誤りがあったり、気になることがあれば、編集リクエストやコメントでフィードバックしていただけると助かります。

参照

以下の情報を参考にさせて頂きました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0