SQLite ベースの分散型フォールトトレラント DBMS、rqlite 6.0 のリリース

分散 DBMS rqlite 6.0 のリリースが発表されました。これにより、SQLite をストレージ エンジンとして使用し、同期されたストレージのクラスターの作業を整理できるようになります。 rqlite の特徴の XNUMX つは、分散型フォールトトレラント ストレージのインストール、デプロイ、メンテナンスが容易であることです。etcd や Consul に似ていますが、キー/値形式の代わりにリレーショナル データ モデルを使用します。 プロジェクト コードは Go で記述され、MIT ライセンスに基づいて配布されます。

すべてのノードを同期状態に保つために、Raft コンセンサス アルゴリズムが使用されます。 Rqlite は、オリジナルの SQLite ライブラリと標準の go-sqlite3 ドライバーを使用します。その上で、クライアント要求を処理し、他のノードへのレプリケーションを実行し、主要ノードの選択に関するコンセンサスの達成を監視するレイヤーが起動されます。

データベースへの変更は、リーダーとして選択されたノードによってのみ行うことができますが、書き込み操作を伴う接続はクラスター内の他のノードに送信することもでき、リーダーのアドレスを返してリクエストを繰り返します (次のバージョンでは、リーダーへのリクエストの自動転送を追加することを約束します)。 主にフォールト トレランスに重点が置かれているため、DBMS は読み取り操作のみで拡張され、書き込み操作がボトルネックとなります。 単一ノードから rqlite クラスターを実行することが可能であり、このソリューションを使用すると、フォールト トレランスを提供せずに HTTP 経由で SQLite へのアクセスを提供できます。

各ノードの SQLite データはファイルではなくメモリに保存されます。 Raft プロトコルの実装のレイヤー レベルでは、データベースの変更につながるすべての SQLite コマンドのログが保存されます。 このログは、レプリケーション (他のノードでリクエストを再現するレベルでのレプリケーション)、新しいノードの起動、または接続喪失からの回復中に使用されます。 ログのサイズを削減するために、自動パッケージ化が使用されます。これは、指定された数の変更後に開始され、スナップショットがディスク上に固定され、それに関連して新しいログ (メモリ内のデータベースの状態) の保存が開始されます。スナップショット + 蓄積された変更ログと同一です)。

rqlite の特徴:

  • 別途 SQLite をインストールする必要がなく、クラスターを簡単にデプロイできます。
  • レプリケートされた SQL ストレージを迅速に取得する機能。
  • 実用的なプロジェクト (実稼働グレード) ですぐに使用できます。
  • バッチ モードでデータを更新し、クラスターの先頭ノードを決定できる HTTP(S) API の存在。 また、コマンド ライン インターフェイスと、SQLite 用に構築されたさまざまなクライアント ライブラリを使用する機能も提供します。
  • 他のノードを識別するサービスを利用できるため、クラスターを動的に作成できます。
  • ノード間の暗号化データ交換のサポート。
  • 読み取り時にデータの関連性と一貫性をチェックするレベルを構成する機能。
  • ノードを読み取り専用モードで接続するオプションの機能。これはコンセンサスの決定には関与せず、読み取り操作のクラスターのスケーラビリティを向上させるために使用されます。
  • XNUMX つのリクエストでコマンドを組み合わせることに基づく、独自の形式のトランザクションのサポート (BEGIN、COMMIT、ROLLBACK、SAVEPOINT、および RELEASE に基づくトランザクションはサポートされていません)。
  • ホット バックアップの作成のサポート。

新しいリリースでは、読み取りおよび書き込みリクエストを正しいクラスター ノードにルーティングするプロセスを改善することで、クラスターの信頼性を高めることを目的とした大幅なアーキテクチャの変更が導入されています。 rqlite ノードは、Raft プロトコルによってノード間で確立された TCP 接続を使用して、ノード間で複数の論理接続を多重化できるようになりました。 リクエストがリーダー権限を必要とするが、セカンダリ ノードに送信される場合、セカンダリ ノードはリーダーのアドレスを決定し、Raft コンセンサス計算を実行せずにそれをクライアントに渡すことができます。

この変更により、別個のメタデータ同期コンポーネントの必要性もなくなり、Raft 状態とメタデータの別個の処理も不要になりました。 セカンダリ ノードは、リーダー ノードのアドレスを確認する必要がある場合にのみ、リーダー ノードにリクエストを送信するようになりました。 API は、クラスター内の他のノードの状態に関する情報を取得する機能を提供します。 「.sysdump」コマンドがコマンド ライン インターフェイスに追加されました。

出所: オープンネット.ru

コメントを追加します