7

車輪を再発明する前に、これらの要件を満たすオープン ソース プロジェクトへのポインタを探しています。

  • 荷物が多すぎない場合は、go または C が可能ですが、erlang で実装されます (例: 依存関係のねじれた迷路)。
  • erlang のエンドポイントまたはクライアント (例: 仕事をするときに erlang コードを実行したい。)
  • ジョブをノードに分散し、いくつかの erlang 関数を呼び出してジョブを実行します。
  • 何とかして仕事を続ける
  • マスターノードなし、単一障害点なし
  • 同種のアーキテクチャ
  • ジョブを床に落とさずに、バックアップされる可能性のあるジョブのキューを管理する
  • 複数回実行されるジョブは問題ありません
  • Riak や Couchbase などの運用プロファイル (例: 1 つのノードを開始し、次に他のノードを開始して、それらをそのノードに向ける)

軽いものを好む傾向が強い。erlang には、やり過ぎたエンタープライズ レベルのソリューションがたくさんありますが、これをゼロから再作成するのと同じくらい習得するのに時間がかかるようです (実際、私は基本的に、誰かへの回答として、まさにこの問題に対するソリューションを設計しました。ここでスタックオーバーフローに関するelseの質問.私が説明したものを構築することはできますが、これはerlangが設計されたものの真ん中にあるニーズの1つのようです.)

私が考えたこと: - ejabbered - より多くのメッセージング フレームワーク - rabitmq - 理論的にはこれを行いますが、彼らの Web サイトにアクセスするたびに、抽象化の海に溺れます。すべてを行う準備ができているようです。永続性があるかどうかさえわかりません。

編集して追加:これは、ロッカーを使用した分散ロックに関するスライド デッキです。問題の重要な部分を解決するようです(自分でロールバックしたい場合) http://www.slideshare.net/knutnesheim/locker-distributed-consistent-locking

さらに編集: RabbitMQ よりも軽量なものを本当に探しています。自分のやりたいことができることはわかっていますが、それを学習するコストは、自分でそれを行うコストに匹敵するように思えます。最終的には、カスタム ソリューションが本当に必要なものに近くなります。

4

2 に答える 2

5

RABBITMQ を使用して、すべてのアプリケーションを完全なセットにバインドします。セットアップ全体の中には、永続的か一時的かにかかわらず、システムがキューを作成する中央の RABBITMQ サーバーがあります。RABBITMQ が利用できるため、ディストリビューション システム全体が RABBITMQ 上で実行されます。異なるテクノロジーを使用して構築されたシステムは、RABBITMQ を介して他のシステムからタスクを送受信します。

私たちは、システムが相互に通信するための JSON または XML のメッセージ形式を考え出しました。とても速いです。ただし、ここでは詳しく説明しませんが、すべての AMQP を erlang プログラマーから抽象化するために、最上位の RABBITMQ クライアントに OTP アプリケーションを作成する必要がありました。プログラマーが知っているのは APi だけです。たとえば、 にリクエストを送信するとします。System Aメッセージ形式 M を準備し、API: を呼び出すだけですzeenode_amqp:req(SystemA,Message)。システムは送信できますsynchronousまたはasynchronousリクエスト。

このことから何を理解すべきでしょうか: RABBITMQ はキューイング システムに非常に適しています。実際、私たちのセットアップではpushes、メッセージがクライアントから RABBITMQ に到達するとすぐに、メッセージをサーバーに直接 RABBITMQ します。慎重に設計されたキューとエクスチェンジの命名規則を使用し、さまざまな AMQP ユースケース モデルを注意深く理解することで、それはあなたにぴったりです。などのプロセス辞書を と組み合わせて使用​​して、独自に作成することは可能だと

思います。GprocErlang Queue ModulePoolboy. とにかく、RABBITMQ をお勧めします。教えてください。いくつかのライブラリをお送りしますので、それらを調べて、それらが機能するかどうかを確認してください。RABBITMQ を適切にセットアップし、サイトのドキュメントに従って適切に構成し、Erlang amqp クライアントもインストールすると、キューと交換を動的に作成することができます (永続化するかどうかに関係なく、あなたが何をしているかによって異なります)。可用性が保証されるように RABBITMQ サーバーをクラスター化することもできます。

于 2013-03-20T08:17:40.893 に答える
1

このようなタスクには RabbitMQ を使用します。RabbitMQ exchange-queue-binding モデルは、柔軟な構成をサポートしています。交換に公開すると、バインディングにより、メッセージがキューに確実に到着します。1 つ以上のワーカー プロセスがキューをサブスクライブできます。キューと交換は永続的です。RabbitMQ を完全に理解するには半年ほどかかるという人もいます。

于 2013-03-19T23:24:29.140 に答える