Erlangのフォールトトレランスには、スーパーバイザプロセスを使用してワーカープロセスを監視する機能が含まれているため、ワーカーが死亡した場合、スーパーバイザは新しいものを起動できます。スーパーバイザプロセスはプロセスをどのように監視しますか?同じことをJVM上で行うことはできますか?
Erlangは、特に分散シナリオでこの監視をどのように行うのですか?どのようにしてプロセスが本当に死んだのかを確認することができますか?それは心拍をするのですか?実行時環境に何か組み込まれていますか?ネットワークケーブルが接続されていない場合はどうなりますか?他のプロセスと通信できない場合、他のプロセスが終了したと想定していますか?
私は、JVMでErlangが主張しているのと同じフォールトトレラントなどを達成する方法について考えていました(JavaやScalaなど)。しかし、Erlangと同様にJVMに組み込まれたサポートが必要かどうかもわかりませんでした。私はErlangがそれをどうやって行っているかの定義を、比較のポイントとして捉えていませんでした。
ありがとう、それは多くの意味があります。マシン間でメッセージを送信することは、ローカルプロセス間での送信(オーバーヘッドの増加、失敗する可能性のあるその他の理由など)とは異なることがよくあります。したがって、これについて知るようにアプリケーションをコーディングしてください(ローカルコールとリモートコールを同じにするための魅力はないので試してはいけません)。 これは、JVMの同様のモデルが確かに可能であることを意味します。ローカルプロセス/スレッド/ファイバー/アクター/その他を監督するだけで、他のノードへのアプリケーションのpingをコード化します(到達できない場合はどうすればよいか)。 –