コンテンツに移動
データベース

Key Visualizer を活用した Firestore のパフォーマンスの理解

2022年1月27日
https://storage.googleapis.com/gweb-cloudblog-publish/images/cloud_firestore.max-2600x2600.jpg
Google Cloud Japan Team

※この投稿は米国時間 2022 年 1 月 19 日に、Google Cloud blog に投稿されたものの抄訳です。

Firestore は、サーバーレスでスケーラブルな NoSQL ドキュメント データベースです。Firestore は、迅速かつ柔軟なウェブやモバイルのアプリケーション開発に最適で、データベースにクライアントのデバイスをリアルタイムで同期する際のサポートを独自に行います。

Firestore の自動スケーリングとロード バランシング機能を最大限に活用しながら、Firestore から最高のパフォーマンスを引き出すためには、アプリケーションのデータ レイアウトが、確実に最適な形でリクエストを処理できる必要があります。これは、ユーザー トラフィックが増加するときには特に必要です。トラフィックが増加したときになにが起こるかについては微妙な点がいくつかあるため注意が必要です。そこで、その特定を容易にできるように、Firestore のためのインタラクティブなパフォーマンス モニタリング ツールである Key Visualizer の一般提供についてご案内します。

Key Visualizer は、アクセスされた Firestore の時系列のドキュメントに基づいて視覚的なレポートを生成します。それにより、データベースのアクセス パターンや、トラブルシューティングのパフォーマンスの問題への理解を深めることができ、最適化が可能となります。Key Visualizer があれば、データモデルを反復方式で設計できるようになるか、既存のアプリケーションのデータ使用量パターンが改善できるようになります。

ヒント: Key Visualizer は本番環境データベースで使用できるため、本番環境での変更の展開を行う前にパフォーマンスの問題を特定することが最善です。本番前の環境で Firestore を使ってアプリケーションの負荷テストを実行することを検討しましょう。そのうえで、Key Visualizer を使用して発生する可能性のある問題を特定します。

ビジュアリゼーションの表示

Key Visualizer ツールは、Firestore を使用するすべてのお客様が利用可能です。ビジュアリゼーションは 1 時間ごとの区切りで作成され、対象となるデータは 2 時間前までです。ビジュアリゼーションは、指定した期間中のデータベース全体のトラフィックがスキャン要件の基準を満たしていた場合に作成されます。

Key Visualizer を使用してアクティビティの概要を把握するためには、まず 2 時間単位で期間を選択し、「オペレーション総数/秒」指標のヒートマップをレビューします。この指標は 1 秒あたりのオペレーション数の予測を示すもので、それがデータベース全体にどのように分散されているかを表します。オペレーション総数/秒は、1 秒あたりの平均書き込み、ルックアップ、クエリの推定総数です。

Firestore は、範囲シャーディングと呼ばれる技術を使用して自動でスケーリングを行います。Firestore を使用すると、階層構造で保存されたドキュメント形式のコレクションのデータをモデル化できます。コレクションの階層とドキュメント ID は、ドキュメントごとに単一のキーに変換されます。ドキュメントは論理的に保存され、このキーによって名前順に並べられます。ここでは、キーの範囲を表すために「キー範囲」という言葉を使用します。すべてのキー範囲は、ストレージやトラフィックの負荷に基づいて必要に応じて自動で分割され、Firestore 内の多数の複製されたサーバーでサービスを提供します。

以下の Key Visualizer のビジュアリゼーションの例では、データベースの使用パターンに現れる主な違いがヒートマップに示されています。X 軸は時間を表し、Y 軸はトラフィックによってバケットに分割されたデータベースのキー範囲を表します。

  • 暗い色の部分は、アクティビティがほとんどない範囲です。

  • 鮮やかな色の部分は、アクティビティがかなり多い範囲です。以下の例では、「Bar」と「Qux」のコレクションのオペレーションが、ある期間で毎秒 50 を超えていることが確認できます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_Firestore.max-2000x2000.jpg

Key Visualizer のビジュアリゼーションを解釈するためのその他の方法について詳しくは、ドキュメントをご確認ください。

オペレーション総数以外にも、Key Visualizer ではトラフィックが書き込みと削除に分けられているオペレーション数/秒、平均レイテンシ、テール レイテンシ、さらにはルックアップやクエリなどの指標をビューで提供しています。この機能ではデータ レイアウトの問題、またはレイテンシの上昇につながる可能性のあるトラフィック バランスの悪化を特定します。

ホットスポットとヒートマップのパターン

Key Visualizer は、どのようにトラフィックが分散されているかの分析情報を提供し、ホットスポットに関係するレイテンシの増加があった場合の理解を助けます。つまり、アプリケーションの変更が必要な箇所を決定するための情報が得られるということです。ここでは、データベースのキースペースでトラフィックのバランスが悪くなっている場所を「ホットスポット」と表現します。最適なパフォーマンスを実現するためには、キースペース全体でリクエストが均等に分散されるのが理想です。ホットスポットはあらゆる影響を及ぼしますが、一般的にはホットスポット化は高レイテンシを生じさせ、場合によっては処理の失敗の原因となります。

Firestore は自動でキー範囲を細かく分割し、必要に応じてトラフィックの処理をより多くのサーバーに分散します。しかし、これには限界があります。保存と読み込みの分割には時間が掛かりますし、急速なトラフィックの増加がサービスが適応するまでの間にホットスポットの原因となる可能性もあります。ベスト プラクティスとしては、オペレーション数が 1 秒あたり 500 となるコールド データベース上でトラフィックが増加している間にキー範囲全体にオペレーションを分散させ、その後で 5 分ごとに 50% までトラフィックを増加させることです。これは「500/50/5」ルールと呼ばれ、安全に素早くコールド データベースをウォームアップすることが可能です。たとえば、オペレーション数/秒を 100 万に増加させる場合も、2 時間未満で達成することができます。

Firestore は、一連の複製された専用のサーバーを使用して、単一ドキュメントで処理できるようになるまでキー範囲を自動で分割します。一度、この基準に達すると、Firestore は単一ドキュメントのこれ以上の分割が作成できなくなります。結果として、単一ドキュメント上で同時実行するオペレーションの量が高いままで維持され、レイテンシの上昇につながる場合があります。こうした高レイテンシは、Key Visualizer の平均レイテンシ指標およびテール レイテンシ指標を使用してモニタリングすることが可能です。単一ドキュメントで高レイテンシが持続されるような場合は、複数のドキュメントにわたってデータを分割または複製するようなデータモデルへの修正を検討しましょう。

Key Visualizer は、以下のようなトラフィック パターンの特定にも役立ちます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_Firestore.max-200x200.jpg

均等に分散された使用: ヒートマップで明るい色と暗い色がきめ細かく混在している場合、読み取りと書き込みがデータベース全体で均等に行われています。このヒートマップは Firestore が効率的に使用されていることを表しています。何も行う必要はありません。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_Firestore.max-1100x1100.jpg

シーケンシャル キー: 単一の明るい斜線が書かれたヒートマップでは、完全に増加または減少しているキー(ドキュメント ID)を使用したデータベースの特殊なホットスポット化の事例を示すことができます。シーケンシャルキーは Firestore のアンチパターンで、1 秒ごとのオペレーション数が増加しているときは特に、レイテンシの上昇につながります。このケースでは、生成および使用されたドキュメント ID はランダム化しましょう。詳細については、ベスト プラクティスのページをご覧ください。

https://storage.googleapis.com/gweb-cloudblog-publish/images/4_Firestore.max-300x300.jpg

トラフィックの急激な増加: ヒートマップのキー範囲が暗い色から明るい色に急に変化した場合は、負荷の急上昇が見られます。負荷の上昇がキー範囲で適切に分散されておらず、500/50/5 ルールのベスト プラクティスを外れてしまう場合、データベースのオペレーションのレイテンシが上昇する可能性があります。このような場合は、データ レイアウトを修正し、キースペース全体で使用とトラフィックが適切に分散されるようにしましょう。

次のステップ

Firestore Key Visualizer は管理者やデベロッパー向けのパフォーマンスのモニタリング ツールで、アプリケーションが Firestore とどのようにやり取りしているかをより深く理解できるようになります。今回のリリースにより、Firestore は Cloud SpannerCloud Bigtable といったクラウドネイティブのデータベースの仲間に加わり、お客様に Key Visualizer のサービスを提供します。Firestore Key Visualizer は、Cloud Console から無料で利用を開始できます。


謝辞

この記事に協力してくれた Firestore のリード プロダクト マネージャーである Minh Nguyen に感謝します。

Firestore パフォーマンス & スケール エンジニアリング マネージャー Per Jacobsson

Firestore パフォーマンス テック リードおよびエンジニアリング マネージャー Amarnath Mullick

投稿先