尝试使用酷炫的数据存储系统Dragonfly来快速处理话题数据!
首先
最近出现了一个名为 “Dragonfly” 的技术,通过与Redis互换,将速度提升了25倍。《公钥》上刊载了这项最新技术在2022年实现的内存数据存储的实现方式,我对Dragonfly非常感兴趣,所以迅速安装并尝试了一下。我将留下这些使用心得作为备忘录。
龙蜻蜓的概要
Dragonfly是一种在Linux上运行的免费的内存数据存储系统。采用线程分组架构,实现低延迟。Dragonfly与Redis和Memcached兼容,在替代KeyDB方面表现出色。此外,Dragonfly可以在垂直方向上进行扩展,在单个实例上可以处理数百万个每秒的查询和数百GB的内存。Dragonfly使用2022年的最新技术进行设计和实现,实现了与Redis/memcached的兼容性,同时达到了Redis的25倍速度。这是根据Dragonfly的网站和GitHub上的README.md所述。
以下的图表显示了在开发社区发布的基准测试结果。
Dragonfly的特点
Dragonfly有以下的特点。
-
- Build with C++
-
- Redis API と互換
-
- マルチスレッドアーキテクチャ
-
- 非同期 I/O を使用
-
- いくつかのクライアントライブラリをサポート
-
- HTTPプロトコルとRedisプロトコルで Dragonfly と接続可能
-
- シンプルでメモリ効率の良いキャッシング・アーキテクチャ
-
- Linux kernel 5.10 以上の Linux OS で動作
BSLライセンス
从源代码中构建和执行Dragonfly
请确认Dragonfly的操作条件是Linux 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。
同时stderr选项会将日志消息输出到日志文件,并输出到标准错误流。
$ ./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的方法。您可以参考官方文档中以下页面的两种方法。
-
- Quick Start
- Dragonfly DB with Docker Compose
试试使用蜻蜓。
运行 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
$
用蜻蜓作为基准测试吗?
由于它声称可以实现Redis/memcached的互换,并且达到Redis的25倍速度,所以我进行了基准测试。可以使用Redis构建时创建的名为redis-benchmark的工具进行基准测试。实际执行时,使用ZPOPIN命令会出现错误。在Dragonfly的网站上,ZPOPIN命令被认为是不支持的,但在尝试使用Dragonfly的redis-benchmark进行Redis的25倍吞吐量测试中,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`
$
接下来,我们使用RedisLabs开发的Redis基准测试工具memtier_benchmark对Redis和Dragonfly进行了测试。具体细节略去不表,但得出的结果是延迟和吞吐量几乎相同。由于我们使用的是虚拟机,不知道是环境问题还是设置问题…下次我们会更加深入地探究一下。
总结
我尝试了一下备受关注的数据存储Dragonfly。我通过redis-cli连接到了Dragonfly,并确认了可以执行Redis命令。
不过,对于比Redis快25倍的吞吐量,遗憾地无法确认。可能是环境存在问题。我计划稍后另行调查并报告。
如果在描述中有错误或者有什么疑问的话,请通过编辑请求或者评论给予反馈,我会非常感激。
请参考。
我們參考了以下的資訊。
-
- dragonfly
-
- Redisの25倍のスループットDragonflyを試してみる
-
- 【入門】Redis
- memcachedコマンド操作