2016-10-16 17 views
0

- 背景質問、コミュニケーション

私たちの現在の霊薬で、残りのAPIをレールの私達のエンドポイントの一部を置き換えるに向けて取り組んでいます。私は、HTTPエンドポイント(A Phoenixアプリ)と小さなナノアプリの集まりを含んでいる傘のアイデアに恋していました。ユーザーデータとのやり取りの全責任を負うユーザーアプリである可能性があります。

- ユーザーのサービスへの大きな負荷がある場合は質問

今私は独立して、これらのサービスを拡張できるようにしたい、と言います。私たちは現在のセットアップでDockerを使用しているので、理想的にはより多くのユーザーのアプリケーションコンテナを展開します。

これは私が現在素晴らしい作品が、状態を渡すと、変更の考え方に巻き付けているように見えるGenServerを使用して概念実証を、作成し、通信のいくつかの並べ替えを必要とすることを意味します。私はちょうどいくつかのデータを渡すか、返信します:アクションが成功したらOKです。 私はhttp://elixir-lang.org/getting-started/mix-otp/task-and-gen-tcp.htmlを見て、コミュニケーションに使うべきものについて混乱しました。 私の最初の質問は、私のアプリ間で最も理想的なコミュニケーション手段は何ですか?

開発中にも私はまだアプリを一緒に話す必要がありますが、これはそれぞれのアプリを独立して起動し、 - クッキーと--snameを渡す必要があることを意味します。これは今のところ申し分ありませんが、私は3つのアプリしか持っていませんが、10歳のときはこれが大変です。私は猫が傘のルートからプロジェクト全体を開始することを知っていますが、それで、どのように私はindividualuelアプリに必要なパラメータを渡すのですか?

は深く、いくつかのクリアランスをお願い申し上げます。ありがとうございました。

+0

Erlang/Elixirのエコシステム内に固執している限り、「これは何らかのコミュニケーションが必要」という意味ではありません。http://elixir-lang.org/getting-started /mix-otp/distributed-tasks-and-configuration.htmlはおそらくもっと必要なものです。パラメータを渡すには、その猫をスキンするための方法がもっとあります。たとえば、配布システムをプログラムで起動することができます。たとえば、http://erlang.org/doc/man/net_kernel.htmlを参照してください。 。正確な答えを保証するにはあなたの質問があまりにも一般的すぎると感じています。 – cdegroot

答えて

3

アーランと関連エリクサーによっては、言語に組み込まれた通信層で作成されました。傘アプリケーションでは、最初に単一のノードにすべてのアプリケーションを含むbuild a releaseを使用できます。次に、傘内の特定のアプリケーションを対象にスケーリングを行う必要があるため、他のノードとして動作するアプリケーションのリリースを構築できます。

は、節間の通信のための方法で構築使用し、いくつかのルールに従うことは、あなたが異なるマシン/仮想マシンにあなたのノードを配布するために、既存のコードを変更する必要はありませんことを確認します。

は、ノード間通信を実験する手順については、this articleを参照してください。アーラン/エリクサーの全体的な通信像を理解するために重要である

その他の概念:

http://erlang.org/doc/reference_manual/distributed.html

http://erlang.org/doc/man/epmd.html

http://erlang.org/doc/man/pg2.html

ちょうどTCPやUDPネットワークのようにあることに注意してください最初の要件は、マシンがネットワーク上で通信できる必要があり、Erlang VMが使用しようとしているポートが、営業中。使用するポートの範囲を制限するために、アーラン/ Elixirのアプリケーションを起動するとき

あなたは、このコマンドライン引数を使用することができます。

-kernel inet_dist_listen_min 30000 inet_dist_listen_max 30003

を私はあなたがそれをするためのオープン2つのまたは3ポートの最小値を必要とすると考えています正しく機能します。

幸運を祈る!

+0

素晴らしい、ちょうど私が探していたもの、ありがとう、ジェイソン! :) – MartinElvar

+0

問題ありません。私は、Elixirのプロセス間で通信する方法は、(異なるノード上の)プロセス間でまだ通信しているので、ノード間と同じであると付け加えたいと思います。そのメソッドは 'Process.send'です。 –