広告業界で人気のDB Aerospike
2017年、一番のお気に入りのKVSはAerospikeです。Redisのように速くて、スケーラブルで、管理が楽。そんなDBを紹介します。
Aerospike は特にアメリカの Adtech 業界で人気があるそうです。Adtech にはいろんなプレイヤーがおり、ユーザが広告を目にするまでに複数社のシステムを跨いでいるのが普通です。このため、Adtechのサービスを提供している各プレーヤはAPIの応答速度の要件が厳しく、50msecや100msecという非常に高速な応答が求められます。このような世界で活躍しているのデータベースの1つが Aerospike です。
ぼくのいる会社でも毎日1億件くらいのデータを安定して処理してくれています。
動かしてみる
GCP の CloudLuncher で簡単に構築できるので今回はこれを利用します。n1-standard-2 x 3 の構成にします。他にAWSなどでも簡単に構築できます。詳しくは以下を参考にすると良いです。
Java クライアントにベンチマークが入っているのでそれを動かしAerospikeの実力をみてみます。ベンチマークを動かすのはAerospikeのノードとは別のVMが良いでしょう。
$ git clone https://github.com/aerospike/aerospike-client-java
$ cd aerospike-client-java/benchmark
$ mvn package
$ ./run_benchmarks -h 127.0.0.1 -p 3000 -n test -k 10000000 -S 1 -o S:50 -w RU,10 -z 20
ベンチマークが走り、Aerospike に負荷をかけ続けます。
Aerospike には AMC という Web UI が用意されているのでAerospike VM の 8081 ポートにアクセスします。ポートフォワーディングを使うと簡単です。
$ gcloud compute --project=dictav-net ssh aerospike-cluster-1-vm \
--ssh-flag="-L" \
--ssh-flag="8081:localhost:8081"
Read で 8000TPS, Write で 80000TPS ほど出ました。コストパフォーマンスに関しては想定する環境等によって違うと思いますが、Aerospike は台数を増やすことでリニアに速度を伸ばすことができるのが良いところだと思います。
簡単にAerospikeを紹介しました。次回はAerospike特有のNamespace, Set, Record, Bin などの用語の説明と具体的なアクセス方法について触れたいと思います。