2011-02-18 15 views
26

パートA:Erlangはどのようにスケーラブルに配布されますか?

アーランは、例えば、同時エージェントを実行している程度の成功事例をたくさん持っています何百万ものFacebookのチャットを同時に行うことができます。それは数百万のエージェントですが、もちろんネットワーク上の何百万ものCPUではありません。 ErlangがLAN/WAN全体でスケーリングを「水平」にしているときに、Erlangがどの程度スケーラビリティを測定できるかに関する指標を見つけるのが難しいです。

私は、LAN/WANを横断して少量のデータを通信して同期させる必要がある多くの(数万)物理ノード(Linux上でErlangを実行する)があるとしましょう。エージェント間ではなく、物理ノード間で、ど​​の時点で通信ボトルネックが発生しますか? (?それともこれは単に安定したネットワークを想定し、動作します)

パートB:

私はErlangのは、すべての試みをノードという(私は完全に間違っている可能性を意味し、Erlangの初心者のように)理解に接続して、お互いに気付いて、N^2接続ポイントツーポイントネットワークになります。パートAがN = 10Kで動作するだけではないと仮定すると、クラスタノードを管理可能にするために、Erlangを簡単に構成することができます(すぐに使用できる設定や簡単な定型文を使用して、グループ化/ルーティングアルゴリズムを完全に実装しないでください)システム全体のメッセージをクラスタ/グループ階層を介してルーティングしますか?

答えて

34

物理マシンの水平スケーラビリティについて言及する必要があります。これが唯一の問題です。あるマシン上のCPUは、それらの数に関係なく、1つのVMによって処理されます。

node = machine。

まず、(Erlangの)上に書かれたカスタムアプリケーションを使って、30〜60ノード(箱詰めのOTPインストール)を手に入れることができます。証明:ejabberd。

〜100-150は、最適化されたカスタムアプリケーションで可能です。私は、GCに関する知識、データ型の特徴、メッセージの受け渡しなどで書かれた良いコードでなければならないことを意味します。

+150以上ですが、300、500などの数値については、& TCP層のカスタマイズ。また、私たちのアプリは、例えば以下のようなコストを認識している必要があります。クラスタ間でコールを同期します。

もう1つはDBレイヤーです。その機能のためにMnesia(ビルトイン)は20ノード以上有効ではありません(私の経験 - 私は間違っているかもしれません)。解決策:ダイナモDB、別のMySQLクラスタ、HBaseなどを使用してください。

高品質のアプリケーションとスケーラビリティを作成するためのコストを活用する最も一般的な手法は、〜20-50ノードクラスタの連合です。内部的には〜50個のノードの効率的なメッシュであり、他の50個のノードクラスタとの任意の適切なプロトコルを介して接続されている。まとめると、このようなシステムはN個のクラスタの連合です。

分散型erlangは、1つのデータセンターで動作するように設計されています。地理的に遠いノードがもっと必要な場合は、連合を使用してください。

多くの設定オプションがあります。すべてのノードを相互に接続するわけではありません。しかし、〜50クラスタでは、エラーのオーバーヘッドは重要ではありません。また、このフルメッシュに参加しない「隠れた」接続を使用してerlangノードのグラフを作成することもできますが、すべてのノードへの接続の恩恵を受けることもできません。

私が見ている最大の問題は、この種のシステムではマスターレスシステムとして設計していることです。あなたがそれを必要としないなら、すべては大丈夫でしょう。

+2

あなたが言及した範囲(<60,60/150、> 150)は経験的であるか、研究/研究論文/ホワイトペーパーから抽出しましたか? –

+0

どのようにして異なるエルラン・クラスタを接続しますか?プロトコルは、1つのerlangプロセスを別のプロセスに接続することと根本的に異なるのですか? – CMCDragonkai

関連する問題