web-dev-qa-db-ja.com

UnixソケットとTCP / IPホスト:ポート

サーバー(Ubuntu、FWIW)でサービスを設定するときに、Unixソケットファイルとtcp/ip localhost:portを使用する場合の長所と短所を誰かに教えてもらえますか?

この特定の例では、Python WSGIサーバー(uWSGI))を対象としていますが、私は一般的に興味があります(たとえば、MySQLを両方の方法で設定できることを知っています)。

Tcp/ipを使用すると、サービスを他のマシンに公開できることを理解していますが、サービスにローカルにアクセスするときにパフォーマンスのトレードオフがあるかどうかだけに関心があります。

乾杯。

43
Ludo

Unixソケットはtcp-overheadがないため、少し高速です。このパフォーマンスの低下がサーバー負荷の問題であることがわかった場合。サーバーの負荷が非常に高くない場合は、認識されません。

Jails(FreeBSD)またはその他の仮想化技術を使用して、 WebサーバーのMySQLサーバーでは、ソケットの代わりにtcp/ipセットアップを使用することがよくあります。ただし、ファイアウォールルールはアクセスを制限する必要があります。

ソケットが必須であるか、ニースシステム設計(サービスの分離)に集中できるように、システムの負荷が高いかどうかを確認する必要がある場合は、tcp/ipソリューションの方が適しています。

長い答えを短くしてください:

はい、パフォーマンスの違いがあります。ソケットの方が高速です。サーバーの負荷が高くない場合は、システムの設計により適したものを選択してください。

40

これは基本的に、パフォーマンスと柔軟性の間のトレードオフです。 Unixドメインソケットを使用すると、パフォーマンスが少し向上しますが、localhostに接続されたソケットを使用すると、移植性が少し向上します。 IPアドレスをlocalhostから別のホスト名に変更するだけで、サーバーアプリを別のOSに簡単に移動できます。

Unixドメインソケットは、ローカルファイルシステムを使用して、サーバーとクライアントプロセスの間にIPCメカニズムを作成します。Unixドメインソケットが接続されると、/ varのどこかにファイルが表示されます。

純粋に究極のパフォーマンスソリューションを探している場合は、共有メモリIPCを検討することをお勧めします。しかし、それはもう少し複雑です。

11
IAPaddler

Unixドメインソケットの長所。

  1. アクセスは、ソケット自体に権限を設定するか、サーバーが接続しているクライアントのusenameを読み取ることにより、Unixユーザー権限システムを介して管理できます。
  2. 誤ってソケットを外界にさらす可能性が低くなります。たとえば、サーバーがWebプロキシも実行している場合、ローカルホスト上のソケットへの接続が誤って許可される可能性があります。

Unixドメインソケットの短所

  1. UNIX以外のシステムには移植できません。
  2. Chroots、jailなどで扱いにくい場合があります
3
Peter Green