Season Class Kaihu PDFBinderは、暗号化されたPDF形式のオープン、編集、コピー、印刷をサポートしています。

同時実行性とは、複数のタスクを同時に実行できることを意味します。並行プログラミングには、マルチスレッドプログラミング、マルチプロセスプログラミング、分散プログラムなど、幅広い意味があります。この章で説明する同時実行の意味は、マルチスレッドプログラミングに属します。

GoroutineはGoランタイムによってスケジュールされ、スレッドはオペレーティングシステムによってスケジュールされます。

ユーザーが十分なタスクを割り当てると、システムはユーザーがCPUにタスクを割り当てるのを自動的に支援し、これらのタスクが可能な限り同時に動作するようにします。このメカニズムはGo言語ではgoroutineと呼ばれています。

Goプログラムは、メインパッケージのmain()関数から起動し、プログラムが起動すると、main()関数のデフォルトのgoroutineを作成します。

同時実行パフォーマンスを調整する(DOMAXPROCS)

従来のロジックでは、開発者はスレッドプール内のスレッドとCPUコアの数の間の対応を維持する必要があります。同様に、Goはruntime.GOMAXPROCS()関数を介して実行することもできます。形式は次のとおりです。

一般的な分散システムでは、マシンのダウンタイムやネットワークの異常(遅延、損失、重複、メッセージの順序外れ、ネットワークパーティションなど)(つまり、異常が発生する分散システム)などの状況が常に発生します。Paxosアルゴリズムが解決する必要がある問題は、上記の例外が発生する可能性のある分散システムのクラスター内の特定のデータの値を迅速かつ正確に合意する方法です。分散システムで達成される状態の一貫性としても理解できます。

基本理論の核となる考え方は最終的な整合性です。強い整合性(Strong Consistency)が達成できない場合でも、各アプリケーションは適切な方法を使用して、独自のビジネス特性に従って最終的な整合性(Eventual Consistency)を達成できます。

クォーラムメカニズム

Paxosを理解する前に、最初に「クォーラム選挙アルゴリズム」を理解しましょう。選挙アルゴリズムを見て、飼育係のリーダー選挙について考えますか?あなたの直感は大丈夫です。

クォーラムメカニズムは、さまざまな整合性アルゴリズムで見ることができます。主な数学的アイデアは引き出しの原理に基づいています。Nコピーでは、一度にW個の更新が成功した場合、データをフェッチする場合、少なくとも1つの更新されたデータを読み取ることができるように、N-Wを超えるコピーから読み取る必要があります。

クォーラムメカニズムに対応するWAROは、WriteAllReadoneであり、単純なコピー制御プロトコルです。クライアントが特定のコピーへのデータの書き込み(データの更新)を要求した場合、この書き込み操作は、すべてのコピーが正常に更新された後でのみ行われます。成功と見なされます。それ以外の場合は失敗と見なされます。

WAROは読み取りサービスの保証を優先します。すべてのコピーが正常に更新されるため、それは正常な更新と見なすことができ、すべてのコピーの整合性が保証されます。この場合、1つのコピーのデータのみを読み取る必要があります。1つのコピーが更新に失敗する限り、書き込み操作は失敗したと見なされるため、書き込みサービスの可用性は低くなります。N個のコピーがあり、N-1個がすべてダウンしていると仮定します。残りのコピーは引き続き読み取りサービスを提供できますが、1つのコピーがダウンしている限り、書き込みサービスは成功しません。

WAROは更新サービスの可用性を犠牲にし、読み取りサービスの可用性を最大化します。クォーラムは更新サービスと読み取りサービスの妥協点です。

クォーラムの定義

Quorumの定義は次のとおりです。N個のコピーがあり、W個のコピーで更新操作wiが正常に更新され、更新操作wiが成功したと見なされ、今回正常に送信された更新操作に対応するデータが呼び出されたとします。 」読み取り操作の場合、更新されたデータを読み取るには少なくともR個のコピーが必要です。このうち、W + R> N、つまりWとRは重複しています。一般的に、W + R = N + 1です。

N =保存されたデータコピーの数

W =正常な更新にはコピーが必要

R =読み込まれる1つのデータオブジェクトでアクセスされるコピーの数

定足数は、少なくともN + 1-wのデータのコピーを読み取る必要があることに限定されます。

たとえば、10個のコピーを保持し、一度に3個を正常に更新した場合、少なくとも8個のデータのコピーを読み取る必要があります。これにより、最新のデータを確実に読み取れます。

定足数アプリケーション

クォーラムメカニズムは強い整合性を保証できません。つまり、すべてのユーザーまたはノードが、正常に送信された最新のコピーデータをいつでも読み取ることができます。

Quorumメカニズムの使用は、正常に送信された最新のバージョン番号を取得するメタデータサービスと連携して、正常に送信された最新のバージョン番号を特定し、読み取られたデータから最新の書き込まれたデータを確認できるようにする必要があります。

クォーラムは、分散システムで一般的に使用されるメカニズムです。これは、データの冗長性と結果の一貫性を保証するために使用される投票アルゴリズムです。クォーラムメカニズムのアプリケーションは、Paxos、Raft、ZooKeeper's Zabなどのアルゴリズムで見ることができます。

Paxosアルゴリズムの関連概念

Paxosプロトコルでは、3つのタイプのノードの役割、つまり提案者、承認者、および学習者があり、発行者としてクライアントもあります。技術写真

上記の3種類の役割は論理的に分割されているだけであり、実際には、ノードはこれら3種類の役割を同時に果たすことができます。

提案者

複数の提案者が存在する可能性があります。プロセスの最初に、提案者は価値であるモーションを提案します。いわゆる値は、「変数の値を新しい値に変更する」など、プロジェクト内の任意の操作です。Paxosの合意は、これらの操作は値として抽象化されます。

提案者が異なれば、値が異なる場合や矛盾する場合もあります。たとえば、提案者が「変数Xを1に設定」することを提案し、別の提案者が「変数Xを2に設定する」ことを提案しますが、同じラウンドのPaxosプロセスでは、値は1つだけです承認されました。

アクセプター

クラスタにはN個のアクセプタがあり、アクセプタは完全に等しく独立しています。提案者が提案する値は、合格する前に半分(N / 2 + 1)のアクセプタによって承認される必要があります。

学習者

学習者は選挙には参加しませんが、承認された値を学習します。Paxosでは、学習者は主に関連するステートマシンの同期プロセスに参加します。

ここで、LeanerのプロセスはQuorum評議会メカニズムを参照しています。値は、W = N / 2 + 1でAcceptorによって承認される必要があります。渡された値を学習するため。たとえば、次のとおりです。

私は10人のAccpetorがいて、少なくとも6つの同一の値、最大10の同一の値を読み取ります。つまり、投票数が最も多い結果が選択されます。

クライアント発行者

発行者としてのクライアントの役割は、変更リクエストのソースなど、実際には選出プロセスには参加しません。提案者と受容者の相互作用

提案者と受容者の相互作用

Paxosでは、提案はアクセプターに送信され、アクセプターは最終値を選択することに同意し、学習者に最終値を伝えます。

ProposerとAcceptorの間の相互作用には、主に次の4種類のメッセージ通信があります。

おすすめ

転載: www.cnblogs.com/360514875/p/12735351.html