領事-建築
1つのデータセンターで働く領事のアーキテクチャ図は、次のように最もよく説明できます。
ご覧のとおり、3つの異なるサーバーがあり、これらは領事によって管理されています。動作するアーキテクチャは、3つの異なるサーバーからリーダーを選出するのに役立つraftアルゴリズムを使用して機能します。これらのサーバーは、次のようなタグに従ってラベル付けされます。Follower そして Leader。名前が示すように、フォロワーはリーダーの決定に従う責任があります。これら3つのサーバーはすべて、通信のためにさらに相互に接続されています。
各サーバーは、RPCの概念を使用して独自のクライアントと対話します。クライアント間の通信は、Gossip Protocol下記のように。インターネット機能との通信は、TCPまたはゴシップ通信方式を使用して利用可能にすることができます。この通信は、3つのサーバーのいずれかと直接接触しています。
いかだアルゴリズム
Raftは、複製されたログを管理するためのコンセンサスアルゴリズムです。それはの原則に依存していますCAP Theorem、これは、ネットワークパーティションが存在する場合、一貫性と可用性のどちらかを選択する必要があることを示しています。CAP定理の3つの基本すべてが、任意の時点で達成できるわけではありません。せいぜい、それらのうちの2つとトレードオフする必要があります。
A Raft Cluster通常は奇数カウントの複数のサーバーが含まれます。たとえば、サーバーが5つある場合、システムは2つの障害に耐えることができます。常に、各サーバーは次の3つの状態のいずれかになります。Leader, Follower、または Candidate。通常の操作では、リーダーは1人だけで、他のサーバーはすべてフォロワーです。これらのフォロワーは受動的な状態にあります。つまり、自分でリクエストを発行するのではなく、リーダーと候補者からのリクエストに応答するだけです。
次の図は、いかだアルゴリズムが機能するワークフローモデルを示しています。
キーバリューデータ
領事のバージョン0.7.1以降、個別のキー値データが導入されています。KVコマンドは、コマンドラインを介して領事のKey-Valueストアと対話するために使用されます。のトップレベルコマンドを公開しますInserting, Updating, Reading そして Deleting店から。Key / Valueオブジェクトストアを取得するために、領事クライアントが利用できるKVメソッドを呼び出します-
kv := consul.KV()
ザ・ KVPair Structure単一のキー/値エントリを表すために使用されます。次のプログラムで領事KVペアの構造を見ることができます。
type KVPair struct {
Key string
CreateIndex uint64
ModifyIndex uint64
LockIndex uint64
Flags uint64
Value []byte
Session string
}
ここで、上記のコードで言及されているさまざまな構造は、次のように定義できます。
Key−スラッシュURL名です。例–サイト/ 1 /ドメイン。
CreateIndex −キーが最初に作成されたときに割り当てられたインデックス番号。
ModifyIndex −キーが最後に更新されたときに割り当てられたインデックス番号。
LockIndex −キー/値エントリで新しいロックが取得されたときに作成されるインデックス番号
Flags −アプリがカスタム値を設定するために使用できます。
Value −最大512kbのバイト配列です。
Session −セッションオブジェクトの作成後に設定できます。
プロトコルの種類
領事館には2種類のプロトコルがあり、これらは-と呼ばれます。
- コンセンサスプロトコルと
- ゴシッププロトコル
それらを詳しく理解しましょう。
コンセンサスプロトコル
コンセンサスプロトコルは、CAP定理で説明されているように一貫性を提供するために領事によって使用されます。このプロトコルは、Raftアルゴリズムに基づいています。コンセンサスプロトコルを実装する場合、ラフトノードが常にフォロワー、候補、またはリーダーの3つの状態のいずれかにあるラフトアルゴリズムが使用されます。
ゴシッププロトコル
ゴシッププロトコルを使用して、メンバーシップを管理し、クラスター全体でメッセージを送受信できます。領事館では、ゴシッププロトコルの使用は2つの方法で発生します。WAN (無線エリアネットワーク)と LAN(ローカルエリアネットワーク)。ピアツーピアネットワーク内のノードを検出するためのゴシップアルゴリズムを実装できる3つの既知のライブラリがあります-
teknek-gossip − UDPで動作し、Javaで記述されています。
gossip-python − TCPスタックを利用し、構築されたネットワークを介してデータを共有することも可能です。
Smudge − Goで記述され、UDPを使用してステータス情報を交換します。
ゴシッププロトコルは、分散データベースの整合性または整合性のある状態の他のタイプのデータの達成と維持、未知のサイズのネットワーク内のノード数のカウント、ニュースの確実な拡散、ノードの編成などにも使用されています。
リモートプロシージャコール
RPCは、リモートプロシージャコールの短縮形として表すことができます。これは、あるプログラムが別のプログラムにサービスを要求するために使用するプロトコルです。このプロトコルは、ネットワークの詳細を確認しなくても、ネットワーク上の別のコンピューターに配置できます。
ConsulでRPCを使用することの本当の美しさは、ほとんどの検出サービスツールが以前に持っていた遅延の問題を回避するのに役立つことです。RPCの前は、領事はTCP そして UDPベースの接続。これはほとんどのシステムで良好でしたが、分散システムの場合はそうではありませんでした。RPCは、ある場所から別の場所へのパケット情報の転送時間を短縮することで、このような問題を解決します。この分野では、GRPC by Googleは、ベンチマークを観察してパフォーマンスを比較したい場合に備えて、楽しみにしておくのに最適なツールです。