分散理論を説明するのに太極拳を使うのはとても快適です!

分散理論を説明するのに太極拳を使うのはとても快適です!

[[361252]]

『天剣龍驤』では、趙敏公主が専門家集団を率いて武当山を包囲しました。武当のリーダーである張三鋒は待ち伏せされ、趙敏の部下に対処するために張無忌に一連の武術を伝えました。この一連の武術は太極拳です。

張三鋒:無極、私が教えたことをどれだけ覚えているか?

張無忌:全部忘れちゃったよ!

張三鋒: 素晴らしい。あとは玄明長老2人を倒すことを忘れないでくれ。

[[361253]]

前回の記事では三国志を例に挙げて、流通におけるビザンチン将軍問題について語られており、非常に興味深い内容でした。今回は、天剣と龍剣の太極拳を例に、残りの3つの理論についてお話します。

  • CAP理論
  • ACID理論
  • ベース理論

太極拳の真髄:柔よく剛を制す、剛柔を共に進める、少しの力で大きな物を動かす、動きに勝るものはない。

私は CAP 理論を太極、ACID 理論を陽またはハード、そして BASE 理論を陰またはソフトと呼んでいます。 ACID理論は一貫性を追求し、BASE理論はもともと柔軟なトランザクションと呼ばれ、可用性を追求します。なぜ張無忌はすべてを忘れて、それでも玄明の二人の長老を倒したのでしょうか?太極拳の真髄はボクシングの精神であり、動きに勝るものはないからです。

1. 太極拳の二つの側面

CAP 理論は、分散システムの特性を高度に抽象化した説明であり、次の 3 つの主要な指標に分かれています。

  • 一貫性
  • 可用性
  • パーティション耐性

分散システムにおける一貫性とは、どのポイントにアクセスしたかに関係なく、クライアントによるすべての読み取り操作で、同じ最新の書き込みデータが読み取られるか、読み取りに失敗するかのいずれかであると理解できます。これは非常に厳格です。この硬直性が悪いとは言えません。多くのシナリオでは、確かに高い一貫性を確保する必要があります。

一貫性を理解しやすくするために、『天剣龍戟』の物語を例に挙げましょう。6 つの大宗派が光明頂を包囲しました。

[[361254]]

峨眉宗の米覚法師は指導者として、6つの大宗派を率いて光明頂を包囲しました。当初の攻撃戦略は北から攻撃することだった。尼僧の美傅は北から攻撃するのは得策ではないと気づき、武当山と少林寺に鳩を派遣して南から攻撃するよう命じた。しかし、少林寺の鳩は、明教の青功の達人である緑翼の蝙蝠王、魏一霄に阻止されました。最終結果は、少林寺が北から攻撃し、武当寺が南から攻撃するというものでした。これはめちゃくちゃじゃないですか?次の図に示すように:

ブライトサミットの包囲

1.1 流通におけるCAPの理解

分散システムにおける CAP をどのように理解すればよいでしょうか?理解を助けるための例を以下に示します。

初期環境: クライアントはノード 1 と 2 を照会または更新し、両方のノードに格納されている値 A は 1 です。


初期環境

クライアントはノード 1 の A の値を更新し、A = 5 に設定します。

クライアントがノード1を更新

ノード 1 が A の値を 5 に更新すると、クライアントに更新成功を返します。

ノード1は更新成功を返す

クライアントはノード 2 にアクセスして A の値を要求し、結果は A = 1 になります。これは、ノード 1 に格納されている A の値と一致しません。

ノード2へのクライアントアクセス

では、両方のノードの値が A = 5 であることをどうやって確認するのでしょうか?クライアントがノード 1 を更新した後、更新が成功したことをクライアントに通知するために、ノード 2 も更新する必要があります。

ノード2も更新する必要がある

両方のノードが正常に更新されると、クライアントはどちらのノードにアクセスしても A = 5 を取得します。これを一貫性と呼びます。

両方のノードが更新された後

一貫性はデータの正確性を重視し、ノード内のデータが読み取られるたびに、最新の書き込まれたデータになります。私はこれをギャングと呼んでいます。

ただし、実稼働クラスター環境でパーティション障害が発生した場合 (ノードの接続喪失、ノードの応答障害、ノードのデータ書き込み障害)、クライアントがノードを照会したときにエラー情報をクライアントに返すことができません。たとえば、登録センターなどのビジネス クラスター内の一部の主要システムは、ノードが切断されたという理由だけで最新データへの応答を停止することはできません。そうなると、関係事業者は正しい登録情報を入手できなくなり、システムが麻痺してしまいます。

可用性はデータの正確性を犠牲にして重要となり、各ノードはローカル データを使用してクライアントの要求に応答します。さらに、ノードが利用できない場合は、高速障害戦略を使用して、少なくともサービスが長時間応答しなくなるのを防ぐことができます。可用性は、サービスが利用可能であることを強調しますが、データが正しいことを保証するものではありません。これを私は柔らかさと呼びます。

次の図に示すように、ノード 1 とノード 2 によってクライアントに返される値はそれぞれ A = 5 と A = 1 です。これは、ノード 1 とノード 2 がデータの一貫性を保証するのではなく、ノードの可用性を考慮していることを意味します。

データの不整合

パーティション耐性とは、任意の数のメッセージが失われたり、ノード間の遅延が長くなったりしても、システムが動作し続けることを意味します。分散システムは、内部でどのようなデータ同期の問題が発生しても実行を継続することをクライアントに伝えます。クラスター ヒープ パーティション障害のフォールト トレランスに重点が置かれています。

1.2 CAP 三角形

では、これら 3 つの指標の関係は何でしょうか?これはよく耳にするCAP理論です。 C は一貫性、A は可用性、P はパーティション許容度を表します。

分散システムの場合、3 つの CAP インジケーターのうち 2 つだけを選択できます。

CA: 一貫性と可用性を確保します。分散システムが正常に動作している場合 (ほとんどの場合、この状態です)、P は必要ないため、C と A を同時に保証できます。 P はパーティション障害が発生した場合にのみ必要であり、この時点での選択肢は C と A の間のみです。一般的なアプリケーション: 単一のマシンにデプロイされた MySQL。

CP: データの一貫性とパーティション耐性を確保します。たとえば、構成情報によって、各ノードが最新かつ正しいデータを保存することを保証する必要があります。たとえば、Raft の強力な一貫性システムでは、読み取りおよび書き込み操作を実行できなくなります。代表的なアプリケーション: Etcd、Consul、Hbase。

AP: 分散システムの可用性とパーティション耐性を保証します。ユーザーがシステムにアクセスすると、応答エラーなしで対応するデータを取得できますが、古いデータが読み取られる可能性があります。代表的なアプリケーション: Cassandra と DynamoDB。

2. 太極拳の厳しさ

2.1 ACIDの硬直性

私が初めて ACID について知ったのは、SQL データベースを勉強していたときです。ACID とは、原子性、一貫性、独立性、永続性を意味します。

これら 4 つのプロパティは、単一の作業単位に対して実行される一連の操作であるトランザクションに固有のものです。クエリ、データの変更、データ定義の変更など。

トランザクションはデータベースだけでなく、ビジネス システムでも使用できます。たとえば、クーポンを発行した後に在庫を減額するといったことをトランザクションとして定義できます。スタンドアロンのシナリオでは、ロック、時系列、その他のメカニズムを使用して単一ノードの ACID 特性を確保できますが、ノード間の操作の ACID 特性を保証することはできません。

では、分散システムにおけるトランザクションの問題をどのように解決するのでしょうか?これは面接でもよく聞かれる質問です。 2 フェーズ コミット プロトコルや TCC プロトコルなどの分散トランザクション プロトコルについて聞いたことがあるはずです。以下では、光明頂を包囲する6大勢力の物語を使って、2段階のプロトコルを説明します。

2.2 光明頂包囲戦

峨眉派は、明日、少林派、武当派、崑崙派を集めて光明頂を攻撃したいと考えています。一方の当事者が攻撃に同意しない場合、または攻撃のタイミングが一貫していない場合、行動計画全体をキャンセルする必要があります。光明頂を攻撃する少林、武当、崑崙の各派閥の行動は、完全に実行されるか、まったく実行されないかのどちらかである分散トランザクションとして見ることができます。次の図に示すように:

では、どうすれば私たちは尼僧ミエジュエがこの調整問題を解決できるよう支援できるでしょうか?これを説明するために、2 フェーズ コミット プロトコルを使用できます。

2.3 2相コミットプロトコル

第二段階の服従協定では、尼僧ミエジュエがまず少林宗に攻撃のメッセージを送った。少林宗は調整役として武当宗と崑崙宗と連絡を取り、攻撃するか撤退するかを決定した。

2 番目のステージは、1. リクエスト送信ステージ (投票ステージ)、2. 実行送信ステージ (完了ステージ) の 2 つのステージがあることを意味します。

フェーズ 1: リクエストの送信フェーズ:

ステップ 1: コーディネーターである Shaolin は、それぞれ Wudang と Kunlun にメッセージを送信します。「明日、光明頂を攻撃することは可能ですか?」

ステップ 2: 少林、武当、崑崙はそれぞれ明日光明頂を攻撃できるかどうかを評価します。可能であれば、時間を予約してロックし、他の攻撃計画は立てません。

ステップ 3: 少林寺独自の評価結果を含むすべての回答結果が少林寺に届きます。結局、これら 3 つの結果はすべて実現可能です。

次の図に示すように:

フェーズ1

フェーズ2: 提出および実行フェーズ:

ステップ 1: 少林宗は、自分自身、崑崙宗、武当宗に関する情報を収集します。これらの宗派はすべて攻撃能力を持っているため、分散トランザクションを実行して光明頂を攻撃できます。

ステップ2:少林宗は崑崙宗と武当宗に光明頂を攻撃するよう通知します。

ステップ3:少林寺、崑崙、武当派が弟子を集めて光明頂を攻撃する(事を実行する)。

ステップ 4: 崑崙と武当は、攻撃を開始したかどうかを Shaolin に伝えます。

ステップ 5: 少林宗は、自ら、崑崙宗、武当宗の攻撃結果をまとめ、米傅師匠に報告します。こうして、尼僧ミエジュエが見たのは統一された戦闘計画だった。

フェーズ2

知らせ:

  • ミエジュエシタイをクライアントとして扱うことができます。少林寺、武当山、崑崙は分散システムの 3 つのノードと見なされます。少林寺はコーディネーターとして活動しています。
  • 光明頂への攻撃が可能かどうかの評価と予約時間は、操作が必要なオブジェクトとオブジェクトの状態、準備ができているかどうか、新しい操作を送信できるかどうかとして理解できます。
  • 伝書鳩によるメッセージや手紙の送信はオンラインメッセージとして理解できます。
  • 最初のフェーズでは、各参加者がトランザクションを放棄するかコミットするかを投票します。投票によりトランザクションのコミットが必要になった場合、トランザクションを放棄することはできません。
  • 第 2 フェーズでは、各参加者がトランザクションをコミットするか放棄するかの最終的な統一された決定を実行します。これが ACID の原子性です。
  • 最初の段階では、リソースを予約する必要があります。予約期間中は、他の人はこれらのリソースを操作することはできません。

2.4 フェーズ2プロトコルの問題点

ACID プロパティは CAP における一貫性の境界であり、最も強い一貫性と言えます。分散システムで一貫性が達成されると、可用性は必然的に影響を受けます。ノードに障害が発生すると、この分散トランザクションの実行は失敗します。

ほとんどのシナリオでは、一貫性の要件はそれほど高くなく、強力な一貫性を保証する必要はありません。短期的な不一致は許容され、最終的にデータが正しいことが保証されれば問題ありません。つまり、最終的な一貫性ソリューションを使用してデータの一貫性を確保できます。

もう一つ言及すべきことは、TCC プロトコル (3 フェーズ コミット プロトコル) です。これは、2 フェーズ コミットの問題点、つまりコーディネータの障害と参加者による長時間のリソースのロックに対処するために設計されたプロトコルです。リソースがロックされる時間を短縮するために、クエリ フェーズとタイムアウト メカニズムが導入されました。ただし、ネゴシエーションに必要なメッセージが多くなり、システム負荷と応答遅延が増加するため、3 フェーズ コミット プロトコルはほとんど使用されません。

3. 太極拳の柔らかさ

3.1 BASEの柔らかさ

太極拳の硬さについて話したので、次は太極拳の柔らかさについて話しましょう。分散トランザクションの柔軟性について話すとき、一般的に柔軟なトランザクションとして知られている BASE 理論について言及する必要があります。 BASE 理論は、CAP 理論における AP の拡張です。ほとんどのインターネット分散システムは可用性を重視しており、BASE サポートの導入を検討します。この理論は非常に重要です。私がお伝えしたいのは、この理論をマスターすれば、混乱することなく、ビジネスに適した分散アーキテクチャを設計することがはるかに容易になるということです。

BASE のコア: 基本的に利用可能な BA (Basically Available)、ソフト ステート S (Soft state)、および結果整合性 E (Eventually Consistent)。

では、なぜ柔軟な取引と呼ばれるのでしょうか?実際、これは ACID に関連するものであり、強力な一貫性を保証する必要はありません。たとえば、輪ゴムが曲がってしまった場合、輪ゴムを放すと自然に元に戻ります。これは輪ゴムの柔軟な面です。

3.2 BASEと太極拳の関係は何ですか?

太極拳のすべての動きは直線的に実行されるわけではありません。代わりに、それぞれの動きには滑らかさと弧が必要です。見た目は柔らかそうに見えますが、実は柔らかさの中に強さを秘めています。各動作の最後のストロークは非常に硬い振動です (この効果は言葉では説明できません。テレビを見てください)。この最後のものは、ハード面、つまり最終的な一貫性として見ることができます。

[[361263]]

3.3 基本的なユーザビリティ

基本的な可用性をどのように理解すればよいでしょうか?基礎を重視します。この理論は、基本をどのように定義するかについては教えてくれません。これは漠然とした概念です。実際のところ、それはあなたがどれだけ柔らかくなりたいかによって決まります。

分散システムでは、基本的な可用性とは、コア機能の可用性を確保し、一部の機能の可用性の損失を許容することであると理解できます。基本的に、4 つの解決策があります。

トラフィックピークシェービング: たとえば、JD の 8 時フラッシュセールや 12 時フラッシュセールなどの複数のフラッシュセール。

応答の遅延: たとえば、ダブル 11 ショッピング モールでは、注文が作成されると、注文が作成中であることが顧客に通知され、待機に 10 秒以上かかる場合があります。

エクスペリエンスの低下: たとえば、競技中は、多数のユーザーが写真を見るためにイベント ページにアクセスします。現在、ネットワークタイムアウトのため、大量の画像を表示できません。この場合、元の写真を、それほど鮮明ではない写真や小さい写真に置き換えることを検討できます。

過負荷保護: たとえば、よく使用されるメッセージ キューがいっぱいになった場合、システムを過負荷から保護するために、後続の要求を破棄するか、キュー内の一部の要求をクリアすることを検討できますが、これは独自のビジネス シナリオと組み合わせて設計する必要があります。

3.4 最終的な一貫性

最終的な一貫性: システム内のすべてのデータ コピーは、同期期間の後に最終的に一貫した状態になります。結局のところ、それは短い遅延として理解できます。

結果的一貫性は多くのインターネット ビジネスで採用されています。しかし、お金や金融システムを扱う場合は、強力な一貫性やトランザクションが使用されます。

先ほど ACID の強い一貫性について説明しましたが、それと最終的な一貫性との間にはどのような関係があるのでしょうか。

強い一貫性は、実際には結果的一貫性の一種です。では、最終的な一貫性をどのように理解すればよいのでしょうか?強い一貫性は、遅延のない一貫性として見ることができます。遅延を許容できない場合は強力な一貫性を使用し、それ以外の場合は結果的一貫性を使用します。

3.5 結果的一貫性と太極拳との関係は何ですか?

太極拳の最も素晴らしい点は、力を解放する能力です。相手が全力で攻撃してきたら、太極拳の動きを使って相手の力を分散させ、攻撃を無効にすることができます。力のアンロードは、前述のフローピークシェービングに相当します。さらに、戦力を解散した後は、攻撃を開始する番です。

[[361264]]

4. 動かないより動かす方がよい

記事の冒頭に戻ると、張無忌は張三鋒が教えてくれた太極拳をすべて忘れてしまった。彼はどうやって二人の玄明長老を倒すことができたのでしょうか?

太極拳は動きよりもボクシングの精神を重視しているからです。そこで張無忌はボクシングの意味を理解し、技よりも優れた技はないことに気づいた。

分散システムを設計するときは、3 つの主要な理論を暗記するのではなく、原則を真に理解し、少しずつ反復して、現在のビジネス システムに最適な分散アーキテクチャを開発する必要があります。

5. まとめ

  • 太極拳は、CAP の C と A のように、陰と陽の側面に分かれています。
  • CAP 理論は分散における基本理論であり、一貫性、可用性、パーティション耐性という 3 つの重要な指標を備えています。
  • ACID は、強力な一貫性を追求する従来のデータベースの設計コンセプトです。 4 つの指標: 原子性、一貫性、分離性、永続性。これは CAP における CP の拡張です。
  • BASE 理論は、CAP における一貫性と可用性のトレードオフの結果です。これは CAP における AP の拡張です。まず可用性とパフォーマンスに重点を置き、ビジネス シナリオの特性に基づいて基本的な弾力性のある可用性を実現し、次にデータの最終的な一貫性を実現します。
  • BASE 理論は、パフォーマンス、フォールト トレランス、可用性の面で、トランザクション システムの一般的な問題をほぼ解決します。
  • BASE 理論は NoSQL で広く使用されており、NoSQL システム設計の事実上の理論的サポートとなっています。

記事ではまた、六大宗派が光明頂を包囲した事例を通じて、二段階服従の核心原則についても説明している。誰もが理解してくれると信じています。

この記事はWeChatの公開アカウント「Wukong Chats about Architecture」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合はWukong Chat Architecture公式アカウントまでご連絡ください。

<<:  「リソース効率」が主な焦点であり、Huawei Cloudは「新しいクラウドネイティブ企業」の成長を促進します

>>:  クラスローディングを理解するために、実際に JVM を触ってみました!

推薦する

ION (kt コンピュータ ルーム) クラウド サーバー: 新しい割引コード (定期的に更新)、米国 cn2 gia + シンガポール (cn2 gia、pccw、cmi)

Krypt の自社クラウド サーバー ブランド「ION」は、頻繁にプロモーション活動を行っています。...

インテリジェントエッジが産業用AIで勝利する方法

[[440771]]アップルの創業者スティーブ・ジョブズはかつて「リーダーと追随者の違いはイノベーシ...

SEO にはウェブサイトの構築方法を学ぶ必要がありますか? SEOとコードの関係について

最近、多くの人が Xuepeng に「SEO には Web サイトの構築方法を学ぶ必要がありますか?...

JVM の詳細な分析: JVM はリフレクションをどのように実装しますか?

[[422686]]リフレクションは Java 言語の非常に重要な機能であり、実行中の Java プ...

80年代以降の若者がウェブサイトを作成し、それが間違った方向に進み、「有料削除」を利用して人々を脅迫した。

まず、無作為の情報をネット上に拡散し、暴露された情報源から「有料削除」料を要求した。 1980年代生...

現在の「安価な SEO」の終焉

昨日、筆者はSEO業界の大物と雑談して、彼のビジネスについて話しましたが、もちろんSEOの安さの問題...

詳細記事 | UCloud データベース製品の進化

先日、「UCloud User Open Day」の最新イベントが無事に開催されました。 UClou...

マイクロソフトがWindows 8の価格を発表、予約注文受付開始

テンセントテクノロジーニュース(潮汇)北京時間10月13日、海外メディアの報道によると、マイクロソフ...

パブリッククラウドを導入して企業がコストを削減できる6つの方法

クラウドへの移行は、特に大幅な更新やメンテナンスが必要な場合、特定の領域で実際にビジネス費用を増加さ...

ランキングを安定させたいなら、ウェブサイトを観察し、分析する必要があります。

最近、百度のランキングが大きく変動し、多くのウェブサイトのキーワードランキングが大きく変動しています...

新浪微博がソーシャル検索エンジンYunyun.comを買収、創設者が退任

A5 Webmaster Networkは9月10日に報じた。9月10日は中国の伝統的な教師の日であ...

spinservers: ダラスの格安サーバー、19 ドル / E5-2670 / 8g メモリ / 500g ハードドライブ / 10T トラフィック

spinserversは、2009年に設立された新しいブランドですが、実は25年間運営している、弊社...

エッジコンピューティングの成長を促進する4つの要因

エッジコンピューティングが主流になる原動力は何でしょうか?エッジ コンピューティングを使用すると、運...

Kubernetes サービス ホスティングのトップ 5 クラウド プラットフォームを解釈すると、Google Cloud がわずかに優れています。

Kubernetes は、コンテナ化されたアプリケーションの展開、スケーリング、管理を自動化するオー...