この記事はWeChatの公開アカウント「Sneak Forward」から転載したもので、著者はcscwです。この記事を転載する場合は、Qianxingqianxing の公開アカウントにご連絡ください。 序文前回のアーキテクチャ:分散理論CAPとBASE[1]の記事では、分散システムに存在する問題と一般的な理論的解決策について学びましたが、具体的な実装プロトコルや解決策は何でしょうか?
1 分散一貫性分散一貫性とは何ですか?分散一貫性は、実際には複数のサービス間のデータコピーの一貫性を解決する傾向があり、リレーショナルデータベースの一貫性(データ制約)とは異なります。 2 分散コンセンサスアルゴリズムPaoxsアルゴリズム
ラフトアルゴリズム
選挙フェーズ 最初は、どのサーバーもフォロワーです。カウントダウン機能が組み込まれています。カウントダウンが終了すると、候補者となり、他のフォロワーに自分自身を選出するようリクエストを送信します。 現時点では3つの州がある A: フォロワーの半数以上がフォローし、新しいリーダーになる B: フォロワーの半数以上を占める競争相手がいる場合は、選挙を諦めてその競争相手のフォロワーになる C: 競争相手はいますが、全員が互角です。候補者は次の選挙サイクルで再選される予定。この時点でカウントダウンも組み込まれています。カウントダウンを最初に終えた人が、フォロワーの半分を最初に獲得したリーダーになります (注: 前のラウンドで他の人のフォロワーが再び選挙に立候補することはできません) ログ複製フェーズ 1: リーダーが選出され、クライアントがログを追加する要求を送信します。たとえば、ログは「hello」です。 2: リーダーはフォロワーに指示に従い、新しいログの内容をそれぞれのログに追加することを要求する 3: ほとんどのフォロワーサーバーは、ログをディスクファイルに書き込んだ後、追加が成功したことを確認し、コミットOKを発行します。 4: 次のハートビートで、リーダーはすべてのフォロワーにコミットされた項目を更新するように通知します。 このプロセス中にネットワーク パーティションまたはネットワーク通信障害が発生した場合。これにより、リーダーはほとんどのフォロワーにアクセスできなくなり、フォロワーは外部サービスを提供するために新しいリーダーを再選出します。ネットワークが復元されると、古いリーダーは、フォロワーの大多数を持つ新しいリーダーのフォロワーになります。失敗時のコミットロールバック Zabアルゴリズムゼクシド プロトコルのトランザクション番号 Zxid は 64 ビットの数値になるように設計されています。 下位 32 ビットは単純な単調増加カウンターです。クライアントからのトランザクション要求ごとに、カウンターは 1 ずつ増加します。 上位 32 ビットはリーダー サイクルのエポック番号を表します。新しいリーダー サーバーが選出されるたびに、そのローカル ログ内の最大トランザクション ZXID がリーダー サーバーから取得され、そこからエポック値が読み取られ、1 が加算されて新しいエポックとして使用されます。下位32ビットカウンタは0から再びカウントを開始する クラッシュリカバリモード(選択) クラスターが初期化されるか、リーダーが接続を失うと、ノード (任意のノード) がリーダー選出を開始し、クラスター内の他のノードがリーダー選出を開始したノードに投票します。 ノード B は A がリーダーになれると判断し、ノード B はノード A に投票します。この判断の根拠は次のとおりです: 選挙エポック (A) > 選挙エポック (B) || zxid(A) > zxid(B) || sid(A) > sid(B) です。そしてBに投票する投票を更新してください sidは手動で設定されるサービスIDです メッセージブロードキャストモード
詳細リーダーはクライアント要求を受信すると、要求をトランザクションにカプセル化し、トランザクション ID (ZXID) と呼ばれるグローバルに増加する一意の ID をトランザクションに割り当てます。 ZAB プロトコルではトランザクションの順序を保証する必要があるため、各トランザクションは ZXID に従ってソートされてから処理される必要があります。 リーダーとフォロワーの間には、それらを分離して同期ブロックを解除するためのメッセージ キューもあります。 Zookeeper クラスター内のすべてのプロセスが適切に実行されるようにするために、書き込み要求を受け入れることができるのはリーダー サーバーのみです。フォロワー サーバーがクライアントからリクエストを受信した場合でも、処理のためにリーダー サーバーに転送されます。 3 分散トランザクションの一貫性分散一貫性と分散トランザクション一貫性のため。私は次のように区別することを好みます: A-分散一貫性は、データが複数のサービスに一貫した状態で分散されている(複数のコピーが一貫している)という問題を解決します。 B-分散トランザクションの一貫性は、リレーショナル データベースの一貫性に似ていますが、分散サービス内のデータ間の関係を制約することです (たとえば、サービス A のデータ a とサービス B のデータ b の状態は、固定されたマッピング関係を維持する必要があります)。 分散コンセンサスアルゴリズムと分散一貫性の違いコンセンサスアルゴリズムは分散一貫性を解決するように設計されていますが、分散トランザクション一貫性を解決するのには適していません(解決できますが、適していません) 4 分散トランザクション一貫性の実装(XAモードとATモード)XA モードは、事前にコミットされたデータ モードです (事前にコミットされたデータは他のトランザクションからアクセスできません)。障害が発生した場合、事前にコミットされたデータはロールバックされます。 AT モードのデータはコミットされていることが確認されていますが、他のトランザクションによるデータへのアクセスを防ぐロックが存在します。障害が発生した場合は、逆操作を使用してデータを修復します。 XA モードと比較して、AT モードは分散トランザクションを解決し、ブロック待機時間を短縮するのに適しています。 2 フェーズ コミット (強力な一貫性) (XA モード)2 フェーズ コミット プロトコル (2PC) は、一般的に使用される分散トランザクション ソリューションであり、トランザクション送信プロセスを準備フェーズと送信フェーズの 2 つのフェーズに分割します。 処理フローフェーズ1: 準備 コーディネーターは、トランザクションの内容をすべての参加者に送信し、トランザクションを送信できるかどうかを尋ね、すべての参加者からの応答を待ちます。 各参加者はトランザクション操作を実行し、元に戻す情報とやり直し情報をトランザクション ログに記録します (ただし、トランザクションはコミットしません)。 参加者が正常に実行した場合、コーディネーターに「はい」というフィードバックが返され、アクションを送信できることを示します。アクションが失敗した場合、コーディネータに「いいえ」というフィードバックが送信され、アクションを送信できないことが示されます。 フェーズ2: 提出フェーズ コーディネータが参加者から失敗メッセージまたはタイムアウトを受信した場合、各参加者にロールバックメッセージを直接送信します。それ以外の場合はコミット メッセージを送信します。 参加者はコーディネータの指示に従ってコミットまたはロールバック操作を実行し、トランザクション処理プロセスで使用されるすべてのロック リソースを解放します。 2PCソリューションの欠点:パフォーマンスの問題: トランザクションの送信フェーズ中、すべての参加者は同期ブロック状態になり、システム リソースを占有し、パフォーマンスのボトルネックが発生しやすくなります。 信頼性の問題: コーディネータに単一障害点がある場合、コーディネータに障害が発生すると、参加者はロックされたままになります。 データ一貫性の問題: コミット フェーズ中にローカル ネットワークの問題が発生すると、一部のトランザクション参加者はコミット メッセージを受信しますが、他の参加者は受信しないため、ノード間でデータの不整合が発生します。 3 フェーズ コミット (強力な一貫性) (XA モード)3 フェーズ コミット プロトコルは、2 フェーズ コミット プロトコルの改良版です。 2 フェーズ コミット プロトコルとは異なり、タイムアウト メカニズムが導入されています。同時に、コーディネーターと参加者の両方にタイムアウトメカニズムを導入する 処理フローフェーズ 1: canCommit コーディネーターは参加者にコミット要求を送信します。参加者がコミットできる場合は、 yes 応答 (参加者はトランザクション操作を実行しません) を返し、そうでない場合は no 応答を返します。 コーディネータは、トランザクションの内容を含むcanCommitリクエストをすべての参加者に送信し、トランザクションがコミットできるかどうかを尋ね、すべての参加者からの応答を待ちます。 canCommit リクエストを受信した後、参加者はトランザクション操作を実行できると判断した場合、yes で応答し、準備完了状態になります。それ以外の場合は、no で応答します。 フェーズ2: 事前コミット
フェーズ3: コミットする
長所と短所利点: 第 2 フェーズでは、コーディネーターまたは参加者が待機タイムアウト後にトランザクションを中断します。 利点: 第 3 フェーズでは、コーディネーターの単一ポイント問題が回避されます。コーディネーターに問題がある場合、参加者はトランザクションを送信し続ける(これも欠点です) デメリット: データの不整合の問題が依然として存在します。第 3 段階では、コーディネーターがトランザクションの中断を要求し、コーディネーターが参加者と正常に通信できない場合、参加者はトランザクションを送信し続け、データの不整合が発生します。 柔軟なトランザクションTCC(サービスレベルでのXAモードの実装)試行フェーズ: リソースをチェックして予約する必要があります。お金を引き出すシナリオでは、Try が行う必要があるのは、アカウントの利用可能残高が十分かどうかを確認し、アカウントの資金を凍結することです。 Try メソッドが実行された後、口座残高は依然として 100 元ですが、そのうち 30 元は凍結され、他の取引に使用できなくなります。 確認段階: 試行段階で凍結された資金を差し引きます。 Confirmメソッドが実行されると、第1段階で口座に凍結されていた30元が差し引かれ、口座Aの残高は70元になります。 キャンセル段階: ロールバックする場合は、キャンセル方法で、Try の最初の段階で凍結された 30 元を解放する必要があります。これにより、アカウント残高が初期状態に戻り、100 元が完全に利用可能になります。 AT モード (Ali 分散フレームワーク seata)フェーズ 1: 提出
2フェーズコミットまたはロールバック
イベント通知(トランザクションメッセージ)同期通知
非同期コールバック通知同期通知と比較すると、その処理インターフェースは非同期コールバックです。したがって、タイムアウト処理とタイムアウト戻りの問題を回避できます。 インターフェースがコールバック中にエラーを報告することを考慮すると、再試行コールバックを開始する必要があり、再試行メカニズムを追加する必要があります。 メッセージキュー
トランザクションステータステーブル + メッセージキューソリューション
テキスト内の誤りを指摘することを歓迎します 参考文献
参照 [1] アーキテクチャ:分散理論CAP、BASE: https://juejin.cn/post/6948809101392478245 [2] 分散理論1:Paxosアルゴリズムの一般的な理解: https://www.cnblogs.com/esingchan/p/3917718.html [3] 分散トランザクション一貫性ソリューション: https://www.cnblogs.com/williamjie/p/11200885.html [4]2PCと3PC: https://blog.csdn.net/skyie53101517/article/details/80741868 [5] 「分散トランザクション」がまだ理解できない?この記事ではそれについて説明します。 https://www.cnblogs.com/zjfjava/p/10425335.html [6] 分散トランザクション - メッセージ最終一貫性ソリューション: https://www.jianshu.com/p/04bad986a4a2 [7] 分散トランザクション?いいえ、最終的な一貫性: https://zhuanlan.zhihu.com/p/25933039 [8] 分散トランザクションの4つのモード: https://zhuanlan.zhihu.com/p/141645172 [9] 分散トランザクションシート(II)AT、TCC、Sagaとは何かを理解する: https://www.jianshu.com/p/f2caa8737b7b |
<<: 分散型グローバル一意 ID スキームはそんなにたくさんあるのでしょうか?
>>: JVM のメモリ配分と機能を 1 つの記事で理解する
Godaddy では、Godaddy のエコノミー モデル仮想ホストを 1 年間 + 無料ドメイン名...
ovhはどうですか?オーストラリアはどうですか?シドニーはどうですか? OVH の主要 10 データ...
なぜここでSEOの経験共有について触れているのでしょうか。なぜSEOの原則や基礎知識について触れてい...
Dreamhost、この古いホスティングブランドは現在、新年のフラッシュセールを開催しています。ウェ...
[[385509]]詳細については、以下をご覧ください。 51CTOとHuaweiが共同で構築したH...
Kubernetes (K8s) は、コンテナのオーケストレーションと管理の分野で貴重な存在となって...
ほぼすべての企業が自社のウェブサイトを持っています。インターネットマーケティングが推奨されるこの世界...
序文前述のように、クラウド コンピューティングの 10 年以上にわたる発展は、インターネット業界全体...
「ウェブサイト分析ツールを使用しているが、取得したデータは何を表しているのか?このデータをどのように...
動画ウェブサイト業界は、最終的には数千億ドルの市場価値を持つ企業を生み出すことになるでしょう。 56...
昨日、cloudcone からプロモーション メールを受け取りました。このメールには、米国西海岸のロ...
インターネット上の検索エンジンのカバー率と地位はますます高くなっています。SEOトレンドは本格化して...
SEO 最適化には多くの最適化テクニックがあります。これらのテクニックを習得し、それを実践すれば、ウ...
タクシーを呼ぶためのよりクールな方法「タクシーが来ないまま、道端で長い間手を振っているより、別の方法...
現在、ビッグデータの急速な発展は、世界中のさまざまな産業の情報化と高度化を推進しています。クラウドコ...