サーバー(Ubuntu、FWIW)でサービスを設定するときに、Unixソケットファイルとtcp/ip localhost:portを使用する場合の長所と短所を誰かに教えてもらえますか?
この特定の例では、Python WSGIサーバー(uWSGI))を対象としていますが、私は一般的に興味があります(たとえば、MySQLを両方の方法で設定できることを知っています)。
Tcp/ipを使用すると、サービスを他のマシンに公開できることを理解していますが、サービスにローカルにアクセスするときにパフォーマンスのトレードオフがあるかどうかだけに関心があります。
乾杯。
Unixソケットはtcp-overheadがないため、少し高速です。このパフォーマンスの低下がサーバー負荷の問題であることがわかった場合。サーバーの負荷が非常に高くない場合は、認識されません。
Jails(FreeBSD)またはその他の仮想化技術を使用して、 WebサーバーのMySQLサーバーでは、ソケットの代わりにtcp/ipセットアップを使用することがよくあります。ただし、ファイアウォールルールはアクセスを制限する必要があります。
ソケットが必須であるか、ニースシステム設計(サービスの分離)に集中できるように、システムの負荷が高いかどうかを確認する必要がある場合は、tcp/ipソリューションの方が適しています。
長い答えを短くしてください:
はい、パフォーマンスの違いがあります。ソケットの方が高速です。サーバーの負荷が高くない場合は、システムの設計により適したものを選択してください。
これは基本的に、パフォーマンスと柔軟性の間のトレードオフです。 Unixドメインソケットを使用すると、パフォーマンスが少し向上しますが、localhostに接続されたソケットを使用すると、移植性が少し向上します。 IPアドレスをlocalhostから別のホスト名に変更するだけで、サーバーアプリを別のOSに簡単に移動できます。
Unixドメインソケットは、ローカルファイルシステムを使用して、サーバーとクライアントプロセスの間にIPCメカニズムを作成します。Unixドメインソケットが接続されると、/ varのどこかにファイルが表示されます。
純粋に究極のパフォーマンスソリューションを探している場合は、共有メモリIPCを検討することをお勧めします。しかし、それはもう少し複雑です。
Unixドメインソケットの長所。
Unixドメインソケットの短所