このブログでは、Google Cloud上のわずか20個のGridDBノードで、どのように毎秒500万回の書き込みと毎秒6,000万回の読み取りを達成することができたかについて紹介します。
はじめに
GridDBは、東芝デジタルソリューションズ株式会社が開発したIoTおよびビッグデータアプリケーション用の超高速データベースです。GridDBは、センサーデータの保存に最適な独自のキーコンテナーデータモデル、および驚異的なパフォーマンスを提供する「メモリファースト、ストレージセカンド」アーキテクチャを備え、最大1,000ノードまで容易にスケールアウトすることが出来ます。
過去数年間に、Cassandra、Aerospike、Couchbaseなど、パブリッククラウドサービス上で毎秒100万回の書き込みを維持できるデータベースのレポートが公開されています。私たちFixstarsとGridDBチームは、それらのデータベースに対抗し、GridDBをさらに拡張して製品価格1ドルあたりのパフォーマンスをどれくらい引き下げることができるかに挑戦しました。
これらのテストは、GridDBの優れたパフォーマンスを示すのと同時に、高速書き込みパフォーマンスを必要とするGridDB IoT、IIoT、およびその他のアプリケーションを設計する際のベストプラクティスも示しています。
クラウドの構成
ベンチマークの実行にはGoogle Cloudプラットフォームを使用しました。各インスタンスに375GBのSSDが備わったn1-standard-8インスタンスを使用し、n1-standard-8インスタンスの8つのvCPUとインスタンスあたり30 GBのメモリの価格は、1時間当たり0.42ドルでした。サーバーとクライアントインスタンスは1:1の比率で使用しました。たとえば、3つのサーバーには3つのクライアントを使用し、5つのサーバーには5つのクライアントを使用しました。
以前の経験から、本ブログでのGridDBワークロードはI/Oバウンドであり、GCPのSSDが最高のパフォーマンス価値比をもたらすことが分かっていました。より高速な16ギガビットネットワーク(下り)を提供するGCPのJupiterネットワーキングファブリックと組み合わせた高速ストレージは、GCPが3〜20のサーバーインスタンスからほぼ線形のスケーラビリティを実現し、GridDBにとって理想的なプラットフォームであることを意味します。
クライアントソフトウェア
新しいベンチマーククライアントは、最大のパフォーマンスを考慮してJavaで記述されています。クライアントは、スレッドごとに割り当てられたコンテナーに対して読み取りまたは書き込みを行い、ロックの競合を排除します。
「100万回の書き込み」の成功を発表した他のデータベースと同様に、各レコードは200バイトで、1回の試行ごとに1億レコードの挿入と読み取りを実施しています。
GridDBの構成
GridDBの構成は、デフォルトのパラメーターから次の設定に変更しました。
- storeMemoryLimit: 20480MB
- checkpointMemoryLimit: 4096MB (オペレーティングシステムやその他の必要なアプリケーションのためのメモリを確保する以外はできるだけ多くのメモリをGridDBに使用)
- 同時実効性: 8 (CPUコア1つにつき1つのワーカースレッドを使用)
- storeCompressionMode: COMPRESSION (ディスクI/Oを減らす)
- replicationNum: 3 (各データは3つのインスタンスに格納)
結果
GridDBはわずか3つのノードでも毎秒100万回近くの書き込みを完了、毎秒897,718回の操作を実行することができました。サーバーを追加するとその数に比例してパフォーマンスも向上し、20台のサーバーで、私たちの目標の毎秒500万回の書き込みを達成しました。
Google Cloudプラットフォーム上でのGridDBのパフォーマンス
GridDBサーバー3台では毎秒600万回を超える読み取りを実行でき、サーバー20台では毎秒6000万回を超える読み取りを実行することができました。
毎秒あたりの書き込み・読み取り操作回数
GridDBサーバー1台あたり、少なくとも毎秒250,000回の書き込みを実行し、毎秒少なくとも200万件のレコードを読み取ることができました。この一貫したパフォーマンスを誇るGridDBは、Industry 4.0、金融市場、コンシューマーIoT、インダストリアルIoTなど、大量にデータが継続的に取り込まれるアプリケーションに最適であるといえます。
サーバー台数 | 毎秒あたりの書き込み回数 | 毎秒あたりの読み込み回数 |
---|---|---|
3 | 897,718 | 6,103,514 |
5 | 1,329,944 | 13,133,648 |
10 | 2,859,518 | 37,376,131 |
20 | 5,735,360 | 62,851,138 |
レイテンシ
YCSBと同様に、ベンチマークツールはレイテンシを直接測定するのではなく、レイテンシ = 1 /毎秒あたりのオペレーション数、という式を使用して、ホストごとのレイテンシの中央値を計算します。これは、各オペレーションにかかる平均時間です。ビジネス上の意思決定に最新のデータを必要とする、リアルタイム分析、モニタリング、視覚化アプリケーションなどにおいては、低レイテンシが不可欠です。
最小レイテンシ | 最大レイテンシ | 平均レイテンシ | |||
---|---|---|---|---|---|
3 サーバー | 書き込み | 2.55 us | 4.05 us | 3.34 us | |
読み取り | 0.45 us | 0.51 us | 0.49 us | ||
5 サーバー | 書き込み | 1.64 us | 5.73 us | 3.76 us | |
読み取り | 0.29 us | 0.41 us | 0.38 us | ||
10 サーバー | 書き込み | 0.35 us | 4.08 us | 1.92 us | |
読み取り | 0.03 us | 0.29 us | 0.15 us | ||
20 サーバー | 書き込み | 2.33 us | 4.85 us | 3.49 us | |
読み取り | 0.29 us | 0.38 us | 0.32 us |
コスト指標
このテストに使用されるサーバー1台あたりのコストは1時間あたり0.42ドルです。月額1,500ドルで1秒あたり書き込み100万回を実現、月額6,000ドルでは1秒あたり書き込み500万回を実現することができ、ワークロードが大きいほどコストパフォーマンスが良くなります。ビジネスが成長し、ユーザ数や対象とするデバイス数が増加しても、ユーザやデバイスあたりにかかるGridDBコストは増加しないため、継続的にGridDBを利用し続けられます。
1秒間に100万回書き込みするのにかかるコストは1時間あたり2.10ドルで、1秒間に500万回書き込みするのにかかるコストは1時間あたり8.40ドルです。読み取りはさらに安く、1秒あたり500万回の読み取りにかかるコストは1時間あたり1.26ドルで、1秒あたり5000万回以上の読み取りのコストは1時間あたり8.40ドルです。
サーバー台数 | 1時間あたりの金額($) | 書き込み1億回あたりの金額($) | 読み取り1億回あたりの金額($) |
---|---|---|---|
3 | $1.26 | $0.000390 | $0.000057 |
5 | $2.10 | $0.000263 | $0.000027 |
10 | $4.20 | $0.000122 | $0.000009 |
20 | $8.40 | $0.000061 | $0.000006 |
結論
GridDBは期待どおり、4台のサーバーで1秒あたり100万回の書き込みを実現することができ、20台のサーバーでは1秒あたり500万回の書き込みをすることができました。読み取りのパフォーマンスも非常に良好で、3台のサーバーで毎秒600万回以上の読み取り、20台のサーバーで毎秒6000万回以上の読み取りを実現しました。
これらの結果は、GridDBの費用対効果が非常に高いことを示しており、他のデータベースと比較して、必要な計算およびストレージのリソースが大幅に少なく済むことを示しています。
上記の結果のようなワークロードを実現するために使用するユーティリティのソースコードは こちらから入手できます。印刷可能なPDFバージョンはこちらです。
ブログの内容について疑問や質問がある場合は Q&A サイトである Stack Overflow に質問を投稿しましょう。 GridDB 開発者やエンジニアから速やかな回答が得られるようにするためにも "griddb" タグをつけることをお忘れなく。 https://stackoverflow.com/questions/ask?tags=griddb