LoginSignup
3
3

More than 1 year has passed since last update.

最新 KVS の Tkrzw サーバを Docker で起動する

Posted at

古き良き KVS たる DBM の最新実装である Tkrzwの連載記事 を愛読しています。実践的なアーキテクチャ選定・設計の手順と、現代の実装を学べて本当に素晴らしいです。

これまでの tkrzw 本体はローカルの DBM 機能(直接ファイルを読み書きするキーバリューストアのライブラリ機能)だけでしたが、9月になって、tkrzw-rpc として gRPC を利用したサーバ版アプリケーションが動き始めました。

生の Mac では依存管理が少々面倒になるので、手元の Docker で手軽に試せるように Dockerfile を書いてみました。最低限の get・set 手順を紹介します。
https://github.com/kawanet/tkrzw-docker/blob/main/tkrzw-rpc/Dockerfile

イメージのビルド

git clone https://github.com/kawanet/tkrzw-docker.git
cd tkrzw-docker
docker build tkrzw-rpc --tag tkrzw-rpc

ビルドは数分かかります。
ベースが ubuntu:focal なのは、とくに理由はありません。簡単そうなので。
ubuntu:bionic だと gRPC パッケージのバージョンが古くて、そのままではビルドできませんでした。
ビルド完了時に、もうちょっと不要ファイルを掃除した方がよいかも。

サーバの起動

tkrzw_server のデフォルトでは、オンメモリのハッシュの TinyDBM のサーバが 1978 番ポートで起動します。

docker run --name tkrzw-rpc -p 1978:1978 tkrzw-rpc tkrzw_server --log_level debug

テーブルごとにサーバを起動していきます。(1サーバで複数テーブル扱えないのかな?)

TinyDBM は揮発性インメモリ DBM なので、サーバが落ちるとデータも消えます。
本番環境なら、下記のような構成にするのかと思います。

  • HashDBM か TreeDBM による永続化(ディスクに書き込む)
  • マルチスレッド対応(CPUコア数が多ければ速くなる)
  • シャーディング対応(テーブルを分割して速くなる)
  • マスタ・スレーブのレプリケーション対応(read only レプリカで負荷分散できる)
  • デュアルマスタ構成の相互レプリケーション対応(アクティブマスタが落ちてもサービス継続できる)

死活監視とかは自前で用意する必要があるようです。

とりあえずの get・set

gRPC クライアントの tkrzw_dbm_remote_util コマンドでサーバと通信できます。
デフォルトでローカル 127.0.0.1:1978 に接続します。

docker exec tkrzw-rpc tkrzw_dbm_remote_util set one first
docker exec tkrzw-rpc tkrzw_dbm_remote_util get one

これで first と表示されれば、成功です。

ネットワーク越しの get・set

別のインスタンスから接続する場合は、Docker for Mac なら host.docker.internal:1978 を指定します。

docker run tkrzw-rpc tkrzw_dbm_remote_util set --address host.docker.internal:1978 two second
docker run tkrzw-rpc tkrzw_dbm_remote_util get --address host.docker.internal:1978 two

これで second と表示されれば、成功です。

3
3
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
3
3