2つのノードが頻繁に通信する設定があります。ノードAには、ノードBのサービスにアクセスするための数千のプロセスがあります。2つのノード間で大量の要求と応答が発生します。2つのノードは、それぞれ独自のハードウェアサーバー上の2つの異なるサーバーで実行されます。
HTTP / 1.1、rpc:call / 4、ノードBの登録済みgen_serverに直接メッセージを送信する3つのオプションがあります。各オプションについて説明します。
HTTP / 1.1
ノードAにのようなHTTPクライアントがIbrowse
あり、ノードBにのようなWebサーバーがYaws-1.95
あり、Webサーバーが無制限の接続を処理でき、オペレーティングシステムの設定が調整されてyawsがすべての接続を処理できるようになっているとします。 。次に、ノードAでプロセスを作成してHTTPを使用して通信します。この場合、各メソッド呼び出しは、単一のHTTPリクエストとレスポンスを意味します。ここにはオーバーヘッドがあると思いますが、ここでオプションを評価しています。と呼ばれるerlangの組み込みメカニズムはwebtool
、この種の目的のために構築される場合があります。
rpc:call / 4
ノードAからノードBに直接rpc呼び出しを行うことができます。基盤となるrpcメカニズムがどのように機能するかについてはあまり確信がありませんが、2つのerlangノードがを介して接続するnet_adm:ping/1
と、作成された接続は閉じられませんが、すべてのrpc呼び出しはこのパイプを使用すると思いますリクエストを送信し、レスポンスを渡します。これで訂正してください。
ノードAからノードB
へのメッセージの送信ノードAのプロセスを作成して、登録済みのプロセスまたはノードBのプロセスのグループにメッセージを送信することができます。これもクリーンなオプションのようです。
Q1。上記のオプションのどれをお勧めしますか、そしてその理由は、2つのerlangノードが常にそれらの間で膨大な通信を行うアプリケーションの場合です。2つのerlangノードがルーターであるメッセージングシステムを想像してみてください:)?
Q2。上記の方法のうち、よりクリーンで問題が少なく、フォールトトレラント性が高いのはどれですか(つまり、この方法には単一障害点があってはならず、ノードAのすべてのプロセスがブラインドになる可能性があります)。
Q3。選択したメカニズム:フォールトトレラントまたは冗長性をさらに高めるにはどうすればよいですか?
前提条件:ノードは常に稼働しており、ダウンすることはありません。ノード間のネットワーク接続は常に利用可能で混雑していません(2つのノード専用)。オペレーティングシステムはこれら2つのノードに最大のリソースを割り当てています。
評価ありがとうございます