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


42

サーバー(Ubuntu、FWIW)でサービスをセットアップするときに、Unixソケットファイルとtcp / ip localhost:portを使用することの長所と短所を誰かに説明していただけますか?

この特定のインスタンスでは、Python WSGIサーバー(uWSGI)用ですが、一般的なことに興味があります(たとえば、両方の方法でMySQLをセットアップできることを知っています)。

tcp / ipを使用することは、サービスを他のマシンに公開できることを意味しますが、サービスにローカルにアクセスする際にパフォーマンスのトレードオフがあるかどうかだけに興味があります。

乾杯。


1
素晴らしい答えと本当に便利の両方-ありがとう!:)
ルード

回答:


40

Unixソケットは、tcpオーバーヘッドがないため、少し高速です。このパフォーマンスの低下を認識した場合、サーバーの負荷が問題になります。サーバーの負荷があまり高くない場合、それを認識できません。

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

ソケットが必須であるためにシステムに高負荷がかかっているかどうかを調べる必要があるか、素敵なシステム設計(サービスの分離)に集中できる場合は、tcp / ipソリューションの方が良いでしょう。

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

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


3
再:ソケットは高速です...両方のソケットではありませんか?
バートシルバース

4
@Bart Silverstrim:いいえ、ソケットはソケットです。TCPにはソケットのようなAPIがあります
ハビエル

7
それらは「Unixソケット」と「インターネットソケット」と呼ばれていると思います。(socket(AF_INET, SOCK_STREAM, ...)
悲惨さ

1
php-mysqlでいくつかのmysqlクエリをテストしました(unixとtcp-socket、両方ともlocalhost)。たとえば、「select SQL_NO_CACHE 1」は、非トランスポート要因を排除します。測定可能な差はありませんでした。両方の平均時間は0.25ミリ秒で、両方の最適時間は0.19ミリ秒でした。
イェンス

11

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

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

純粋に究極のパフォーマンスソリューションを探している場合は、共有メモリIPCを調べてください。しかし、それはもう少し複雑です。


3

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

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

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

  1. UNIX以外のシステムには移植できません。
  2. chroots、jailまたは同様のもので扱いにくい
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.