スケーラビリティの強化
中間層のアプリケーションは、多くの場合、1 つのデータベースを使用してデータを格納します。これでは、データベースに対する負荷が増大すると、スケーラビリティが制約されることになります。Web ベースのカタログなど、書き込みより読み取りが多く行われるアプリケーションでは、読み取り専用のデータを複数のデータベースにキャッシュして、クライアントをそれらのデータベースに均等に接続して負荷を分散することにより、読み取り部分の作業負荷をスケール アウトすることができます。
次の図は、アプリケーションと Web サーバーが 3 つのキャッシュ サーバーのデータを使用する構成を表しています。
アプリケーションで可用性も強化する必要がある場合や、特定のユーザーの読み取りや更新を特定のアプリケーション サーバーに送り、その後、特定のキャッシュ サーバーにも送る必要がある場合は、「可用性とスケーラビリティの両方の向上」の例を参照してください。
Adventure Works Cycles の例
Adventure Works Cycles は、データベースの概念とシナリオを説明するために使用する架空の製造会社です。 詳細については、「サンプル データとサンプル データベース」を参照してください。
Adventure Works Cycles では、最近 Web サイトをアップグレードして以下の新機能を追加しました。
- 顧客によるオンラインでの製品の注文
- オンラインでの注文の状態の確認
- 製品資料の検索機能の強化
Web サイトからオンラインで製品を注文できるようにした結果、Microsoft SQL Server 専用になっている 1 つのコンピュータの利用が大幅に増加しました。そこで、Adventure Works の管理者は、このコンピュータをレプリケートされるデータのソースとして使用することにしました。すべての読み取り操作は、SQL Server を実行している 3 つの追加コンピュータにスケール アウトされます。これらのコンピュータには、ソース コンピュータのデータがキャッシュされます。キャッシュ コンピュータは、ユーザーによる製品カタログの表示や検索、注文の状態の確認など、すべての読み取り操作を処理します。書き込み操作はすべてソース データベースに送られます。
このシナリオの一般的な要件
レプリケーションを使ってスケーラビリティを高めるアプリケーションには一般的に以下のような要件があり、適切なレプリケーション ソリューションで対処する必要があります。
- システムでトランザクションの一貫性を保つ必要があります。
- システムの待機時間が短く、ソースで行われた更新が速やかにキャッシュに反映されるようにする必要があります。
- 多数のトランザクションのレプリケーションを処理できる、高いスループットが必要です。
- ソースに対するレプリケーション処理のオーバーヘッドをできるだけ少なくする必要があります。
- キャッシュで必要とされるデータは、ソースで利用可能なデータのサブセットである可能性があります。
このシナリオで使用するレプリケーションの種類
SQL Server では、出版業界にたとえてレプリケーション システムのコンポーネントを表しています。コンポーネントには、パブリッシャ (出版社)、サブスクライバ (購読者)、パブリケーション (出版物) とアーティクル (記事)、およびサブスクリプション (定期購読物) があります。システムのコンポーネントの詳細については、「レプリケーションのパブリッシング モデルの概要」を参照してください。
上記の図では、ソースがパブリッシャです。パブリケーションには、ソースの一部またはすべてのデータが含まれます。各データ テーブルはアーティクルです (アーティクルはストアド プロシージャなどの他のデータベース オブジェクトの場合もあります)。各キャッシュはパブリケーションのサブスクライバで、サブスクリプションとしてスキーマとデータを受信します。
SQL Server では、さまざまなアプリケーション要件に対して各種のレプリケーション (スナップショット レプリケーション、トランザクション レプリケーション、およびマージ レプリケーション) を用意しています。このシナリオはトランザクション レプリケーションで最適に実装され、前のセクションで概説した要件によく適合します。トランザクション レプリケーションの詳細については、「トランザクション レプリケーションの概要」および「トランザクション レプリケーションの動作方法」を参照してください。
トランザクション レプリケーションは、以下に示すこのシナリオの主な要件に対応するように作られています。
- トランザクションの一貫性
- 短い待機時間
- 高いスループット
- 最小限のオーバーヘッド
このシナリオで考慮する必要がある主なオプションは、フィルタ選択です。トランザクション レプリケーションでは、サブスクライバのテーブルにアプリケーションで必要なデータのみが含まれるように、列や行をフィルタ選択することができます。詳細については、「パブリッシュされたデータのフィルタ選択」を参照してください。
このシナリオの実装手順
このシナリオを実装するには、最初にパブリケーションとサブスクリプションを作成してから、各サブスクリプションを初期化してください。各手順の詳細については、以下のリンクをクリックしてください。
サブスクリプションの初期化が終わり、パブリッシャとサブスクライバ間でデータ フローが発生したら、共通の管理および監視作業の詳細について以下のトピックを参照してください。