スケールアップとスケールアウトの違い
クラウド コンピューティングにおけるデータベース スケーラビリティの概要
データはどこにでもある - スケーラビリティとは何か?
クラウド コンピューティング におけるスケーラビリティとは、IT ソリューションまたはリソースのサイズや性能をすばやく簡単に増減できる機能のことです。スケーラビリティとは、増大する作業を処理するためのシステムの機能を指すこともありますが、スケールアップとスケールアウトの違いという話になると、多くの場合、データベースとデータ (しかも大量の) のことを指します。
現代のアプリ開発者にとって、データベースのスケーラビリティは最重要課題です。たとえば、新しいアプリがヒットして、一握りのユーザーから世界中で何百万人ものユーザーに増えたとします。アプリ開発者がその需要に対応し、ダウンタイムを最小限に抑えるために最も重要な能力の 1 つが、効率的なスケーリング能力です。
スケールアウトとスケールアップの違いがテーマである今回の議論では、クラウド、モバイル、ソーシャル メディア、ビッグ データなどから発生する膨大な量の広範な種類のデータ、変化するデータ量、変化するワークロード パターンに適応し、処理するためのスケーラビリティの方法に焦点を当てます。
スケールアウトとスケールアップの違い
最も基本的なレベルでは、データベースのスケーラビリティは 2 つの種類に分けられます。
垂直スケーリング (スケールアップまたはダウン) では、お客様が必要に応じてコンピューティング能力やデータベースを増やしたり減らしたりします。パフォーマンス レベルを変更したり、エラスティック データベース プールを使用してワークロードの要求に応じて自動的に調整したりします。
水平スケーリング (スケールアウトまたはイン) では、データベースを追加したり、シャーディングと呼ばれるデータ分割手法を使用して大規模なデータベースをより小さなノードに分割したりすることで、サーバー間でより速く、より簡単に管理することができます。
垂直方向のスケールアップ
垂直スケーリングは、クエリの変更やインデックスの作成など、従来のデータベース最適化手法では解決できないパフォーマンスの問題に迅速に対応する必要がある場合に使用します。スケールアップは、現在のパフォーマンス レベルではすべての需要を満たすことができないような、ワークロードの急増に対応するのに有効です。スケールアップにより、リソースを追加して、ピーク時のワークロードを容易に処理できます。そして、リソースが不要になったら、スケールダウンすることで元の状態に戻し、クラウドのコストを削減することができます。
スケールアップする場合:
-
お客様のワークロードが、CPU や I/O の制限など、何らかのパフォーマンス制限にかかっている場合。
-
従来のデータベース最適化では解決できないパフォーマンスの問題を解決するために、迅速に対応する必要がある場合。
-
変化する待機時間の要件に適応するために、サービス レベルを変更できるソリューションが必要である場合。
水平方向のスケールアウト
アプリ開発者は、最高のパフォーマンス レベルで動作させても、ワークロードに十分なリソースを確保できない場合、スケールアウトや水平スケーリングを検討し始めます。水平スケーリングでは、データはサーバー間で複数のデータベース (シャード) に分割され、各シャードは独立してスケールアップまたはダウンすることができます。
データをパーティション分割すると、どのようにスケーラビリティが向上するのでしょうか。仮想マシン (VM) などのリソースを追加して単一のデータベースをスケールアップしていくと、やがて物理的なハードウェアの限界に達してしまいます。データ パーティションはそれぞれ別のサーバーで管理されているため、複数のシャードにデータを分割すれば、ほぼ無制限にシステムをスケールアウトすることができます。
データベース技術の中には、非リレーショナルまたは NoSQL データベースに代表されるように、 データベース シャーディングによってデータを水平方向にスケールアウトする独自の機能が開発されています。これにより、大規模、関連性のない、不確定、または急速に変化するデータなどを処理することができます。
また、従来スケールアップまたはダウンのサービスを提供していたリレーショナル (SQL) データベース サービスの中には、非リレーショナル データベースのスケーラビリティの利点に匹敵するエキサイティングなオプションが提供され始めているものもあります。 Microsoft Azure SQL Database Hyperscale や Azure Database for PostgreSQL Hyperscale などのハイパースケール サービスを使用すると、ユーザーは最大 100 TB のストレージを迅速にスケーリングすることができます。また、必要に応じてストレージを拡張できる柔軟なクラウドネイティブ アーキテクチャが提供され、わずか数分でほぼ瞬時にバックアップやデータベースの高速リストアを行うことができます。
スケール アウトする場合:
-
地理的に分散されたアプリケーションで、すべてのアプリがリージョン内のデータの一部にアクセスする必要がある場合。各アプリは、他のシャードに影響を与えることなく、そのリージョンに関連するシャードのみにアクセスします。
-
負荷分散のようなグローバル シャーディングのシナリオ。地理的に分散した多数のクライアントがそれぞれの専用シャードにデータを挿入します。
-
サービスの最高パフォーマンス レベルでも必要なパフォーマンスが最大になってしまった場合や、データが 1 つのデータベースに収まらない場合。
自動スケーリング
自動スケーリングとは、システムのパフォーマンス要件を満たせるよう、リソースを自動的かつ動的にマッチングさせるプロセスです。作業量の増加に伴い、アプリは必要なパフォーマンス レベルを維持したり、需要の増加に対応したりするために、追加のリソースを必要とする場合があります。需要が減少して追加リソースが不要になった場合に、未使用のリソースを自動的に割り当て解除するサービスを導入することで、クラウド支出を節約することができます。
自動スケーリングでは、クラウドホステッド環境の弾力性が活用されます。これにより、リソースの追加や削除、システムのパフォーマンスの確認など、システム運用者が常に判断する必要がなくなり、管理の負荷が軽減されます。
アプリのスケーリングには主に垂直方向と水平方向の 2 つの方法がありますが、垂直方向のスケーリングを自動化することはあまり一般的ではありません。というのも、スケールアップするためにはしばしば、再デプロイの際にシステムを一時的に利用不可にする必要があるからです。
自動スケーリングは、水平方向にスケーリングする場合に多く見られます。スケールアウト (またはイン) とは、リソースのインスタンスを単に追加または削除することであり、新しいリソースがプロビジョニングされてもお客様のアプリは中断することなく実行されます。需要が減少した場合、ダウンタイムなしでシームレスにリソースをシャットダウンし、割り当てを解除することができます。
Microsoft Azure などのクラウドベースのシステムを提供する多くのプロバイダーは、水平方向の自動スケーリングをサポートしています。
よく寄せられる質問
-
データベースとは、相互に関連する情報のコレクションで、管理やアクセスが容易になるように保存および整理されたものです。新しいデータやデータの種類が目まぐるしく生成される中、そのデータを整理し、アクセスできるようにし、安全に保つことが課題となっています。膨大な量のデータを扱うために、管理ツール レイヤーを含んだデータベース管理システム (DBMS) がよく使用されます。
クラウド、モバイル、ソーシャル メディア、ビッグ データから生成される膨大な量と広範な種類のデータに適応するために、新しい種類のデータベースとテクノロジが常に生まれています。
-
NoSQL データベース (非リレーショナルまたは "Not Only " SQL と呼ばれることが多い) は、データの保存と取得を従来のリレーショナル (SQL) データベースとは異なる方法で処理する、データベース テクノロジの多様なセットです。
NoSQL データベースには事前定義済みのスキーマが必要なく、複数のデータ モデルを使用することができるため、大量の非構造化データの処理やビッグ データのデータベース プロジェクトのスケーリングで非常に有効です。
-
PostgreSQL は、リレーショナルおよび非リレーショナル クエリで動作する堅牢なオープンソースのデータベースで、その信頼性とデータ整合性で知られています。PostgreSQL は、金融サービス、製造業、政府機関の地理情報システム、Web テクノロジなどの分野で広く使われています。開発者は PostgreSQL を使用してアプリを作成し、管理者はそれを信頼してデータを保護します。
-
キャッシュは、システムのパフォーマンスとスケーラビリティを向上させるために、開発者や IT 専門家が使用する一般的な技術です。キャッシュは、頻繁にアクセスするデータを、アプリの近くにある高速なストレージに一時的にコピーするしくみです。この高速データ ストレージを元のソースよりもアプリに近い場所に配置すると、キャッシュにより、データがよりすばやく提供されるため、クライアント アプリの応答時間を大幅に改善できます。開発者は多くの場合、処理済みのデータをキャッシュし、キャッシュを再利用することで、標準的なデータベース クエリよりも高速にリクエストに対応できるようにアプリを設計します。
-
データ シャーディングとは、水平方向のデータパーティショニングの一種で、大きなデータベースを小さなデータベースに分割でき、複数サーバー間で高速かつ容易に管理できるようになります。
-
サービスとしてのプラットフォーム (頭文字をとって PaaS) とは、アプリの開発、テスト、配信、管理のための環境をオンデマンドで提供するクラウド プロバイダーのサービスです。サービスとしてのプラットフォームでは、サーバー、ストレージ、ネットワーク、データベースなどの基盤となるインフラストラクチャの設定や管理が必要なく、開発者は Web やモバイル アプリをより簡単かつ迅速に作成することができます。
Azure を使用したクラウドのスケーラビリティの詳細情報
オンプレミス、マルチクラウド、エッジ環境など、お客様のシナリオに合わせたスケールアップとスケールアウトの包括的なアプローチを詳しくご覧ください。Azure のデータベース サービス ファミリは、現代のアプリ開発者のニーズに合うよう、プロプライエタリかつオープンソースのエンジンにまたがるフル マネージドのリレーショナル NoSQL メモリ内データベースの選択肢を提供します。
スケーラビリティ、可用性、セキュリティのための自動化ソリューションを含む、自動化されたインフラストラクチャ管理により、時間とコストを削減できます。
関連製品とサービス
Azure SQL
アプリの移行、最新化、開発のための柔軟なオプションを提供する SQL クラウド データベースのファミリです。
Azure Cosmos DB
オープン API を備え、あらゆるスケールに対応できる高速 NoSQL データベースです。
Azure PostgreSQL
フル マネージド、インテリジェント、およびスケーラブルな PostgreSQL です。
Azure SQL Database
クラウド内のインテリジェントなマネージド SQL です。
Azure SQL Managed Instance
クラウド内の常に最新のマネージド SQL インスタンスです。
SQL Server on Virtual Machines
SQL Server のワークロードを最小の TCO でクラウドへ移行できます。
Azure Database for MySQL
フル マネージドでスケーラブルな MySQL データベースです。
Azure Maria DB
アプリ開発者向けのマネージド MariaDB データベース サービスです。
Azure Cache for Redis
優れたスループットと待機時間の短いデータ キャッシュにより、アプリケーションを高速化できます。