複数の Erlang アプリケーションを実行したいと考えています。1 つは Riak で、もう 1 つは Web サーバーです。それらを別々のErlang VMと同じで実行する必要がありますか?その理由は?
4 に答える
多くの人がこれらのサブシステムを分離することを推奨していますが、私は反対のアプローチをとります。Erlang には、同じリリースで多くのアプリケーションを実行するための戦略が組み込まれています。アプリケーションが互いに直接通信する場合、それらを 1 つのリリースにまとめることは理にかなっているかもしれません。これにより、アプリケーション間の呼び出しが高速になります。アプリケーションの 1 つだけが必要なアップグレードのためにシステムを停止する必要がある場合、すべてのアプリケーションが同じ運命を共有するようになったと主張する人もいます。これは、Erlang でアプリケーションを多数のノードに分散する場合の問題点です。また、ほとんどのアップグレードはホット コード ロードで実行できます。
これは「運命の共有」と呼ばれ、一般的な設計上の決定です。より多くのサブシステムが共通のリソースを共有するほど、それらの「運命」はより結びつきます。誤動作/障害が発生した場合、「運命の共有」が増えると、体系的な障害が発生する可能性が高くなります。
それぞれを別々のVMに含めることができる場合は、この方法の方が適していると思います。
相互に何もする必要がない場合: いいえ。いずれかのアプリケーションで VM を再起動する必要がある場合があります。これにより、両方のダウンタイムが発生します。
別々の VM を使用すると、多くの erlang の利点が失われます。