Orleans 2.0公式文書-6.8.3導入->マルチクラスタサポート->gossipチャネル
3629 ワード
マルチクラスタ通信
ネットワークは、どこにいてもTCP/IPを介して他の任意のOrleans siloに接続できるように構成する必要があります.この目標をどのように実現するかは、siloをどのように配置するか、siloをどこに配置するかによって決まるため、Orleansの範囲内ではありません.
たとえば、Windows Azureでは、VNETsを使用して、領域内の複数の配置に接続したり、異なる領域にわたってVNETsに接続したりするゲートウェイを使用できます.
クラスタID
各クラスタには独自のクラスタIDがあります.グローバル構成でクラスタIDを指定する必要があります.
クラスタIDが空ではないか、カンマを含めることはできません.また、Azureテーブルを使用して格納する場合、クラスタIDには、行キーの使用を禁止する文字(/,#,?)を含めることはできません.
クラスタIDは頻繁に転送され、一部のログビュープロバイダによって記憶される可能性があるため、クラスタIDには非常に短い文字列を使用することをお勧めします.
クラスタゲートウェイ
各クラスタは、アクティブなsiloのサブセットをクラスタゲートウェイとして自動的に指定します.クラスタゲートウェイは、そのIPアドレスを他のクラスタに直接通知するので、「最初の連絡先」として機能します.デフォルトでは、最大10個のsilo(または
異なるクラスタ内のsilo間の通信は、必ずしもゲートウェイを通過するわけではない.siloがgrainアクティブボディの位置(どのクラスタにおいても)を理解してキャッシュすると、siloがクラスタゲートウェイでなくてもsiloに直接メッセージが送信されます.
gossip
Gossipは、クラスタが構成とステータス情報を共有するためのメカニズムです.名前の通り、gossipは非中心化され、双方向である.各siloは、情報を双方向に交換するために、他のsilo(同じクラスタまたは他のクラスタ)と直接通信する.
内容:gossipには、次のセクションまたはすべての情報が含まれています.現在のタイムスタンプを持つマルチクラスタ構成. は、クラスタゲートウェイ情報に関する辞書を含む.鍵はsiloのアドレスであり、値は(1)タイムスタンプ、(2)クラスタID、(3)アクティブまたは非アクティブの状態を含む.
高速と低速の伝播.ゲートウェイがステータスを変更する場合、またはジョブが新しい構成を注入すると、このgossip情報は直ちにすべてのsilo、クラスタ、およびgossipチャネルに送信されます.このような状況は急速に発生したが,信頼できない.メッセージが何らかの理由で失われた場合(たとえば、競合、切断されたソケット、silo障害)、私たちの周期的なバックグラウンドのgossipは、情報の最終的な伝播を確保します.速度は遅いですが.すべての情報は最終的にどこにでも伝播し、たまにメッセージが失われ、障害に対して高い弾力性を持っています.
すべてのgossipデータにはタイムスタンプがあり、メッセージの相対時間にかかわらず、新しい情報が古い情報に置き換えられることを保証します.たとえば、新しいマルチクラスタ構成は古いクラスタを置き換え、新しいゲートウェイ情報は古いゲートウェイ情報を置き換えます.gossipデータ表示の詳細については、
gossipチャネル
siloが最初に起動した場合、または障害が発生した後に再起動する場合、gossipを起動する方法が必要です.これがgossipチャネルの機能であり、筒倉配置で配置することができます.起動時にsiloがgossipチャネルからすべての情報を取得します.起動後、siloは30秒おき(または
注意:は、厳密な要件ではありませんが、可用性を向上させるために、異なる領域で少なくとも2つのgossipチャネルを常に構成することをお勧めします. とgossipチャネルとの通信の遅延は重要ではない. は、サービスId Guid(それぞれの構成によって指定される)が異なる限り、干渉を生じずに同じgossipチャネルを使用することができる複数の異なるサービスを有する. は、すべてのsiloが同じgossipチャネルを使用することを厳密に要求しない.チャネルがsiloが起動時に「gossipコミュニティ」と初期に接続できるように十分である限り.しかしながら、gossipチャネルがsilo構成の一部ではなく、siloがゲートウェイである場合、その状態更新はチャネル(高速伝播)にプッシュされないため、周期的でバックグラウンドのgossipを介してチャネル(遅い伝播)に到達するには、より長い時間がかかる可能性がある.
Azureテーブルベースのチャネル
Azureテーブルに基づくgossipチャネルを実現した.構成Azure勘定科目に使用する標準接続文字列を指定します.例えば、1つの構成は、以下に示すように、別個のAzureストレージアカウント
複数の異なるサービスは、それぞれが指定したServiceId guidが異なる限り、干渉されずに同じゴシップチャンネルを使用することができます.
他のgossipチャネルの実装
他のgossipチャネルプロバイダを開発しています.多くの異なるストレージバックエンドのメンバーシップとアラートをカプセル化する方法と似ています.
ネットワークは、どこにいてもTCP/IPを介して他の任意のOrleans siloに接続できるように構成する必要があります.この目標をどのように実現するかは、siloをどのように配置するか、siloをどこに配置するかによって決まるため、Orleansの範囲内ではありません.
たとえば、Windows Azureでは、VNETsを使用して、領域内の複数の配置に接続したり、異なる領域にわたってVNETsに接続したりするゲートウェイを使用できます.
クラスタID
各クラスタには独自のクラスタIDがあります.グローバル構成でクラスタIDを指定する必要があります.
クラスタIDが空ではないか、カンマを含めることはできません.また、Azureテーブルを使用して格納する場合、クラスタIDには、行キーの使用を禁止する文字(/,#,?)を含めることはできません.
クラスタIDは頻繁に転送され、一部のログビュープロバイダによって記憶される可能性があるため、クラスタIDには非常に短い文字列を使用することをお勧めします.
クラスタゲートウェイ
各クラスタは、アクティブなsiloのサブセットをクラスタゲートウェイとして自動的に指定します.クラスタゲートウェイは、そのIPアドレスを他のクラスタに直接通知するので、「最初の連絡先」として機能します.デフォルトでは、最大10個のsilo(または
MaxMultiClusterGateways
に構成されている任意の数)がクラスタゲートウェイとして指定されます.異なるクラスタ内のsilo間の通信は、必ずしもゲートウェイを通過するわけではない.siloがgrainアクティブボディの位置(どのクラスタにおいても)を理解してキャッシュすると、siloがクラスタゲートウェイでなくてもsiloに直接メッセージが送信されます.
gossip
Gossipは、クラスタが構成とステータス情報を共有するためのメカニズムです.名前の通り、gossipは非中心化され、双方向である.各siloは、情報を双方向に交換するために、他のsilo(同じクラスタまたは他のクラスタ)と直接通信する.
内容:gossipには、次のセクションまたはすべての情報が含まれています.
高速と低速の伝播.ゲートウェイがステータスを変更する場合、またはジョブが新しい構成を注入すると、このgossip情報は直ちにすべてのsilo、クラスタ、およびgossipチャネルに送信されます.このような状況は急速に発生したが,信頼できない.メッセージが何らかの理由で失われた場合(たとえば、競合、切断されたソケット、silo障害)、私たちの周期的なバックグラウンドのgossipは、情報の最終的な伝播を確保します.速度は遅いですが.すべての情報は最終的にどこにでも伝播し、たまにメッセージが失われ、障害に対して高い弾力性を持っています.
すべてのgossipデータにはタイムスタンプがあり、メッセージの相対時間にかかわらず、新しい情報が古い情報に置き換えられることを保証します.たとえば、新しいマルチクラスタ構成は古いクラスタを置き換え、新しいゲートウェイ情報は古いゲートウェイ情報を置き換えます.gossipデータ表示の詳細については、
MultiClusterData
クラスを参照してください.タイムスタンプを使用して競合を解決するgossipデータを組み合わせたMerge
メソッドがあります.gossipチャネル
siloが最初に起動した場合、または障害が発生した後に再起動する場合、gossipを起動する方法が必要です.これがgossipチャネルの機能であり、筒倉配置で配置することができます.起動時にsiloがgossipチャネルからすべての情報を取得します.起動後、siloは30秒おき(または
BackgroundGossipInterval
に構成された値)にgossipを定期的に行います.毎回gossip情報が、すべてのクラスタゲートウェイおよびgossipチャネルからランダムに選択されたパートナーと同期されます.注意:
Azureテーブルベースのチャネル
Azureテーブルに基づくgossipチャネルを実現した.構成Azure勘定科目に使用する標準接続文字列を指定します.例えば、1つの構成は、以下に示すように、別個のAzureストレージアカウント
usa
およびeurope
を有する2つのgossipチャネルを指定することができる.var silo = new SiloHostBuilder()
[...]
.Configure(options =>
{
[...]
options.GossipChannels.Add("AzureTable", "DefaultEndpointsProtocol=https;AccountName=usa;AccountKey=...");
options.GossipChannels.Add("AzureTable", "DefaultEndpointsProtocol=https;AccountName=europe;AccountKey=...")
[...]
})
[...]
複数の異なるサービスは、それぞれが指定したServiceId guidが異なる限り、干渉されずに同じゴシップチャンネルを使用することができます.
他のgossipチャネルの実装
他のgossipチャネルプロバイダを開発しています.多くの異なるストレージバックエンドのメンバーシップとアラートをカプセル化する方法と似ています.