同じホスト上のプログラムによってのみ呼び出されるサーバー (Java ベース) を作成しています。
では、パフォーマンスと信頼性の観点から、UDP を使用するか、Unix ソケットのみを使用する必要がありますか?
同じホスト上のプログラムによってのみ呼び出されるサーバー (Java ベース) を作成しています。
では、パフォーマンスと信頼性の観点から、UDP を使用するか、Unix ソケットのみを使用する必要がありますか?
UDP は信頼できません。私はニトを選んでいますが、UDPでは配送順序または配送の保証はまったくありません。同じホスト上の 2 つのプロセス間では、これが問題として現れることはおそらくありませんが、極端な負荷のシナリオでは発生する可能性があります。
また、UDP パケットには、Unix ソケットよりもはるかに多くのオーバーヘッドがあります。繰り返しになりますが、これは、最も極端な負荷がかかる場合を除いて、実際的な問題になる可能性は低く、それが懸念される前に、他の多くの負荷関連の問題が発生する可能性があります。これは、両方のオーバーヘッドが現代のコンピューティング用語ではわずかであるためです。
パフォーマンスと信頼性が本当に心配なら、Unix ソケットを使い続けてください。
将来的に分散して負荷分散する計画がある場合、複数のホストをサポートする必要がある場合、UDP はより柔軟に対応します。
そうは言っても、最近ではこれは実際的な問題ではありません。ほとんどのサービスはローカル通信にも TCP を使用し、その上にZeroMQなどの他のサービスをレイヤー化します。ほとんどの場合、そのレベルのパフォーマンスについて心配する必要はありません。コードの作成と保守を容易にするソフトウェアを使用し、万一必要に応じてシステムをスケールアップします。柔軟に記述されていないソフトウェアを再設計するために工数を費やすよりも、新しいサーバーを問題に投げ込む方が簡単で安価です。
また、ZeroMQ (およびその他のメッセージ キューイング システム) は、利用可能な最も効率的な転送メカニズムを選択することに注意してください。たとえば、ZeroMQ は可能であれば IPC (プロセス間通信) を使用します。これは UDP や Unix ソケットよりもはるかに高速であり、必要に応じてインターネット経由で世界中の何千ものホストにスケールアップします。コードを変更する必要はありません。
時期尚早に最適化しないでください。