コンテンツ ドリブンのウェブ アプリケーションのデータ ストレージのパフォーマンスの改善は、反復的なプロセスです。アプリケーションのデータベース構造とデータ ストレージ テクノロジーに加え、アプリケーションがサポートする必要がある潜在的なスループットとデータ ボリュームを検討することが重要です。これらは、最初の設計フェーズでも考慮すべき重要な考慮事項です。
多次元スケーリングやキャッシュなどの手法により、アプリケーションをさらに拡張して、より多くのユーザーとデータをサポートできます。
データ処理のスループット
データ処理のスループットとは、コンピューティング環境内のデバイス、システム、またはコンポーネント間でデータが処理されるレートのことです。特定の期間内にデータを処理するシステムの容量を測定します。スループットは、1 秒あたりのバイト数(B/s)、メガビット/秒(Mbps)、1 秒あたりのトランザクション数(TPS)など、時間単位あたりのデータの単位で表されます。
データ処理のスループットとは、データベースが所定の時間内に処理できるデータを指します。コンテンツ主導のウェブ アプリケーションでは大量のデータをリアルタイムで処理する必要があるため、この点は重要です。
データ処理のスループットに影響を与える可能性のある要因は次のとおりです。
- データベースのタイプ。データベースの中には、他のデータベースよりも効率的にデータを処理できるものがあります。
- ハードウェア構成。データベース サーバーには、この負荷を処理できるだけの CPU、メモリ、ストレージが必要です。
- クエリの複雑さ。複雑なクエリは、基本的なクエリよりも処理に時間がかかることがあります。
スケーリングに関しては、スループットは、リクエストに対応し、データを処理するためのコンテンツ主導のウェブ アプリケーションの容量と効率を測定する重要な指標です。高スループットは、増加するトラフィックを管理し、応答性の高いパフォーマンスを維持するために不可欠です。
ウェブ アプリケーションをスケーリングするときのスループットに関連する考慮事項は次のとおりです。
考慮事項 | |
---|---|
ロード バランシング | ロードバランサは、アプリケーションのサーバー インスタンス間でトラフィックを均等に分散します。これにより、1 つのサーバーがボトルネックになることはなく、複数のサーバーの複合的な処理能力を活用できます。 |
水平スケーリング | 水平スケーリングを使用してスループットを向上できる。これには、アプリケーションのインフラストラクチャにサーバー インスタンスを追加することも含まれます。水平スケーリングにより、アプリケーションが複数のサーバーにリクエストを分散し、スループットを向上させることができます。 |
データベースのスケーリング | 必要に応じて、増加する読み取りおよび書き込みオペレーションを処理するためのデータベースのスケーリング手法を検討してください。たとえば、分散データベースの使用や、データベースのクエリとインデックスの最適化などを行います。 |
データベースの自動スケーリング | 自動スケーリング メカニズムでは、リアルタイムのトラフィック パターンに基づいてサーバー インスタンスを追加または削除できます。多くの場合、クラウド プラットフォームには、需要に合わせてリソースを調整する自動スケーリング機能が備わっています。データベースとプラットフォームで利用可能なスケーリング機能(Spanner 用のオートスケーラーなどのサービス)を検討してください。 |
コード/アルゴリズムの最適化 | アプリケーションのコードとアルゴリズムのレビューと最適化を継続的に行って、効率を改善します。サーバー リソースの消費を最小限に抑えると、スループットが向上する可能性があります。 |
リージョン / グローバル | リージョンとグローバルのデータ ストレージとは、異なる地理的位置にまたがってデータを保存、管理するさまざまな方法を指します。リージョン データ ストレージでは、データを特定のリージョンまたはロケーションにローカルに保存します。グローバル データ ストレージでは、世界各地にあるサーバーにデータが保存されます。リージョン データ ストレージとグローバルデータ ストレージのどちらを選択するかは、データのサイズ、必要なセキュリティ レベル、さまざまなユーザーやアプリケーションがデータにアクセスできるかどうかなどの要因によって異なります。 |
分布 | データ ストレージの分散では、可用性、パフォーマンス、セキュリティを確保するために、複数の物理的または仮想的な場所にデータを分散します。分散ストレージ システムやクラウド ソリューションなど、データのサイズや複雑さ、組織のニーズ、利用可能なテクノロジーなどの要因に基づいて選択される手法があります。よく計画した戦略は、冗長性やスケーラビリティなどのメリットをもたらします。 |
高スループットを実現するには、ハードウェアやソフトウェアから、ネットワーク インフラストラクチャ、データ処理アルゴリズムまで、システムのさまざまな側面を最適化する必要があります。コンテンツ ドリブンのウェブ アプリケーションに必要な具体的な手法や最適化は、データ処理タスクに関する個別のニーズと、システムの潜在的な制約によって異なります。
データの量
保存されるデータ量の観点でウェブ アプリケーションをスケーリングするには、増大するデータ量に対応するためにデータ ストレージ容量を管理および拡張する必要があります。スケーリングする場合は、データの増加に関する課題に対応できるストレージ インフラストラクチャを計画する必要があります。
ウェブ アプリケーションをスケーリングするとき、データ ストレージに関する考慮事項は次のとおりです。
考慮事項 | |
---|---|
保存されるデータの種類 | 画像、動画、バイナリデータなどの一部のデータ型は、他のデータ型よりも保存が難しく、必要な容量が多くなる場合があります。複雑なデータ型や構造によって、システムのスケーリングも複雑になることもあります。アプリが保存するデータの種類と、それが最適な選択かどうかを検討してください。blob ストレージ、メディア ストレージ システム、時系列データベースなど、ユースケースやデータに合わせて構築されたストレージ システムを検討してください。 |
ユーザー数 | アプリケーションの今後の成長について考えてみましょう。オンボーディングするユーザーが増えると、より多くのデータをシステムに保存、アクセス、処理する必要があります。アプリケーションのパフォーマンス プロファイルに基づいて読み取りと書き込みをスケーリングすると、需要の増加に応じてアプリケーションをさらに最適化できる場合があります。 |
データ ストレージ テクノロジーの選択肢 | 現実的なデータ ストレージのニーズを評価し、NoSQL や SQL などの最適なデータ ストレージ技術を選択します。選択する際は、データ構造、アクセス パターン、スケーラビリティの要件を考慮してください。 |
データ パーティショニング | 複数のストレージ ノードにデータを分散するデータ パーティショニング戦略またはシャーディング戦略を実装すると、データの負荷を分散し、より効果的にスケーリングできるようになります。ユーザー、地理的位置、またはアプリケーションのデータアクセス パターンに基づいて他の基準に基づいてパーティショニングできます。 |
キャッシュとデータ圧縮 | キャッシュ保存戦略を使用して、頻繁にアクセスされるデータをメモリに保存し、ストレージ システムの負荷を軽減する。データ圧縮技術を使用することで、ストレージ要件が最小限に抑えられ、データ転送効率も向上します。 |
データ ライフサイクル管理 | データ ライフサイクル ポリシーを実装して、データの保持、アーカイブ、削除を管理します。 |
データベースのインデックス作成 | 必要に応じて、データベースのインデックス作成、クエリのパフォーマンス、データベース スキーマの設計を最適化して、増加するデータセットを効率的に処理します。 |
ウェブ アプリケーションをスケーリングする際のデータ ストレージは継続的なプロセスであり、ウェブ アプリケーションのニーズに合わせる必要があります。ストレージ要件を定期的に評価し、パフォーマンスをモニタリングし、ストレージ インフラストラクチャと戦略を必要に応じて調整して、増加するデータ量を効果的かつ効率的に処理できるようにしてください。
頻繁にアクセスされるデータをキャッシュに保存する
データのキャッシュはスケーリング戦略の重要な要素です。レスポンス時間の短縮、バックエンド システムの負荷の軽減、全体的なユーザー エクスペリエンスの向上に役立ちます。キャッシュとは、頻繁にアクセスされるデータを一時ストレージ レイヤに保存し、ソースからデータを繰り返し生成することなくデータを迅速に取得できるようにすることをいいます。
アプリが頻繁にアクセスするデータの種類、データを取得するパターンと頻度、データのサイズなどを検討してください。
ウェブ アプリケーションをスケーリングする際のキャッシュ戦略の例を次に示します。
戦略 | |
---|---|
オブジェクト キャッシュ | オブジェクト キャッシュとは、データベースのクエリ結果、API レスポンス、HTML フラグメントなど、個々のオブジェクトをキャッシュに保存することです。よく使用されるものには、Redis、Memcached、Varnish があります。 |
ページのキャッシュ | ページ キャッシュでは、ウェブページ全体をキャッシュします。このオプションは静的コンテンツに適しており、リバース プロキシ、静的サイト生成ツール、CDN を使用して実装できます。 |
データベースとクエリのキャッシュ保存 | データベースとクエリのキャッシュ保存とは、データベース サーバーの負荷を軽減するために、頻繁に実行されるデータベース クエリの結果をキャッシュに保存することを意味します。 |
ページ全体のキャッシュ | 動的コンテンツにはページ全体のキャッシュを使用できます。サーバーとデータベースの負荷を最小限に抑えるために、レンダリングされた HTML ページ全体をキャッシュに保存することを指します。 |
クライアントサイド キャッシュ | クライアントサイド キャッシュとは、ユーザーのデバイスをローカルに保持するためのブラウザ キャッシュなどのメカニズムです。キャッシュ制御ヘッダーを指定すると、ブラウザにアセットがキャッシュされる時間を制御できます。 |
キャッシュは、増加するユーザー トラフィックとデータ需要をアプリケーションが効果的かつ効率的に処理できるようにするための、広範なパフォーマンス最適化戦略の重要な要素です。
読み取りと書き込みのスケーリング
スループットとデータ量の要件をキャッシュの最適化で考慮し、アプリケーションのデータ ストレージをさらにスケーリングする方法を特定します。データ ストレージ システムを選択する際は、読み取りと書き込みの影響を考慮することが重要です。一つの考え方としては、アプリがサポートするオペレーションのタイプを検討し、それらのユースケースや使用パターンに合わせてデータ ストレージを最適化します。たとえば、一部のオペレーションでは非対称または対称スケーリングが有効な場合があります。
非対称スケーリング
場合によっては、コンテンツ主導のウェブ アプリケーションでは、読み取りまたは書き込みの非対称性が発生することがあります。つまり、他の種類のオペレーションに比べて、読み取りまたは書き込みの量が大幅に多くなる可能性があります。このような場合は、それに応じてデータベースをスケーリングすることが重要です。使用するアプリケーションと、データのアクセス方法と書き込み方法を検討します。
読み取りまたは書き込みの非対称性に影響を与える可能性のある要因は次のとおりです。
- アプリケーションのタイプ。アプリケーションの中には他のアプリケーションよりも読み取り負荷が高いものがあります。
- ユーザーの行動。ユーザーによるアプリの操作方法は、読み取りまたは書き込みの非対称性にも影響します。
対称スケーリング
対称スケーリングとは、アプリケーションが成長しても、読み取りと書き込みの両方のオペレーションをボトルネックなしで直線的にスケーリングできることを意味します。コンテンツ主導のウェブ アプリケーションにおける読み取りおよび書き込みオペレーションの対称スケーリングは、特に大量のデータと大量のユーザー トラフィックを管理する場合には困難です。
対称的なスケーリングを実現するための戦略は次のとおりです。
戦略 | |
---|---|
分散データベース | Google Cloud Bigtable のようなデータベースは、データを複数のノードに分散し、読み取りと書き込みのオペレーションにスケーラビリティを備えているように構築されています。 |
データ パーティショニング | データ パーティショニングにより、データが均等に分散され、各パーティションまたはシャードが読み取りオペレーションと書き込みオペレーションの両方を個別に処理できます。 |
キャッシュ レイヤ | すぐに使えるワークロードにキャッシュ レイヤを実装。頻繁にアクセスされるデータをキャッシュに保存して、読み取りオペレーション時のデータベースの負荷を軽減します。 |
非同期処理 | 非同期処理を使用すると、時間がかかる書き込みオペレーションや緊急でない書き込みオペレーションを、バックグラウンド プロセスまたはキューにオフロードできます。アプリケーションは、書き込みの完了を待たずに読み取りの処理を続行します。 |
対称スケーリングには、フロントエンドからバックエンド、データベースからキャッシュ レイヤまで、アプリケーション スタック全体に対する包括的なアプローチが必要です。対称スケーリングにより、パフォーマンスの一貫性、リソース使用率のバランス、高可用性、複数のディメンションにわたるスケーラビリティを実現できます。必要に応じてスケーリング戦略を調整し、ボトルネックが発生したときは対処できるように準備してください。