OpenTSDB は、基盤ストレージに Apache HBase を使用するスケーラブルな分散時系列データベースサービスです。OpenTSDB は、汎用ストレージに基づいて開発された典型的な時系列データベースサービスです。OpenTSDB は、利用可能な最初の時系列データベースサービスの 1 つであり、時系列データベース市場で認められています。Lindorm Time Series Database (TSDB) は、OpenTSDB プロトコルと高度に互換性があります。TSDB は、Alibaba Cloud によって開発されたメソッドを使用して、時系列データを処理するための強力な機能を提供します。これらのメソッドには、インデックス作成、データモデル、ストリーミング集計が含まれます。このトピックでは、運用、管理、機能、コスト、およびパフォーマンスに基づいて、TSDB の OpenTSDB に対する利点について説明します。
背景情報
OpenTSDB | TSDB | ||
運用、管理 | サービスの可用性 | サービスの可用性を確保するために、クラスターを作成し、コンポーネントの依存関係を追加する必要があります。 | 99.9% |
データの耐久性 | サービスの可用性を確保するために、クラスターを作成し、コンポーネントの依存関係を追加する必要があります。 | 99.9999% | |
ソフトウェアとハードウェアのコスト | データベースサーバーのコストは高額です。 | ソフトウェアやハードウェアをデプロイする必要はありません。使用したリソースに基づいて課金されます。 | |
メンテナンスコスト | 時系列データベースを維持するために、データベース管理者 (DBA) を雇用する必要があります。これには高い人件費がかかります。 | TSDB では、マネージドデータベースをデプロイできます。 | |
デプロイと拡張 | ハードウェアを購入し、データベースをデータセンターでホストし、データベースサーバーをデプロイする必要があります。これには長い時間がかかります。 | TSDB は数回クリックするだけでアクティブ化できます。数分で TSDB データベースをデプロイおよび拡張できます。 | |
コンポーネントの依存関係の管理 | AysncHBase や HBase の依存関係など、コンポーネントの依存関係を追加する必要があります。これにより、メンテナンスコストが増加します。 | TSDB データベースで O&M 操作を実行する必要はありません。 | |
パラメーター調整 | データベース設定を構成するには、複数のパラメーターを使用する必要があります。たとえば、パラメーターを使用して、ソルト、接続数、同期フラッシュモード、および圧縮設定を構成します。 | デフォルトのパラメーター設定は、ベストプラクティスに基づいてビジネスシナリオに合わせて構成されます。 | |
テーブルの作成に使用されるステートメント | テーブルの作成に使用される静的ステートメントで O&M 操作を実行する必要があります。 | TSDB は、テーブルの作成に使用されるステートメントの管理に役立ちます。このプロセスはユーザーにとって透過的です。 | |
監視およびアラートシステム | 監視システムを構築するには、外部ツールを使用する必要があります。 | TSDB は、組み込みの完全な監視システムを提供します。 | |
機能 | データモデル | OpenTSDB は単一値モデルのみをサポートしています。 | TSDB は、複数値モデルと単一値モデルをサポートしています。 |
SDK | OpenTSDB SDK は、データのクエリに使用できないオープンソースツールです。 | Java 用 TSDB SDK は、堅牢で安定した機能を提供します。 | |
データ型のサポート | OpenTSDB は数値データ型をサポートしています。 | TSDB は、数値、ブール値、文字列など、複数のデータ型をサポートしています。 | |
SQL クエリ | OpenTSDB は SQL クエリをサポートしていません。 | TSDB では、SQL ステートメントを実行してデータの分析とクエリを実行できます。 | |
管理コンソール | OpenTSDB は、データを単純なグラフで表示するための組み込みシステムを提供します。 | TSDB コンソールでは、多次元データの視覚化、データ管理、時系列データの洞察など、複数の機能を利用できます。 | |
中国語文字のサポート | OpenTSDB は文字のみをサポートしています。 | TSDB は、文字と中国語文字をサポートしています。 | |
単一次元 (tags パラメーター) | tags パラメーターは必須です。 | tags パラメーターはオプションです。 | |
タグキーの数 | 最大 8 つのタグキーがサポートされています。 | 最大 16 個のタグキーがサポートされています。 | |
統合機能 | OpenTSDB は、Alibaba Cloud サービスに完全に統合できないオープンソースデータベースサービスです。 | TSDB はさまざまなエコシステムをサポートしており、Flink および IoT Platform に完全に統合できます。 | |
コスト | データ圧縮 | OpenTSDB は、低い圧縮率を返す一般的な圧縮アルゴリズムを使用します。 | TSDB は、時系列データ専用の圧縮アルゴリズムを使用して、高い圧縮率を確保します。 |
安定性 | データ読み取り | OpenTSDB は、データの読み取りと書き込みを結合します。これにより、接続リソースが枯渇し、読み取り/書き込みエラーのリスクが高まる可能性があります。 | TSDB は、異なるスレッドプールを使用して、読み取りスレッドと書き込みスレッドを分離します。これにより、接続管理が簡素化され、読み取りおよび書き込み操作で安定したパフォーマンスが実現されます。 |
アグリゲーター | OpenTSDB はメモリ内集計を使用します。これにより、メモリ不足の例外エラーが発生する可能性があります。 | TSDB は、ストリーミング集計ときめ細かいメモリ管理を使用して、すべての機能を管理できるようにします。 |
OpenTSDB プロトコルとの互換性
TSDB の基盤となる技術アーキテクチャは、OpenTSDB のアーキテクチャとは大きく異なります。TSDB は、OpenTSDB によって O&M 用に提供される API 操作と互換性がない場合があります。たとえば、TSDB は、メタデータ情報を管理するために OpenTSDB によって提供される API エンドポイント /api/tree および /api/uid と互換性がありません。OpenTSDB によって提供される API エンドポイントの詳細については、HTTP API にアクセスしてください。次の表に、TSDB と OpenTSDB の互換性を示します。
OpenTSDB の API エンドポイント | TSDB との互換性 |
/s | いいえ |
/api/aggregators | はい |
/api/annotation | いいえ |
/api/config | はい |
/api/dropcaches | いいえ |
/api/put | はい |
/api/rollup | いいえ |
/api/histogram | いいえ |
/api/query | はい |
/api/query/last | はい |
/api/search/lookup | はい |
/api/serializers | はい |
/api/stats | はい |
/api/suggest | はい |
/api/tree | いいえ |
/api/uid | いいえ |
/api/version | はい |
TSDB は、時系列データのカスタム API エンドポイントも提供します。次の表に、カスタム API エンドポイントを示します。
TSDB のカスタム API エンドポイント | 説明 |
/api/mput | 複数値データを書き込みます。 |
/api/mquery | 複数値データをクエリします。 |
/api/query/mlast | 複数値データモデルを使用する時系列から最新のデータポイントをクエリします。 |
/api/dump_meta | タグキーとペアになっているタグ値をクエリします。 |
/api/ttl | データの有効期間 (TTL) を指定します。 |
/api/delete_data | データを削除します。 |
/api/delete_meta | 時系列を削除します。 |
パフォーマンス比較
テストデータの説明
このセクションでは、データセットを使用してクエリのパフォーマンスをテストする例を示します。パフォーマンステストで使用されるデータは、次のパラメーターを使用して記述されます。
metric
各メトリックの名前には、m
というプレフィックスが付きます。
tagkv
次の表に、5 つのタグキーと値のペアを示します。最初の 4 つのタグキーと値のペアの場合、式 10 × 20 × 100 × 100 = 2,000,000
に基づいて合計 2,000,000 の時系列を作成できます。最後のタグキー ip は 2,000,000 の時系列に対応し、タグ値は 1 ずつ増加します。
tag_k | tag_v |
zone | z1~z10 |
cluster | c1~c20 |
group | g1~100 |
app | a1~a100 |
ip | ip1~ip2000000 |
value
各メトリック値は、1 から 100 までのランダムな値です。
interval
収集間隔は 10 秒で、データは 3 時間連続して収集されます。この場合、収集できるデータポイントの総数は、次の式に基づいて計算されます。3 × 60 × 60/10 × 2,000,000 = 2,160,000,000
統計結果
次の表に、ストレステストの構成項目を示します。
構成項目 | 値 | 説明 |
ストレステストの期間 (分) | 3 | |
ストレステストモード | 固定 | 固定モードでは、ストレステストの同時実行数は調整されません。階層モードとパルスモードでは、同時実行数が調整されます。 |
ストレステスターの数 | 5 | |
ストレステスターあたりの 1 秒あたりのトランザクション数 (TPS) | 1000 | |
接続詳細の取得のタイムアウト期間 (ミリ秒) | 600000 | |
接続の確立のタイムアウト期間 (ミリ秒) | 600000 | |
データのクエリのタイムアウト期間 (ミリ秒) | 600000 | 大規模なクエリは時間がかかります。タイムアウトの例外エラーにより、TPS の統計結果が不正確になる可能性があります。 |
呼び出し方法 | 同期 |
各ストレステストを実行する前に、データベースサービスが再起動されます。これにより、以前のストレステストでリソースが使用されるのを防ぎます。テスト操作のプリロードも実行されます。プリロードを実行しないと、最初のリクエストに応答するのに非常に長い時間がかかる場合があります。これは、応答時間 (RT) の統計結果の精度に影響します。
テスト環境の説明
サーバー構成
書き込み操作用サーバー: 2 コア、8 GB メモリ
データクエリ用サーバー: 64 コア、256 GB メモリ
ApsaraDB for HBase サーバー: 8 コア、16 GB メモリ (合計 5 台のサーバー)
データベースバージョン
OpenTSDB: OpenTSDB V2.3.2 および ApsaraDB for HBase V1.5.0.1
TSDB: TSDB V2.4.2
書き込みパフォーマンスの比較
シナリオ
上記のストレステスト構成を使用する場合、5 つのストレステスターが使用可能であり、各ストレステスターの TPS は 1,000 です。この場合、ストレステスト中に毎秒最大 5,000 データポイントを書き込むことができます。テスト結果に実際のデータベースパフォーマンスが表示されるようにするには、TSDB データベースと OpenTSDB データベースで同期書き込み操作を実行します。TSDB データベースと OpenTSDB データベースでは、データをディスクにフラッシュするために使用される機能を有効にする必要があります。TSDB と OpenTSDB は、次の式を使用してデータポイントのタイムスタンプを計算します。タイムスタンプ = 指定時刻 (base_time) + 間隔 × N
。この式では、N は操作呼び出しの回数を指定し、base_time はデータポイントが収集される指定時点を指定します。N 値が増加すると、base_time 値が増加します。TSDB と OpenTSDB は、異なる間隔でデータポイントを収集します。
間隔 (秒) | メトリック | タグ | |
シナリオ 1 | 10 | 1 | 4tagk * 2500tagv |
シナリオ 2 | 10 | 10 | 4tagk * 2500tagv |
シナリオ 3 | 60 | 1 | 4tagk * 2500tagv |
シナリオ 4 | 60 | 10 | 4tagk * 2500tagv |
TSDB のテスト結果
シナリオ | TPS | RT(ms) | MinRT | MaxRT | 80%RT | 95%RT | 99%RT |
シナリオ 1 | 4194.23 | 149.91 | 36.9 | 1808.0 | 210.42 | 239.11 | 250.38 |
シナリオ 2 | 4223.09 | 148.4 | 37.2 | 474.22 | 209.74 | 238.32 | 248.52 |
シナリオ 3 | 4225.24 | 150.37 | 37.09 | 645.57 | 211.22 | 239.01 | 249.88 |
シナリオ 4 | 4227.01 | 148.61 | 37.4 | 888.72 | 209.93 | 238.68 | 249.38 |
OpenTSDB のテスト結果
シナリオ | TPS | RT(ms) | MinRT | MaxRT | 80%RT | 95%RT | 99%RT |
シナリオ 1 | 1008.12 | 832.68 | 47.19 | 1310.56 | 1158.44 | 1255.66 | 1283.67 |
シナリオ 2 | 1094.4 | 770.82 | 43.64 | 1469.04 | 1078.78 | 1238.06 | 1281.69 |
シナリオ 3 | 804.82 | 1047.59 | 132.18 | 1297.71 | 1188.12 | 1269.82 | 1281.32 |
シナリオ 4 | 1039.72 | 807.29 | 44.43 | 1421.03 | 1110.46 | 1242.02 | 1281.76 |
TSDB データベースと OpenTSDB データベースのクエリパフォーマンスの比較
シナリオ
上記のストレステスト構成を使用する場合、5 つのストレステスターが使用可能であり、各ストレステスターの 1 秒あたりのクエリ数 (QPS) は 1,000 です。この場合、ストレステスト中に毎秒最大 5,000 データポイントをクエリできます。クエリのデータセットは、書き込み操作のデータセットよりも大きくなります。ストレステスト中に毎秒 5,000 クエリが送信される場合、キュー内のクエリの数が上限を超えると、ドライランの問題が発生する可能性があります。この例では、5,000 が最大 QPS です。これにより、テスト結果の精度が保証されます。ストレステストを実行する前に、TSDB と OpenTSDB はデータベースサーバーログと使用されているリソースをチェックして、データベースが安定して実行されていることを確認します。シナリオ 5 からシナリオ 8 では、データセット全体に基づいてクエリが実行されます。同時クエリリクエストの数が 5,000 から 500、50、5、または 1 に減らされた場合でも、OpenTSDB はこれらのシナリオでは使用できなくなります。この例では、N/A はデータベースサービスが使用できないことを示します。次の表では、0 はデータベースサービスが使用できないことを示します。
メトリック | タグの数 (タグキーとタグ値のペア) | 時間範囲 | |
シナリオ 1 | 1 | 1 | 5 分 |
シナリオ 2 | 1 | 10 | 5 分 |
シナリオ 3 | 1 | 100 | 5 分 |
シナリオ 4 | 1 | 1,000 | 5 分 |
シナリオ 5 | 1 | 1 | 3 時間 |
シナリオ 6 | 1 | 10 | 3 時間 |
シナリオ 7 | 1 | 100 | 3 時間 |
シナリオ 8 | 1 | 1,000 | 3 時間 |
クエリステートメント
# 5min
// 5分
null
null
null
null
# 3hour
// 3時間
null
null
null
null
TSDB のテスト結果
シナリオ | TPS | RT(ms) | MinRT | MaxRT | 80%RT | 95%RT | 99%RT |
シナリオ 1 | 3831.8 | 44.14 | 36.94 | 416.98 | 44.51 | 46.73 | 75.5 |
シナリオ 2 | 1148.22 | 657.77 | 105.96 | 1054.96 | 715.5 | 745.87 | 796.8 |
シナリオ 3 | 215.96 | 3522.96 | 557.81 | 4067.14 | 3679.5 | 3786.29 | 3854.57 |
シナリオ 4 | 39.37 | 19692.53 | 1784.93 | 22370.1 | - | - | - |
シナリオ 5 | 2856.1 | 262.76 | 41.29 | 847.01 | 296.99 | 443.52 | 489.4 |
シナリオ 6 | 446.54 | 1684.15 | 67.75 | 2161.85 | 1802.8 | 1898.0 | 1959.02 |
シナリオ 7 | 69.25 | 11237.9 | 1873.55 | 12776.56 | 11917.05 | 12133.61 | 12316.79 |
シナリオ 8 | 11.76 | 65615.45 | 5742.12 | 86952.76 | - | - | - |
OpenTSDB のテスト結果
シナリオ | TPS | RT(ms) | MinRT | MaxRT | 80%RT | 95%RT | 99%RT |
シナリオ 1 | 1.97 | 77842.67 | 10486.16 | 109650.51 | - | - | - |
シナリオ 2 | 1.95 | 78062.6 | 12723.96 | 119911.53 | - | - | - |
シナリオ 3 | 1.96 | 78865.02 | 15942.89 | 141365.75 | - | - | - |
シナリオ 4 | 1.97 | 77331.91 | 7780.02 | 113582.65 | - | - | - |
シナリオ 5 | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
シナリオ 6 | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
シナリオ 7 | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
シナリオ 8 | N/A | N/A | N/A | N/A | N/A | N/A | N/A |