Redis互換で 25倍も速いという Dragonflyをインストールしてみます。
以前「Redisインストール」を書いた過程で、Linuxの新しいカーネルに実装されたメモリ管理機能を使って大変高速に動作する Redis互換のさるデータベースが開発されている事を知りました。
その時はまだバージョンが 1未満だったので、1が出るのを待っていたのですが、2023年3月21日にリリースされたようですので、早速味わってみようと思います。
こちらがその DBです。
Dragonfly
日本で言えばオニヤンマですかね。仮面ライダーV3と同じ。
環境は以下で行きます。
- Ubuntu Server 22.04.2
- Dragonfly 1.0.0
上記のサイトの「Get Started」によれば、手っ取り早く Dockerでやることになっていますが、ここは一つサーバー構築のお勉強でとして、あえてバイナリインストールの方を選択します。
インストール手順はこちら。
Install from Binary
ここに環境毎のバイナリファイルがありますので、Ubuntu用として 「Download Latest (AMD64 Debian)」を選択します。
リンクを踏めばダウンロードが始まって [dragonfly_1.0.0_amd64.deb]ファイルが得られました。
SCPで Ubuntu Serverにこの通り持ってきました。
subro@UbuntuServer2204-1:~$ ls -l dragonfly_1.0.0_amd64.deb
-rw-rw-r-- 1 subro subro 2754808 4月 1 20:26 dragonfly_1.0.0_amd64.deb
ではインストールいたします。
subro@UbuntuServer2204-1:~$ sudo apt install -y ./dragonfly_1.0.0_amd64.deb
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
注意、'./dragonfly_1.0.0_amd64.deb' の代わりに 'dragonfly' を選択します
以下のパッケージが新たにインストールされます:
dragonfly
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 5 個。
2,755 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 7,926 kB のディスク容量が消費されます。
取得:1 /home/subro/dragonfly_1.0.0_amd64.deb dragonfly amd64 1.0.0 [2,755 kB]
以前に未選択のパッケージ dragonfly を選択しています。
(データベースを読み込んでいます ... 現在 101312 個のファイルとディレクトリがインストールされています。)
.../dragonfly_1.0.0_amd64.deb を展開する準備をしています ...
trying to create user dfly
changing owner for /var/log/dragonfly to user dfly
changing owner for /var/lib/dragonfly to user dfly
changing owner for /var/run/dragonfly to user dfly
changing owner for /etc/dragonfly to user dfly
dragonfly (1.0.0) を展開しています...
dragonfly (1.0.0) を設定しています ...
Created symlink /etc/systemd/system/dragonfly.service → /lib/systemd/system/dragonfly.service.
Created symlink /etc/systemd/system/multi-user.target.wants/dragonfly.service → /lib/systemd/system/dragonfly.service.
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.
N: ファイル '/home/subro/dragonfly_1.0.0_amd64.deb' がユーザ '_apt' からアクセスできないため、ダウンロードは root でサンドボックスを通さずに行われます。 - pkgAcquire::Run (13: 許可がありません)
インストールできました。
もう動いていますね。
[dfly]ユーザーが勝手に作られています。
subro@UbuntuServer2204-1:~$ ps -ef | grep dragon
dfly 2361 1 2 20:29 ? 00:00:01 /usr/bin/dragonfly --flagfile=/etc/dragonfly/dragonfly.conf
subro 2456 2131 0 20:30 pts/0 00:00:00 grep --color=auto dragon
上記サイトでは、デフォルトで localhostにバインドされた [6379/tcp] が使われると書かれていましたので確認してみます。
subro@UbuntuServer2204-1:~$ ss -antp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:6379 0.0.0.0:*
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
ESTAB 0 0 192.168.1.102:22 192.168.1.45:33640
subro@UbuntuServer2204-1:~$ ss -atp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:redis 0.0.0.0:*
LISTEN 0 4096 127.0.0.53%lo:domain 0.0.0.0:*
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*
ESTAB 0 0 192.168.1.102:ssh 192.168.1.45:33640
localhost(127.0.0.1)ではなく、IP_ALL(0.0.0.0)にバインドされていました。
そして [6379/tcp] は Ubuntu Serverでは Redisのポートとして予め登録されている番号でした。
Redis互換ゆえ、Redisのポート番号をそのまま使ってるんですね。
インストールはとりあえずこれで良さげです。
「Dragonflyインストール(Redis互換)(後編)」では、Redisでやったのと同じことをしてみるのと、Pythonでデータを操作しています。
Dragonflyのライセンスについて一つ。
Dragonflyの開発元は、イスラエルの DragonflyDB, Ltd. って会社のようですが、よ〜分かりませんでした。
詳しくライセンスタームを読み込んでいませんけど、BSL(Business Source License)なんですね。
License
このライセンス体系は、大手のクラウド業者のサービスに勝手に使われないようにするようにするためのものだったかと。
ElasticSearch・MogoDB・MariaDBあたりがこれを採用していましたかな。
クラウド業者が OSSを使った SaaSや PaaSを展開して荒稼ぎすることへの対抗ですよね。
Dragonflyは、リリースから 5年後の 2028年3月15日に Apache License, Version 2.0 に移行するような事が書いてありました。
社内システムに使うのはOKという理解でおります。