7

シンプルだがスケーラブルなネットワークプログラミングを行うためにErlangを学ぼうとしています。私は基本的に、インターネットのバックボーン上のサーバーが実行することを実行するプログラムを作成したいと思っていますが、小規模です。イントラネット[原文のまま]へのゲートウェイとして機能し、接続されたクライアントや他のゲートウェイにデータをルーティングするWebアクセス可能なサーバーを使用してイントラネットをセットアップしようとしています。

トラフィックが多いのは、データがクライアントからゲートウェイ、クライアントに流れるだけでなく、宛先に到達するためにいくつかのゲートウェイをバウンスしなければならない可能性があるという事実から生じます(データがインターネット上をどのように移動するかなど)。これは、ゲートウェイがクライアントからのトラフィックだけでなく、他のゲートウェイのクライアントからのトラフィックも処理する必要があることを意味します。

これにより、中程度の数のクライアントとゲートウェイであっても、異常に高いレベルのトラフィックが発生する可能性があると考えました。

Pythonのバックグラウンドと、程度は少ないが他のスクリプト言語から来て、私は自分の問題を解決するためにカスタマイズされたモジュールを探すことに慣れています。Erlangはトラフィックの多いネットワークプログラミング用に設計されていることは理解していますが、この種のもののライブラリ/モジュールに関して私が見つけたのはgen_tcpだけでした。

これは、Erlangがすでにこの種のものに最適化されているため、最も基本的なモジュールで起動して、適切に拡張できることを期待できることを意味しますか?

4

1 に答える 1

15

gen_tcp大量の負荷がかかる条件下でも、非常に優れたパフォーマンスが期待できます。データを渡すだけであまり処理しない場合は、非常にうまくスケーリングできると思います-事実上、ポインターを渡すだけです。

Erlang で書かれた既知のスケーラブルなソリューションはすべて以下を使用しますgen_tcp:

  • カウボーイ、モチウェブ、ヨーズ、...
  • リヤク
  • エトレント
  • RabbitMQ

等々。ただし、これを使用する際には、言及する価値のあるヒントがありますerl +K true。カーネル ポーリングにアクセスできるように、erl を実行してください。つまり、epoll()Linux、kqueue()/kevent()BSD、および/dev/pollSolaris です。また、TCP ポートにコマンドを与えて、バッファー サイズなどのオプションを設定できることにも注意してください。erl -man inet最後に、特定の種類のパケットについては、C 層にパケットを解析してもらうことができますsetopts/2。たとえば、{packet, 4}どれが非常に人気があるかです。

一般に、Erlang には非常に高速な I/O サブレイヤーがあります。大規模で複雑なインタラクションであっても、非常に高速に実行されることが期待できます。

于 2012-09-29T09:17:00.410 に答える