SKYDIV Desktop Client を支える技術の一つ、「SQL Server Express 冗長化」をご紹介いたします。
SQL Serverには上位エディション(Standard/Enterprise)で利用可能な「SQL Server Always On」という冗長化機能があります。
上位エディションということもあり、結構高価で高級な機能になっています。
そこまで高級な機能でなくてもいいからもっと安価であったら……
競合製品と比較して、大きなアドバンテージを得ることができますよね。
そこで、SKYDIV では無償で利用できる SQL Server Express Edition を使用する場合でも、Always On のような冗長性と信頼性を担保できるように、「SQL Server Express 冗長化」機能を独自に実装して、製品に搭載しています。
シリーズ一覧
①システム構成編
②フェイルオーバー
③レプリケーション
④トランザクション編【今回の記事】
⑤リダイレクト
前回のおさらい
前回は「データの整合性」を支える「レプリケーション」についてご紹介しました。
前回の記事
その中で、運用系主体で行うデータ複製方法や差分データをフォロワーに送信することを説明しました。
差分データは、リーダーでのトランザクションの考えが必要となります。
そこで、今回はリーダーで処理する際のトランザクションに関する内容を中心にご紹介します。
トランザクションについて
データベースの更新操作を行う際にデータの一貫性を持たせることを「トランザクション」といいます。
トランザクション内では、更新操作、コミット(もしくは、ロールバック)となるのが一般的な内容となります。
クラスタを構成している場合には、リーダーからフォロワーに対して差分データを送信している点を考慮する必要があります。
今回はトランザクション内での差分データ取得方法やフォロワーにて差分データを適用する際に考慮した内容などとなります。
リーダーでの更新操作
クラスタを構成している場合、データベースへの要求はリーダーに着信します。 更新処理を行う操作においては、まず、トランザクションを開始し、トランザクション単位の 「識別子」と「リビジョン」を発行します。
トランザクション開始後、T-SQLによるINSERTやUPDATEなどの更新操作を行うと、更新操作に対する差分データが蓄積されます。
この蓄積された差分データには、トランザクション識別子が関連付いていますので、データ操作後に差分データを取得することが可能となります。
フォロワーでの更新操作
リビジョンについての説明になります。
リーダーでのデータ操作を行い、差分データをフォロワーに適用することでデータを同期しています。
トランザクションによる処理が発生した順番も考慮することで、差分データの適用する順番を連続となるようにしています。
この他にもリーダーとフォロワー間でのデータの整合性を確認する手段を設けています。
仮にフォロワーにてリビジョンの整合が取れない場合、フォロワーは「未同期」ということになります。
この未同期という状態は、他のノードにもすぐに共有され、リーダー選出時に利用します。
その結果、未同期という状態のノードがリーダーにならないようにしています。
また、SKYDIVでは、この同期に関わる情報を管理コンソールで確認できるようにしています。
最後に
主にリーダーとフォロワー間における差分データの更新方法、データ同期に関わる方法を説明しました。
データベースでの同期、未同期という情報をクラスタ内のノードで認識させる必要があり、Raftと連携することでリーダー選出に活かしています。
今まで4編に渡って、「SQL Server Express 冗長化」に関する内容を掲載しています。
ぜひ、他の内容もご一読いただければと思います。
クラスタ構成を作成するようなシステムでは、ノードのIPアドレス以外に、別途、クラスタ用のIPアドレスを作成し、クラスタ用のIPアドレスを利用して通信することも可能だと思います。
「SQL Server Express 冗長化」のシステムでは、クラスタ用のIPアドレスを作成せずに通信を行っています。
そこで、次回は、リーダーへの通信方法についてご紹介できればと思います。 最後まで読んでいただきありがとうございました。