1. 分散コンセンサスアルゴリズム1 分散コンセンサスをどう理解するか?複数の参加者が 1 つの事柄について完全な合意に達します。つまり、1 つの事柄、1 つの結論です。 合意によって得られた結論は覆すことはできない。 2. 分散コンセンサスアルゴリズムとは何ですか?
2. いかだの紹介1. 特徴: 強いリーダー
さらに、リーダーとしては常に心拍を維持する必要があります。 2 レプリケーションステートマシン無限に増加するシーケンス a[1, 2, 3…] について、任意の整数 i に対して a[i] の値が分散一貫性を満たす場合、システムは一貫性のある状態マシンの要件を満たします。 実際のシステムでは、ほぼすべて、一定の操作ストリームが実行されるため、単一の値に同意するだけでは不十分です。実際のシステムですべてのレプリカの一貫性を確保するために、操作は通常、書き込み先行ログ (WAL) に変換されます。次に、システム内のすべてのレプリカを WAL と整合させて、各レプリカが WAL 内の操作を順番に実行し、最終状態の整合性が確保されるようにします。
Raft の 3 つの基本概念Raftノードの3つの役割/ステータス
3種類のメッセージ
用語 論理クロック
4. ラフトの機能分解リーダー選挙 タイムアウト ドライバー: ハートビート / 選挙タイムアウト ランダムタイムアウト: 選挙の衝突により票が分割される可能性を減らす 選挙プロセス: フォロワー --> 候補者 (選挙タイムアウト トリガー)
選挙活動:
新しいリーダー選出原則(最大服従原則):
安全性: 1 期につき、最大 1 人のリーダーが選出されます。リーダーがいない場合は、次の任期で別のリーダーが選出されます。 ラフト選挙の成功率に影響するいくつかの時間パラメータ:
メイントリガー時間をランダムに選択: ランダム (ET、2ET) ログのレプリケーション ラフトログフォーマット:
ログレプリケーションの重要なポイント:
フォロワーログの有効性チェック:
フォロワーのログ回復:
コミットインデックスの前進 コミットインデックス (TermId、LogIndex):
CommitIndex の進歩:
エントリ追加 RPC
要約: 今、Raft で何ができるでしょうか?
3 ソファラフト純粋な Java ラフト アルゴリズム実装ライブラリです。すべての関数が Java で書き直され、いくつかの改善と最適化が加えられています。 1. SOFAJRaftの全体機能機能サポート リーダー選挙: リーダー選挙。 ログのレプリケーションとリカバリ: ログのレプリケーションとログのリカバリ。ログリカバリは、コミットされたデータが失われないようにするためのものです。ログのリカバリには 2 つの側面があります。
スナップショットとログの圧縮: 定期的にスナップショットを生成してログの圧縮を実装し、起動と回復を高速化し、InstallSnapshot を使用してデータをフォロワーにコピーします。 メンバーシップの変更: ノードの追加、ノードの削除、ノードの置き換えなど、クラスターのオンライン構成変更。 リーダーの移行: 再起動メンテナンス、リーダーの負荷分散などのためにリーダーを積極的に変更します。 対称ネットワーク パーティション許容度: 対称ネットワーク パーティション許容度。 事前投票: 上の図に示すように、S1 が現在のリーダーです。ネットワーク分割により、S2 はローカル項を継続的に増加させます。ネットワークが復旧した後に S2 が選挙を開始するのを防ぐために、誠実に作業しているリーダーが退任し、クラスター全体が選挙を再開することになるため、要求投票の前に事前投票 (currentTerm + 1、lastLogIndex、lastLogTerm) が実行されます。過半数が成功した場合にのみ、実際のリクエスト投票を開始するために状態が候補に変更されます。そのため、分割後のノードでは事前投票が成功せず、クラスターは一定期間正常にサービスを提供できなくなります。 非対称ネットワーク パーティション許容度: 非対称ネットワーク パーティション許容度。 上の図に示すように、S1 が現在のリーダーであり、S2 はリーダー選出をトリガーするためにタイムアウトし続け、S3 は現在のリースを中断するために期間を増やし、それによってリーダーの更新を拒否します。このとき、トリックチェックを追加できます。各フォロワーは、リーダーのデータ更新 (ハートビートを含む) を受信した時刻を記録するためにタイムスタンプを保持します。選挙タイムアウト後にのみ、リクエスト投票リクエストを受け入れることができます。 フォールト トレランス: フォールト トレランスとは、少数の障害がシステム全体の可用性に影響を与えないことを意味します。
定足数ピアがダウンした場合の回避策: 大多数がダウンすると、グループ全体が使用できなくなります。安全なアプローチは、大多数のノードが回復するまで待つことです。この方法でのみデータのセキュリティが保証されます。ただし、ビジネスが可用性をより追求し、データの一貫性を放棄する場合は、手動の reset_peers コマンドを使用してクラスター全体をすばやく再構築し、クラスターの可用性を回復できます。 メトリクス: SOFAJRaft には、豊富なパフォーマンス統計インジケータを備えた、メトリクス ライブラリに基づくパフォーマンス インジケータ統計が組み込まれています。 Jepsen: 単体テストに加えて、SOFAJRaft は分散検証およびフォールト インジェクション テスト フレームワークである jepsen を使用して、検証済みのさまざまな状況をシミュレートします。 ランダムなパーティション分割、2つのネットワーク パーティション、1つは大きく、もう1つは小さい
パフォーマンスの最適化 バッチ: SOFAJRaftのリンク全体がバッチ化され、バッチ消費にはディスラプターのMPSCモデルが使用されます。これには以下が含まれますが、これらに限定されません。
レプリケーション パイプライン: パイプライン レプリケーションでは、リーダー ノードとフォロワー ノード間のログ同期はシリアル バッチ モードで行われます。各バッチが送信された後、次のバッチの送信を続行する前にバッチ同期が完了するのを待つ必要があり (ピンポン)、これにより長い遅延が発生します。これは、リーダー ノードとフォロワー ノード間のパイプラインを複製することで改善でき、更新の待ち時間を効果的に短縮し、スループットを向上させることができます。 ログを並列に追加: リーダーはログ エントリを保持し、フォロワーにログ エントリを並列に送信します。 完全な同時レプリケーション: リーダーは、すべてのフォロワーにログを完全に並列に送信します。 非同期: Jraft では、リンク全体にブロッキングがほとんどなく、完全に非同期であり、コールバック プログラミング モデルです。 ReadIndex: raft ログを使用して raft 読み取りのパフォーマンスを最適化します。読み取りが実行されるたびに、commitIndex のみが記録され、その後、リーダー ID を確認するためにすべてのピアのハートビートが送信されます。リーダー ID が正常に確認された場合、適用されたインデックス >= commitIndex のときにクライアント読み取りを返すことができます。 ReadIndex に基づいて、線形一貫性読み取りを非常に便利に提供できます。ただし、commitIndex はリーダーから取得する必要があり、これにより RPC の追加ラウンドが追加されます。 リース読み取り: リーダー ID はリースによって保証されるため、readIndex がハートビートごとにリーダー ID を確認する必要がなくなり、パフォーマンスが向上します。ただし、クロックを通じてリースを維持することは絶対に安全ではありません (readIndex のパフォーマンスが十分に優れているため、jraft のデフォルト構成は readIndex です)。 2 SOFAJラフトデザインSOFAJRaft - ラフトノード ノード: Raft グループ内のノード。基盤となるすべてのサービスを接続してカプセル化します。これはユーザーに表示される主要なサービス インターフェイスであり、特に apply(task) は、ラフト グループで構成されるレプリケーション ステート マシン クラスターのビジネス ステート マシンに新しいタスクを送信するために使用されます。 ストレージ:
ステートマシン:
コピー:
RPC モジュールは、ノード間のネットワーク通信に使用されます。
KV ストア: SOFAJRaft は単なるライブラリです。 KV ストアは、SOFAJRaft の典型的なアプリケーション シナリオです。 SOFAJRaft をより良く理解するために図にしました。 SOFAJRaft - ラフトグループ SOFAJRaft - マルチラフトグループ 3 SOFAJRaft実装の詳細効率的な線形化可能な読み取り 線形化可能な読み取りとは何ですか? 線形一貫性のある読み取りの簡単な例としては、時刻 t1 に値を書き込むと、t1 以降はこの値を確実に読み取ることができ、t1 より前の古い値を読み取ることは不可能である、というものがあります (Java の volatile キーワードについて考えてみましょう。簡単に言えば、線形一貫性のある読み取りとは、分散システムで volatile セマンティクスを実装することです)。 上の図では、クライアント A、B、C、D はすべて線形一貫性読み取りに準拠しています。その中で、D は古臭い読み物のように見えますが、そうではありません。 D の要求は 3 つの段階にまたがり、読み取りはいつでも発生する可能性があるため、読み取り 1 または 2 で問題ありません。 重要: 以下の説明は、ビジネス ステート マシンの実装が線形一貫性を満たす必要があるという大前提に基づいています。これは、Java の volatile のセマンティクスも備えている必要があることを意味します。 1) もっと直接的に、現在のリーダーノードから直接読み取ることは可能ですか? 現在のリーダーが本当にリーダーであるかどうか (ネットワーク パーティション) を判断するにはどうすればよいでしょうか? 2) 最も単純な実装方法: 読み取り要求はラフトプロトコルを経由する 何か質問はありますか?
3) ReadIndex 読み取り これは、raft 論文で言及されている最適化ソリューションです。具体的には:
ReadIndex を使用すると、フォロワーに対して線形化可能な読み取りを提供することも簡単になります。
ReadIndexの概要:
4)リース読み取り Lease read は ReadIndex に似ていますが、ログだけでなくネットワークのやり取りも排除することでさらに一歩進んでいます。読み取りスループットを大幅に向上し、レイテンシを大幅に削減できます。 基本的な考え方は、リーダーが選出タイムアウトよりも小さい(できれば 1 桁小さい)リースを取得することです。リース期間中は選出が行われないため、リーダーが変更されることはなく、ReadIndex の 2 番目のステップをスキップしてレイテンシを削減できます。ご覧のとおり、Lease Read の正確さは時間に関連しているため、時間の実装が重要です。ドリフトが深刻な場合、このメカニズムに問題が生じます。 実装:
5) さらに一歩先へ: 待機無料 これまでのところ、lease は ReadIndex の 2 番目のステップ (ハートビート) を省略しています。実際、さらに一歩進んで、3 番目のステップを省略することもできます。 前回の実装の本質について考えてみましょう。現在のノードのステート マシンは、「読み取り」の瞬間に同じ状態または更新された状態に到達します。 さらに厳しい制約は、現時点では、現在のノードのステート マシンが最新であるということです。 問題は、リーダー ノードのステート マシンが最新であることを保証できるかどうかです。
概要: Wait Free メカニズムにより、読み取り待ち時間が最小限に抑えられます。 SOFAJRaft はまだ待機なしの最適化を実装していませんが、すでに計画に含まれています。 SOFAJRaft で線形化可能な読み取り要求を開始します。
SOFAJRaft の 4 つのアプリケーション シナリオ1 SOFAJRaft で何ができるのか?
2 ユーザーケース
3 簡単な練習: SOFAJRaft をベースにしたシンプルな KV ストアを設計する今のところ、ライブラリとしての SOFAJRaft に特別な点は見当たりません。zk や etcd は SOFAJRaft でできることはできるようですが、SOFAJRaft は車輪の再発明なのでしょうか? SOFAJRaft が優れた想像力と拡張性を備えていることを示すために、以下では SOFAJRaft に基づいたより複雑な実践を紹介します。 4 より複雑な実践:SOFAJRaftに基づくRhea KVの設計機能名詞
特徴
|
<<: 2021年百度インテリジェントコンピューティングサミット開催、百度AIネイティブクラウドがアップグレードされ業界のイノベーションを加速
>>: Teams: 接続性、相互通信、コラボレーションが新しいハイブリッド オフィス モデルをリード
上司は、会社の全体的な運営と方向性を調整する高位の役職です。最近では、オフラインでのマーケティングだ...
anynode、私はすでに知っていますが、ラスベガスのデータセンターの VPS ではブラックフライデ...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス個人ウェブマスターは、長...
新しいトップレベルドメイン: インターネットの巨人たちの饗宴インターネットネーム・番号割当機関(IC...
クラウドコンピューティングは急速に発展しています。 PaaSはクラウドコンピューティング業界の重要な...
ご存知のとおり、運用の最適化のプロセスにおいて、特に百度の場合、百度でのウェブサイトの重みをいかに改...
今は情報爆発の時代であり、コンテンツこそが王様であるというのは不変のテーマです。 Weibo マーケ...
[51CTO.com クイック翻訳] Kubespray は、Kubernetes クラスターの展開...
BOC Securitiesのプライベートクラウドプラットフォームが正式に運用を開始し、BOC Se...
Azure Stack、AWS Outposts、Google Anthos は、現代のハイブリッド...
インターネットの普及に伴い、大手企業ではインターネットマーケティングの重要性がますます重視されるよう...
百度の公式ウェブマスタープラットフォームでLeeが外部リンクの不正行為と無効な外部リンクについての記...
spinserversは今月、新しいサーバープロモーションを発表しました。このプロモーションの米国独...
「コンテンツは王、外部リンクは皇帝」ということわざにあるように、高品質のコンテンツと外部リンクがあれ...
インターネット情報化時代において、オンライン マーケティングは社会の変化に適応した結果であり、ネット...