SKYDIV Desktop Client を支える技術の一つ、「SQL Server Express 冗長化」をご紹介いたします。
SQL Serverには上位エディション(Standard/Enterprise)で利用可能な「SQL Server Always On」という冗長化機能があります。
上位エディションということもあり、結構高価で高級な機能になっています。
そこまで高級な機能でなくてもいいからもっと安価であったら……競合製品と比較して大きなアドバンテージを得ることができますよね。
そこで SKYDIV では無償で利用できる SQL Server Express Edition を使用する場合でも、Always On のような冗長性と信頼性を担保できるように「SQL Server Express 冗長化」機能を独自に実装して製品に搭載しています。
前回、「フェールオーバー」を支える「分散合意アルゴリズム」についてご紹介しました。
今回は要素技術の 1 つで、「データの整合性」を支える「レプリケーション」についてご紹介します。
前回の記事
レプリケーションについて
「レプリケーション」はデータの複製に関する内容で、運用系と待機系の間でデータ同期を行っています。
その中でも以下の2種類の複製方法を使っています。
- 運用系主体で行うデータ複製方法(更新データの複製)
- 待機系主体で行うデータ複製方法(テーブルの複製)
更新データの複製
まずは、更新データの複製に関する内容です。
運用系にてデータを更新する際には「トランザクション」と呼ばれる単位でデータの更新、コミットと処理が進みます。
トランザクションについては別の機会で紹介させていただければと思います。
リーダーのデータベースサーバーでは、トランザクション中に更新された差分データをフォロワーのデータベースサーバーに送信しています。
差分データによる更新を行う事で、データベース間でデータ同期を実現しています。
テーブルの複製
次にテーブルの複製に関する内容です。
例えば、待機系の通信不良やOS再起動など、運用系から待機系に通信ができなくなると、運用系と待機系の間でそれぞれで抱えているデータに差が生じることになり、未同期という状態になります。
この状態になると、待機系から運用系に対して、テーブル内のデータを取得して、未同期という状態を補正します。
待機系が未同期となっている状態の場合、システム全体としては分散合意アルゴリズムのもと、運用系にアクセスしますので、稼働できる状態を保っています。
まとめ
主に更新データの複製、テーブルの複製の仕組みによって、運用系と待機系でのデータ同期を行っています。
また、複製する際には、フェールオーバーの仕組みとも連携し、リーダーやフォロワーの各役割に遷移することで、役割に応じた処理に専念することができます。
次回はデータの更新方法に関わる「トランザクション」についてご紹介できればと思います。