1. 「クラウドネイティブ データベース」とは何ですか?クラウド コンピューティングの出現により、企業の情報技術の発展が加速しました。クラウド コンピューティング プロバイダーは、膨大な量のコンピューティング、ストレージ、および通信リソースを「プール」にまとめ、企業または個々のユーザーは、オンデマンドでコンピューティング リソースを購入して、情報システムを迅速かつ低コストで構築します。システムのワークロードが変化すると、必要に応じてコンピュータ リソースを拡張または縮小できます。コンピューティング プロバイダーにとっては、すべてのユーザーが使用する膨大なリソースが統一された方法で管理されるため、大幅な規模の経済と低い限界費用が実現します。クラウドコンピューティングのユーザーにとっては、リソースを迅速かつ便利に取得でき、オンデマンド使用は、独自のコンピュータルームを構築し、基本的な設備を構築して運用するよりもコストがかかりません。社会全体の視点から見ると、全体的な資源利用率が高くなり、環境に優しくなります。 データベースは最も一般的に使用される基本ソフトウェアの1つであり、通常は 計算する そして ストレージ 能力。ストレージは、もちろんデータの基本的な機能です。計算能力は、データベースがユーザーによって発行された複雑な分析や計算要求を完了できること(強力な計算ロジックを SQL を使用して記述できる)という外部的な面と、クエリの最適化、トランザクション処理、インデックスのメンテナンスなどの内部計算という内部的な面の両方に反映されます。 スタンドアロン データベースは通常のホスト上に展開され、そのストレージとコンピューティング機能はホストのハードウェアによって制限されるため、拡張が困難です。分散データベースでは、マシンを適切に追加することでデータベース容量と計算能力を拡張できますが、クラスター ノードの機能は依然としてマシン リソースによって制限されます。何も変更せずに単にクラウドに移行すると、通常のホストがクラウド ホストに置き換えられます。 まず、データベースをクラウド上に直接展開すると、ネットワークのボトルネックや深刻な書き込み増幅の問題など、多数の新たな問題が発生する可能性があります。たとえば、単一マシンのデータベースに無限のストレージを接続したとしても、データ量が非常に大きい場合はパフォーマンスが非常に低下します。第二に、クラウドコンピューティングの最大の利点である「柔軟なリソース管理とオンデマンド利用」を十分に活用できず、また、幅広いクラウドストレージ製品を柔軟に利用することもできません。第三に、情報化とデジタル化の急速な発展により、データベースに対する要求がさらに高まりました。より高いパフォーマンス、より低いコスト、より優れた柔軟性などです。これは、スタンドアロンのデータベースをクラウドに移行するだけでは解決できません。 分散データベースも優れたスケーラビリティを備えていますが、「クラウド ネイティブ」とは言えません。まず、概念的には、弾力的な拡張の単位は、より細かい「コンピューティングおよびストレージ リソース」ではなく、「マシン」です。第二に、設計時にクラウド プラットフォームの特性が考慮されておらず、最適なパフォーマンスとコストを実現するための適切な最適化が行われていませんでした。 3 番目に、分散トランザクションや分散クラスタ管理などのモジュールの導入によっても、システムはより複雑になります。 (ここで批判するつもりはありません。分散データベースには、膨大なデータ、スケーラビリティの必要性、グローバル展開の必要性など、大きな利点もあります。) 「クラウド ネイティブ データベース」の核心は、「弾力的なリソース管理」の概念にさらに沿ったデータベース アーキテクチャを設計し、クラウド プラットフォームのプールされたリソースを最大限に活用し、クラウド プラットフォームの既存のインフラストラクチャに適応することです。 クラウド コンピューティング プラットフォームのストレージとコンピューティング リソースは個別に拡張できるため、クラウド ネイティブ データベースにはストレージとコンピューティングを分離したアーキテクチャが必要です。 2. オーロラ2.1 主な問題点Aurora は AWS が立ち上げた OLTP クラウド データベースの先駆者であり、MySQL コードに基づいてストレージとコンピューティングの分離アーキテクチャを変革しました。 AWS は、クラウド上にデータベースを構築するとストレージリソースの拡張が容易になると考えていますが、データベースインスタンスとすべてのストレージノード間のやり取りはネットワークを経由する必要があるため、システムのボトルネックはネットワークにあります。したがって、Aurora の中心的なコンセプトは、ネットワーク経由で送信されるデータの量を削減することです。 Aurora の論文では、MySQL をクラウドに直接移行する例が示されています。 単一マシンの MySQL トランザクションをコミットするには、ログをディスクに書き込む必要があります。同時に、バックグラウンド スレッドはダーティ ページを非同期的にフラッシュします。ページ区切りを回避するには、ダーティ ページをフラッシュするときに、データ ページを二重書き込み領域に書き込む必要があります。下の図に示すように、本番環境でのマスタースレーブレプリケーションの必要性を考慮すると、AZ1 と AZ2 はそれぞれ同期ミラーレプリケーション用の MySQL インスタンスを展開し (これは DRBD ソリューションであるべきでしょうか?)、基盤となるストレージは Elastic Block Store (EBS) を使用し、各 EBS には独自のミラーがあり、ポイントインタイムリカバリをサポートするために、REDO ログと binlog ログをアーカイブするために Simple Storage Service (S3) が展開されます。 上記の書き込み同期では、各ステップで、REDO ログ、バイナリログ、データ ページ、ダブル書き込み、および frm メタデータの 5 種類のデータを渡す必要があります。ミラーリングに基づく同期レプリケーションであるため、図の手順 1、3、5 は連続しています。このモデルの応答時間は非常に悪いです。必要なネットワーク IO は 4 つあり、そのうち 3 つは同期およびシリアルです。ストレージの観点から見ると、データは EBS 上の 4 つのコピーに保存され、返される前に 4 つのコピーすべてが正常に書き込まれる必要があります。したがって、このアーキテクチャでは、IO ボリュームとシリアル化モデルの両方でパフォーマンスが非常に低下します。 IO 数を削減するために、Aurora はすべてのノード間のデータ転送に redo のみを使用します。これを実現するには、一部のデータベース機能をストレージ ノードにプッシュダウンする必要があります。もちろん、IO の削減に加えて、Aurora の設計には他にも多くの利点があります。 2.2 コアテクノロジー2.2.1 ストレージとコンピューティングの分離アーキテクチャAurora によってストレージにプッシュダウンされる主な機能は、主に、ログの再生、障害回復、バックアップと復元など、REDO に関連するものです。テクニカル レイヤーには、クエリ処理、トランザクション処理、キャッシュ管理、ロック管理、アクセス制御などのほとんどの機能が保持されます。 Aurora は、AZ 全体のプライマリ インスタンス、複数のレプリカ (最大 15 個)、および複数のストレージ ノードで構成されます。マスター インスタンスと読み取り専用インスタンス/ストレージ ノード間では、REDO ログとメタ情報のみが転送されます。マスターインスタンスとレプリカインスタンスは分散ストレージのセットを共有するため、レプリカインスタンスを追加してもストレージコストはゼロになり、Aurora の読み取りスケーラビリティが大幅に向上します。 マスター インスタンスは、REDO ログをレプリカ インスタンスに非同期的に送信し、レプリカ インスタンスはそれを受信した後、REDO ログの再生を開始します。ログに対応するページがローカル ページ キャッシュにない場合は、ストレージ ノードにすべてのページと REDO ログがあり、必要に応じてストレージ ノードから直接要求できるため、REDO ログを直接破棄できます。 ストレージ ノードは、REDO ログを受信するとそれを永続化し、ログを再生してデータ ページの古いバージョンを再利用する作業をバックグラウンドで非同期的に実行できます。ストレージ ノードは、フォアグラウンド/バックグラウンド作業を実行するためにリソースを柔軟に割り当てることができます。同時に、従来のデータベースと比較して、Aurora はバックグラウンドでチェックポイントを進める必要がありません (このアクションは多くの場合、フォアグラウンド リクエストに影響します)。独立したストレージ層は、データベース インスタンスにまったく影響を与えることなく、チェックポイントを継続的に進めます。さらに、進歩が速いほど、読み取り要求にとって有利になります。 ストレージ層でチェックポイントを継続的に進めることで、障害回復を高速化することもできます。通常、10w TPS の圧力下では、Aurora は 10 秒以内に回復を完了できます。障害回復プロセス中、 詳細には、Aurora の書き込みプロセスは次のようになります。 (1)ストレージノードはプライマリインスタンスからログを受信し、それをメモリキューに追加します。 (2)ストレージノードはログを保存し、マスターインスタンスに応答します。 (3)ログをシャードごとに分類し、欠落しているログがないか確認する。 (4)他のストレージノードと対話して、不足しているログを埋めます。 (5)ログを再生し、データページを生成します。 (6)データとログを定期的にS3にバックアップします。 (7)期限切れのデータページのバージョンを定期的にリサイクルする。 (8)データページを定期的にCRCチェックする。 上記のすべての操作のうち、(1)と(3)のみがシリアル同期であり、要求応答時間に直接影響します。その他は非同期操作です。 可用性を確保するために、Aurora 永続性では Quorum プロトコルが使用されます。レプリケーション セットに V ノードが含まれており、読み取り要求には Vr ノードが応答する必要があり、書き込み要求には Vw ノードが応答する必要があると仮定します。読み書きの一貫性を確保するために、クォーラムプロトコルには2つの主な条件があります: (1) Vr + Vw > V; (2)Vw>V/2。 マスター インスタンスからの各書き込みは、3 つの AZ にある 6 つのストレージ ノードに送信され、永続化が成功したことを示す 4 つの応答が受信されると、書き込みは成功したと見なされます。したがって、Aurora の Quorum プロトコルでは、V = 6、Vw = 4、Vr = 3 になります。もちろん、実際の読み取り要求では、3 つのストレージ ノードを実際にクエリする必要はありません。最新のデータを持つストレージ ノードに対してクエリを実行するだけで済みます。 クォーラム プロトコルにより、AZ レベルの障害とノード障害が同時に発生しない限り、データベースの可用性が保証されます。同時に、Aurora はシャード管理戦略を採用しています。各シャードは 10G で、6 つの 10G コピーが保護グループを形成します。各シャードは障害回復ユニットです。 10G/s ネットワークでは、シャードは 10 秒以内に復元できます。したがって、可用性が影響を受けるのは、10 秒以内に 2 つ以上のシャードが同時に失敗した場合のみであり、これはほぼ不可能です。 sysbench 書き込み専用テストでは、Aurora のスループットはミラーリングされた MySQL の 35 倍であり、各トランザクションのログ ボリュームはミラーリングされた MySQL の 7.7 分の 1 です。 一般的に、Aurora のストレージとコンピューティングの分離アーキテクチャには、次のような利点があります。(1) クラウドに展開すると、すべてのノード間で REDO データのみが送信されるため、ネットワークの負荷が軽減されます。 (2)フロントスレッドとバックスレッドが互いに干渉せず、バックグラウンドタスクを停止することなく非同期に実行できる。 (3)ストレージノードはAZ間で高可用性を実現します。 (4)リードレプリカとストレージノードは線形に拡張可能(上限あり) (5)障害回復時間が速い。 2.2.2 一貫性の保証MySQL から Aurora まで、スタンドアロン システムは分散システムへと進化しており、ストレージ ノードとデータベース インスタンス間でデータの一貫性を確保する必要があります。 Aurora は、分散一貫性を保証する従来の方法である 2PC プロトコルは複雑であり、耐障害性が非常に低いことを強調しています。 Aurora は、一貫性を確保するために、Quorum + Gossip プロトコルと LSN ベースのアルゴリズムに依存しています。 実のところ、Aurora が論文で 2PC について言及した理由がよくわかりません。 2PC は一貫性の問題を解決できますが、ほとんどの人はこのシナリオでは 2PC を使用しません。まず、データベースの状態を変更する操作であるトランザクションのコミット管理はマスターインスタンスによって制御され、システム全体の一貫性はマスターインスタンスのみによって完全に決定されます。ストレージ ノードは、マスター インスタンスに永続化の結果を通知するだけで済みます。これはスタンドアロン データベースと何ら変わりはなく、分散 2 フェーズ コミット プロトコルが必要な理由が明確ではありません。第二に、分散トランザクション送信と比較して、Aurora ストレージ ノードには、REDO 永続性に対する要件が単純です。その他のリソース要件 (ロック、トランザクション コンテキストの作成など) はなく、送信後にリソースを解放する必要もありません。 2PCを使用する必要は全くありません。 率直に言えば、2PC を使用するかどうかは、データベースの状態変更を誰が制御するかによって決まります。ストレージ ノードは永続的ですが、データベースの状態の変更はトランザクション マネージャーによって完全に制御されます。トランザクション プロセッサが異なるノードに分散されている場合 (これにより書き込みのスケーラビリティが大幅に向上します)、2 フェーズ コミットが必要であり、トランザクションをコミットするかロールバックするかを全員がネゴシエートします。 さらに興味深い比較は、ほとんどのシステムが Paxos/Raft などのコンセンサス アルゴリズムを使用し、高可用性を確保するために最下層に強力な一貫性のあるストレージ システムを実装する傾向があるのに対し (PolarDB、Spanner、OB など)、Aurora は単純な Quorum のみを使用し、コンピューティング層とストレージ層を組み合わせて高可用性と強力な一貫性を実現している点です。 上記は私の個人的な考えです。実際、トランザクション ロジックがスタンドアロン データベースとほぼ同じである Aurora のようなデータベースでは、通常の状況では一貫性の保証に違いはありません。主な違いは、データベース インスタンスがクラッシュして再起動すると、どのデータ ページの未完了トランザクションをコミットまたはロールバックするかを決定するために、クラッシュ前の未完了トランザクションが必要になることです。スタンドアロン データベースのリカバリは単一のログに基づいており、Aurora は複数のストレージ ノードから複数のログを取得する必要があるため、Aurora はどのログを再生し、どのログを切り捨てる必要があるかを決定する必要があります。 Aurora トランザクションはすべてマスター インスタンスによって開始されるため、マスター インスタンスは各 REDO ログにログ シーケンス番号 (LSN) を時系列順に割り当てることができます。一貫性を確保するために、Aurora は次の主要なログ ポイントを定義します。 ボリューム完了 LSN (VCL) は、ストレージ層に VCL より前のすべての完全なログがあることを意味します。障害回復中は、VCL より大きい LSN を持つすべてのログを破棄する必要があります。 一貫性ポイント LSN (CPL)、MySQL (InnoDB) トランザクションは複数の内部ミニトランザクションで構成され、各ミニトランザクションはアトミック操作の最小単位です。たとえば、B+ ツリーの分割では複数のページを変更する必要があり、これはアトミックである必要があり、アトミック REDO ログのセットによって表される必要があります。 CPL は、ミニトランザクションの最後のログの LSN です。ログを再生する場合、単位として CPL が必要です。トランザクションは通常、複数の CPL で構成されます。 ボリューム永続 LSN (VDL) は、すべての CPL 間で永続化された最大 LSN であり、データベースが一貫した状態にある最新の場所を表します。 VDL は VCL 以下である必要があります。ミニトランザクションのアトミック性を保証するために、VDL より大きいログもすべて破棄する必要があります。障害回復フェーズでは、データベース インスタンスはクォーラム読み取りを通じて最新の VDL を計算できます。 たとえば、VCL=1007 かつ CPLs={900, 1000, 1100} の場合、1000 以降のすべてのログは切り捨てられます。 3. ポラDBPolarDB は、Alibaba Cloud が立ち上げたクラウドネイティブ データベースです。どちらもコンピューティングとストレージが分離されたアーキテクチャを備えていますが、設計コンセプトは Aurora とは大きく異なります。 3.1 主な問題点PolarDB は、クラウドに移行する際には従来のデータベース アーキテクチャに多くの問題があることを、多くの公開共有や記事で強調してきました。以下に典型的なものをいくつか示します。 スケーラビリティ関連:
パフォーマンス関連:
コスト関連:
.... これらの問題は、本質的にはスタンドアロン データベースが直面する問題です。もちろん、データベースをクラウドに移行することは、これらの問題を解決する方法の 1 つです。ただし、スタンドアロン データベースをクラウド上に単純に展開する場合には、これらの問題は依然として存在します。 PolarDB は、この一連の問題を解決するために開発されました。 もちろん、Aurora でも上記の問題のほとんどを解決できると思いますが、PolarDB が選択した技術的なルートは Aurora とはまったく異なります。 3.2 コアテクノロジー3.2.1 ストレージとコンピューティングの分離アーキテクチャPolarDB はストレージとコンピューティングを分離するアーキテクチャも使用します。コンピューティング ノードは、SQL 解析、トランザクション処理などの保存を担当する MySQL インスタンスです。ストレージ ノードは、信頼性の高いデータ ストレージを担当する PolarDB のコア コンポーネントである PolarStore です。同じクラスター内の複数のコンピューティング ノード (1 つの読み取り/書き込みインスタンスと複数の読み取り専用インスタンス) がデータのコピーを共有します。このため、読み取り専用インスタンスの拡張速度とコストは非常に低くなります。フェイルオーバーが発生した場合に、読み取り専用インスタンスを読み取り/書き込みインスタンスに迅速に変換することで、データベース インスタンスの高可用性が確保されます。データの高可用性と一貫性は、PolarStore 内に実装された Parallel-Raft (アウトオブオーダーコミットをサポートし、raft よりも優れたパフォーマンスを発揮) によって保証されます。 コンピューティング ノードとストレージ ノードは高速ネットワークを使用して相互接続され、データは RDMA プロトコルを介して送信されるため、ネットワークがボトルネックになることはなくなります。 PolarDB の設計の焦点は、複数のデータベース インスタンス (同時マウントをサポート) に高性能で信頼性の高いデータ アクセス サービスを提供できる高性能分散ファイル システム PolarFS です。 3.2.2 ポラFSPolarFS は、多数の新しいハードウェアを活用した、極めて低いレイテンシと高い信頼性を備えた分散ファイルシステムです。外部インターフェースは libpfs であり、データベースはこのレイヤーを通じて PolarFS と対話します。 PolarFS ストレージは、ボリューム、チャンク、ブロックの 3 つのレベルに分けられます。ユーザーが PolarDB データベース インスタンスを作成すると、システムはそのインスタンスのボリュームを作成します。ボリュームのサイズは 10G から 100T の範囲になります。各ボリュームは複数のチャンクで構成されます。チャンクは、データの移動/高可用性/分散の最小単位であり、SSD ディスクに保存する必要があります。各チャンクのサイズは 10 GB で、他の分散ファイル システム (GFS は 64 MB) よりもはるかに大きくなります。これにより、ボリュームからチャンクへのマッピングのメタデータのサイズが削減され、管理とキャッシュが容易になります。欠点は、ホットスポットが分散しにくいことです。各チャンクには 3 つのコピーがあり、ParallelRaft プロトコルによって高可用性が保証されます。チャンクはさらに 163,840 個のブロックに分割され、各ブロックのサイズは 64 KB です。事前に割り当てられたスペースの最小単位です。 PolarFS の主なコンポーネントは次のとおりです。 libpfs: ユーザー スペース ファイル システム ライブラリは、コンピューティング ノードが基盤となるストレージにアクセスするための API インターフェイスです。 ポラスイッチ : コンピューティング ノードにデプロイされたデーモン。IO 要求を特定の ChunkServer リーダーへのアクセスに変換する役割を担います。 チャンクサーバー : チャンクを管理し、ブロック IO 要求を処理するために使用されます。ストレージ ノードは複数の ChunkServer を展開できます。各 ChunkServer は CPU コアにバインドされ、独立した NVMe SSD ディスクを管理します。 ChunkServer 間でリソースの競合は発生しません。アトミック性と耐久性を確保するために、チャンクの変更は最初に WAL に書き込まれます。 ChunkServer は、3D XPoint SSD と通常の NVMe SSD のハイブリッド WAL バッファを使用します。ログは、より高速な 3D XPoint SSD に優先的に保存されます。 極性Ctrl :システムのコントロール プレーンは、PolarFS クラスターの制御コアであり、ChunkServer の監視とバランス調整、さまざまなメタデータの維持、PolarSwitch メタデータ キャッシュの更新などを担当します。 PolarFS の書き込み操作プロセスは次のとおりです。
PolarFS は、ポーリングを通じてハードウェア デバイスの IO 完了イベントを監視する OS カーネル IO プロトコル スタックではなく、SPDK を使用して読み取りと書き込みを行い、DMA を介して SSD を直接操作します。 IO スレッドは CPU コアにバインドされており、データ構造を共有しないため、スレッド間で競合は発生しません。 OS IO プロトコル スタックをバイパスするこの方法により、高速デバイスの IO 処理パフォーマンスが大幅に向上します。同時に、RDMA ネットワークを通じてネットワーク IO パフォーマンスが大幅に向上します。これは基本的に、HDFS や Ceph などの分散ファイルシステムにおけるパフォーマンスの低下とレイテンシの増加の問題を解決します。 3.2.3 物理的な複製PolarDB の読み取り/書き込みインスタンスと読み取り専用インスタンスはデータのコピーを共有するため、一貫性を確保する必要があります。たとえば、読み取り/書き込みインスタンスに新しく書き込まれたページは、ダーティでなくても読み取り専用インスタンスに表示される必要があります。したがって、インスタンス間には特定の同期メカニズムが必要です (プライマリとバックアップ間の一貫性を確保するため)。 MySQL には、Binlog と InnoDB の Redo ログという 2 つの主要なログがあります。 Binlog はタプル レベルのデータ変更ログであり、MySQL の使いやすいストレージ エンジンとダウンストリームの消費間のデータ同期を容易にします。 REDO ログはファイルの物理ページの変更を記録し、トランザクションの ACID 特性をサポートするために InnoDB によって使用されます。 Binlog はタプル レベルであり、読み取り専用インスタンスの再生効率が低すぎます。再生プロセス中に、読み取り専用インスタンスはまったく必要のないページを要求しなければならない場合があります。プライマリ サーバーとバックアップ サーバー間のデータ同期には、明らかに Redo ログの方が適しています。さらに、Binlog レプリケーションは現在、テーブル レベルでの並列レプリケーションしか実行できませんが、物理レプリケーションはデータ ページ レベルでの同時レプリケーションを実行でき、より細かい粒度と高い並列効率を実現し、プライマリ サーバーとスタンバイ サーバー間の遅延をミリ秒レベルで維持できます。同時に、Binlog が不要な場合は、Binlog をオフにすることでもパフォーマンスが向上します。 すべてのノードは完全なデータと Redo ログのコピーを共有します。読み取り専用ノードを追加するのは非常に簡単で、プライマリノードとスタンバイノード間の同期にはメタデータのみが必要です。これにより、プライマリ ノードに障害が発生してフェイルオーバーしたときに、読み取り専用ノードに切り替える際の障害回復時間を 30 秒未満に短縮できます。 物理レプリケーションは、プライマリ ノードとスタンバイ ノード間の一貫性を確保するために使用されます。実際、矛盾が発生する可能性のあるさまざまなケースを解決するための非常に複雑なアルゴリズムと戦略が存在します。ここでは詳細には触れません。この記事を読む http:// mysql.taobao.org/monthl 2017/09/01/ より 4. ソクラテス4.1 主な問題点Socrates は、SQL Server をベースに Azure によって開発されたクラウド ネイティブ データベースです。コンピューティングとストレージを分離したアーキテクチャが依然として使用されています。 Aurora と比較すると、分離がより徹底されています。永続性と高可用性を分離するために、ページとログのストレージはストレージ層で分離されています。 Azure では、クラウド上のログ マスター スレーブ同期に基づく SQL DB (RDS) には、次のような大きな問題があると考えています。
これらの問題を解決するために、Microsoft は新しいタイプのクラウドネイティブ データベースを設計しました。コンピューティングとストレージ分離アーキテクチャをベースに、さらにストレージ層を分離し、ログをストレージ層から分離し、高性能なログサービスを別途設計しました。より高いレベルでは、耐久性(ログによって実装)と高可用性(ストレージ層によって実装)の分離を実現します。ほとんどのデータベースのこれら 2 つの機能は、ストレージ層によって提供されます。 ソクラテスはこれら2つの概念を分離する考えを持っています。 (1)不完全な永続性には高価な記憶装置が必要 (詳細は5.2.2を参照) 。 (2)高可用性には複数のコピーが必ずしも必要ではない (例えば、従来の3部のコピーについては、5.2.3を参照してください)。 これら 2 つの概念の要件を分離すると、Socrates では (1) より安価な高速ストレージとコンピューティング リソース、および (2) より少ないデータ コピーが必要になります。それで、彼は具体的にどのようにそれを実行したのでしょうか? 4.2 コアテクノロジーSocrates は、データベースのさまざまなコンポーネントを独立したサービスに分割し、さまざまな機能を提供します。また、非同期通信を使用して応答時間を短縮し、処理を高速化します。ソクラテスは一般的に4つの要素から構成される 4.2.1 計算ノード上記の 2 つのクラウドネイティブ データベースと同様に、Socrates コンピューティング レイヤーには、読み取り/書き込みインスタンスと複数の読み取り専用インスタンスが含まれています。読み取り/書き込みインスタンスに障害が発生した場合、読み取り専用インスタンスが新しい読み取り/書き込みインスタンスとして選択されます。 上記のアーキテクチャ図に示されているように、データベース インスタンスがキャッシュされていないページを読み取る必要がある場合、GetPage@LSN (実際には GetPage(PageID, LSN)) RPC を介して応答ページ サーバーからページを取得する必要があります。 PageID はページの一意の識別子であり、LSN は、この LSN が適用または更新されるページを返す必要があることをページ サーバーに通知します。 簡単な例:
Page X の最新バージョンを確実に読み取れるようにするには、特定の LSN が必要です。読み取り/書き込みインスタンスは、GetPage(X, X_LSN) 要求をページ サーバーに送信します。ページ サーバーは、X_LSN より小さいすべてのログが適用されるまで待機してから、ページ X を返します。読み取り/書き込みノードは、PageID -> Page LSN のマッピングを維持します。 読み取り/書き込みインスタンスと読み取り専用インスタンスの間には直接の相互作用はありません。読み取り専用ノードが受信したすべてのログは、XLOG によってブロードキャストされます。読み取り専用ノードは、受信後に再生する必要があります。再生プロセス中に対応するページがバッファ プールにない場合は、直接破棄されます。ただし、ページ サーバーからページを取得して再生するという別の戦略も提供されます。これにより、プライマリ サーバーとバックアップ サーバー間のキャッシュがほぼ一貫していることが保証され、フェイルオーバーが発生したときに安定性が向上します。 4.2.2 ログXLOG は Socrates ログ サービス レイヤーです。上の図は、XLOG サービスの内部実装を示しています。 まず、読み取り/書き込みノードは、書き込みのレイテンシを削減するために、高速な永続ストレージ サービスである Landing Zone (LZ) にログを直接書き込みます。これは、Azure Advanced Storage Service (XIO) によって実装されます。信頼性を確保するため、データは 3 つのコピーで保存されます。 同時に、読み取り/書き込みノードは XLOG プロセスに非同期的にログを書き込み、XLOG プロセスはログをページ サーバーおよび読み取り専用ノードに送信します。 LZ の目的は可用性ではなく永続性です。可用性は、ページ サーバーおよびコンピューティング ノードによって保証されます。 読み取りノードと書き込みノードは、LZ プロセスと XLOG プロセスにログを並列に書き込みます。そのため、ログは LZ 永続化の前に読み取り専用ノードに到達する可能性があり、障害発生時にデータの不整合が発生する可能性があります。このため、XLOG プロセスは LZ に永続化されたログのみをブロードキャストします。読み取り/書き込みノードは、まず XLOG プロセスの保留ブロックにログを書き込みます。ログが正常に保存されると、XLOG プロセスはそれを保留ブロックから LogBroker に移動し、ブロードキャスト配信します。 また、バックグラウンドでは、高速アクセスのために永続ログをローカル SSD キャッシュに移動するデステージング スレッドも実行されます。同時に、長期アーカイブ (LT) のために XStore に移動されます。 XStore は安価なストレージを使用するため、コストは低いですが速度は遅くなります。 LZ と LT はすべてのログを保存し、共同で永続性の目標を達成します。 Socrates は、ポイントインタイムリカバリと災害復旧のために、デフォルトで 30 日間ログレコードを保持します。明らかに、LZ に 30 日間のログを保存するのは非常にコストがかかりますが、XStore はこのタスクを完全に引き継ぐことができます。 LZは高速ですが高価であり、これは迅速なトランザクションの提出に適していますが、Xstoreは安価ですが、コスト削減に適しています。 4.2.3ページサーバーページサーバーは、主に3つのことを担当します
各ページサーバーは、保存するページに関連するログに注意する必要があります。ログに十分な注釈情報がログに追加され、ログレコードを適用する必要があるパーティションを示します。 XLOG Processはこの情報を使用して、ログのターゲットページを見つけます。 コンピューティングノードのようなページサーブは、RBPEX(Resilient Buffer Pool Extention)も使用します。ただし、コンピューティングノードキャッシングは、従来のデータベースキャッシング方法です。最高のパフォーマンスを実現するために、最もホットなページをキャッシュすることです。ページサーバーは、このパーティションのすべてのページをキャッシュします。これは、GetPageリクエストのパフォーマンスに非常に優しいものであり、一定の期間XSTOREダウンタイムを許容できます。 また、新しいページサーバーを起動することも非常に便利です。 RBPEXキャッシュは非同期に確立され、ページサーバーはリクエストとアプリケーションログを同時に受け入れることができます。各ページサーバーによって管理されるデータは大きくないため、回復は非常に高速です。データの1つのコピーとデータの1つのコピーの安価なストレージを通じて、高可用性が達成されます。 4.2.4 Xstoreデータベース内のすべてのデータはXstoreに保存され、ページサーバーはキャッシュに相当します。 Xstoreは、AZS全体で低コストの高度に複製されたストレージシステムであり、データをほとんど失うことはありません。 Xstoreは従来のデータベースのハードディスクに相当し、コンピューティングノードとページサーバーのメモリとSSDキャッシュ(RBPEX)は、従来のデータベースのメモリに相当します。 一般に、Xlog + Xstoreは永続性を達成し、コンピューティングノード +ページサーバーは高可用性を達成します。 5。コントラスト対照的に、オーロラはクラウドネイティブのデータベースの先駆者です。データベースのストレージおよびコンピューティング機能を分割し、データベースの機能の一部をストレージノード(主にREDO)に移動する最初のことであり、送信されるデータの量を大幅に減らしてパフォーマンスと効率を向上させます。ソクラテスはさらに一歩進んで、データベースコンポーネントをより詳細なコンポーネントに分解し、複数のサービスレイヤーを形成します。このアーキテクチャはより柔軟性があり、可用性とコストを制御するためのより細かい粒度があり、パフォーマンスと可用性を確保しながらシステムが大幅にコストを制御するのに役立ちます。 (これは、ソクラテスがオーロラよりも進歩していることを意味するものではありません。オーロラは近年、マルチマスター、Serveless、その他の分野の特定のブレークスルーを備えており、クラウドデータベースの分野の主要な位置にあります。) Polardbにはストレージとコンピューティングの分離アーキテクチャもあり、複数のノードがデータのコピーを共有していますが、その側面はオーロラ/ソクラテスとは異なります。ストレージレイヤーは、さまざまな新しいハードウェア機能を使用して、非常に信頼性の高い高性能分散ファイルシステムを確保し、複数のノードがマウントされます。 Polardbは、高速ネットワークとさまざまな新しいハードウェアの開発は、ネットワークがもはや主要なボトルネックではないことを意味するが、ボトルネックはソフトウェア自体にあることを意味すると考えています。したがって、新しいハードウェアに適応し、OSバイパスとゼロコピーテクノロジーを使用してCPU利用効率を向上させるために、多くの作業が行われました。 PolardBのようなアーキテクチャは、実際にはオープンソースコミュニティの新しいバージョンに従うのが簡単です。これは、コンピューティング層の機能的な変化が特に大きくなく、主に新しいストレージと物理的な複製に適応するためです。 これらの2つの方法のどれが優れているかについては、個人的な意見に依存します。 |
<<: メタバースは依然として人気があります。クラウド コンピューティングは何をもたらすのでしょうか?
>>: エッジクラウドと 5G のセキュリティ確保: 方法と重要性
待望のBandwagonHost香港VPSがついにリリースされます。HostCatはBandwago...
モノのインターネットの究極の目標は、あらゆるものを接続することです。しかし、現在のブロードバンドレベ...
Taobao の検索結果には、2 つの主な並べ替え方法が表示されます。1 つはすべての製品のデフォル...
[[387415]] 1) マイクロサービスアーキテクチャの人気の高まりマイクロサービス アーキテク...
有名人に説得されて何か買ったことはありますか?答えが「はい」であれば、それは普通のことです。私たちは...
オンラインで保険を販売することが、蛇年で最も人気のあるマーケティング手法の 1 つになりつつあること...
中小規模のウェブマスターとして、私たちは実際に次の 3 つの点を懸念しています。 1:ウェブサイトの...
高帯域幅のサーバーが必要ですか?トラフィックの多いサーバーですか? 無制限トラフィックサーバー? D...
アマゾンは、先進国のほとんどに商品を配送する世界的な電子商取引帝国を築き上げ、その過程で分散コンピュ...
ネットワークマーケティングの真髄を知るインターネットマーケティングに対する理解は人それぞれです。さま...
2020 年には、さらに多くの政府機関がクラウド コンピューティングの可能性を最大限に活用するでしょ...
A5 Webmaster Network(www.admin5.com)は4月25日、今月23日、か...
ケータリング O2O 起業には現実的な対応が求められます。最近、私はチームと協力して長沙でオフライン...
電子商取引のブランドは、電子商取引ウェブサイトの成功の鍵であり、ユーザーがウェブサイトで消費するかど...
人生日記には、喜び、悲しみ、怒り、幸せ、そして成長体験を記録できます。では、ウェブサイトのトラフィッ...