様々な業界において、ビジネスデータとデータ構造が複雑化するにつれ、データベースへのアクセス圧力が高まっています。大規模なアプリケーションシステムでは、多くの場合、数百万人のユーザーがあるデータ量の数千万、多数のデータベースクエリ操作の結果、また、より多くのデータベースの書き込み操作があります。データベースの読み取りと書き込み操作を分離することができる場合は、間違いなく大幅にシステムのパフォーマンスを向上させることができます。
I. システムの概要
高度な並行トランザクションシステムでは、書き込みトランザクションの割合が読み取りトランザクションの割合に比べて相対的に小さい場合、DM7のマスター-スタンバイシステムを利用することができますスペアマシンは、実行するスタンバイマシンに転送された読み取りトランザクションの特性を読み取ることができ、単一のノードの並行処理圧力を低減し、スタンバイノードのリソースを増やすために、システムの並行処理能力を向上させ、システムのパフォーマンスを向上させることができます。
DM7はユニークで革新的なマスタ-スタンバイソリューション、インスタントアーカイブマスタ-スタンバイシステムを提供し、クライアントを介して読み取りトランザクションと書き込みトランザクションの自動分離を実現し、読み取りトランザクションはスタンバイマシンで実行され、書き込みトランザクションはホストで実行され、ホストの負荷を軽減します。スタンバイマシンは複数構成することができ、スタンバイマシンが構成されるほど、ホストの圧力を共有することができ、システムの全体的な同時実行効率が高くなります。
読み書き分離プロセス
DM7はJDBCドライバをサーバーと組み合わせて使用し、読み取りと書き込みの分離を実現します:
1) ユーザーがログインした後、クライアントはまずホストに接続し、ホストは有効なスペアマシン情報を取得し、インスタントアーカイブの設定に従ってクライアントに返します。
2) クライアントは、ホストから返されたバックアップマシンのIPとポートに基づいて、バックアップマシンへの接続を確立します。
3) クライアントは、ステートメントをスタンバイ・マシンで最初に実行します(読み取り専用トランザクションの場合はスタンバイ・マシンのみで実行します)。
4) クライアントがスタンバイモードでデータを変更しようとしたなどのエラーをシステムが受信した場合、そのトランザクションは書き込みトランザクションとなり、実行のためにホストに転送されます。
5) ホスト上で実行された書き込みトランザクションがコミットすると、次の実行はスタンバイから続行されます。
6) 負荷分散を実現するために、リードトランザクションが待機マシンのリソースを占有しすぎて、ホストがアイドル状態になることを防ぐために、クライアントは一定のアルゴリズムで分散を行い、リードトランザクションの一部はホストでも実行されます。
図1 読み書き分離プロセス
III.迅速なアーカイブ
DM7は複数のアーカイブタイプ、ローカルアーカイブ、リアルタイムアーカイブ、同期アーカイブ、非同期アーカイブなどをサポートしています。読み書き分離を実現するために、リアルタイム・アーカイブを区別する新しいタイプのインスタント・アーカイブが追加されました。
リアルタイムアーカイブとは、スタンバイにリアルタイムでログを送信し、ログを受信したスタンバイはログのAPPLYが完了するのを待たず、即座にホストに応答し、ホストはローカルログをブラッシングする前に応答を受信することです。
インスタントアーカイブは、リアルタイムアーカイブよりも厳格なリモートアーカイブの形態で、まずローカルのログをフラッシュし、次にスタンバイに送信してスタンバイのAPPLYが完了するのを待ちます。
まず第一に、インスタントアーカイブマスターとスタンバイシステムは、ホストがログをブラッシングする前にスタンバイにログを送信した後、ホストのクラッシュの場合には、マスターとスタンバイの切り替えが発生しません、あなたはスタンバイマシンは、ホストのデータが完全であることを確認するためにログの1つ以上の段落をさせることはできませんと****。
次に、データが既に不整合である場合に、更新のためにスタンバイからホストにデータが読み込まれるのを避けるために、マスタとスタンバイの間でデータの整合性を確保する必要があります。
厳密な一貫性を保証する必要がないケースでは、dmarch.iniのARCH_WAIT_APPLY設定項目を使用することで、リアルタイム・アーカイブと同様にスタンバイがログのREDOを終了するのを待つ必要がないプライマリおよびバックアップ・システムを構成することができ、システム・パフォーマンスをさらに向上させることができます。
取引の適合性
トランザクションがすべて読み取り操作の場合、スタンバイ・マシンですべて実行されます。
トランザクションがすべて書き込みの場合、すべてホスト上で実行されます。
トランザクションに読み取りと書き込みの両方がある場合、スタンバイは書き込み操作をホストに戻して実行し、書き込み操作からトランザクション開始後の操作はすべてホストで実行してトランザクションの一貫性を確保します。
V. データ同期
読み書き分割クラスタを構成するには、まずプライマリデータベースとバックアップデータを同期させ、両データベースが同一であることを確認する必要があります。プライマリデータベースは新しく初期化されたデータでも、運用中または使用中のデータでもかまいません。DM7では、プライマリデータベースとバックアップデータを初期化および同期させる方法として、データファイルのコピーとバックアップのリストアの2つを用意しています。
ライブラリを個別に初期化する方法は、以下の理由から使えません:
1) 各ライブラリには****マジックナンバーがあり、マスターとスタンバイはログ転送時にこの値が同じかどうかを判断し、同じライブラリからのログであることを確認します。
2) dminitはデータベースの初期化時に暗号化用のランダムキーを生成し、そのキーは毎回異なるため、スタンバイマシンはホストキーで暗号化されたデータを解析できません。
1.データファイルのコピー
システムを構築した場合、データベースシステムはすでにオンラインになっており、稼動しているので、データファイルをコピーすることで、マスターデータベースとバックアップデータベースを同期させることができます。具体的な手順は以下のとおりです:
1) データベースを普通に閉じます。
2) ホストマシンのデータファイルの配布に従い、データファイルをスタンバイマシンの対応するディレクトリにコピーします。
3) データファイルが1つのディレクトリに保存されている場合、ディレクトリ全体を直接コピーすることができます。
2.バックアップ・リストア方式
1) データベースの通常シャットダウン
2) オフラインバックアップの実行
3) バックアップファイルをバックアップマシンにコピーします。
4) オフラインデータベースリカバリーの実行
VI.読み書き分離効果
1マスター、2スタンバイのシステムを構築し、***ケースではスループットを250%向上させます。
図2 読み書き分離テストの効果