Unix soketi vs TCP / IP ana bilgisayarı: port


42

Birisi bana bir tcp / ip localhost vs bir Unix soket dosyası kullanmanın avantajlarını ve dezavantajlarını bana açıklayabilir mi?

Bu özel örnekte bir Python WSGI sunucusu (uWSGI) içindir, ancak genel olarak ilgileniyorum (örneğin, MySQL'i her iki şekilde de kurabileceğinizi biliyorum).

Tcp / ip kullanmanın, hizmetlerin diğer makinelere maruz kalabileceği anlamına geldiğini biliyorum, ancak yalnızca hizmetlere yerel olarak erişirken herhangi bir performans değişikliği olup olmadığıyla ilgileniyorum.

Şerefe.


1
Hem mükemmel cevaplar hem de gerçekten faydalı - teşekkürler! :)
Ludo

Yanıtlar:


40

Unix soketleri tcp ek yükü olmadığından biraz daha hızlıdır. Bu performansın farkına varırsanız, sunucu yükü sorunudur. Çok yüksek bir sunucu yüküne sahip değilseniz onu tanımazsınız.

Örneğin, MySQL-Server'ı Web sunucusundan ayırmak için Jails (FreeBSD) veya başka bir sanallaştırma teknolojisi kullanıyorsanız, genellikle soketler yerine tcp / ip kurulumunu kullanırsınız. Güvenlik duvarı kurallarının erişimi olsa da kısıtlaması gerekir.

Sisteminizin ağır yük altında olup olmadığını öğrenmeniz gerekir, böylece bir soketin bir zorunluluk olması gerekir veya güzel bir sistem tasarımına odaklanabilir (hizmetleri ayırarak), o zaman bir tcp / ip çözümü daha iyi olacaktır.

Bu yüzden uzun bir cevap kısa olun:

Evet, performans farkı var, prizler daha hızlı. Yüksek sunucu yükü çekmiyorsanız, sisteminizin tasarımına en uygun olanı seçin.


3
Re: soketler daha hızlı ... ikisi de yuva değil mi?
Bart Silverstrim

4
@Bart Silverstrim: Hayır, yuvalar yuvadır; TCP'nin sokete benzeyen bir API'si var
Javier

7
Onlara "Unix soketleri" ve "İnternet soketleri" dendiğine inanıyorum. ( socket(AF_INET, SOCK_STREAM, ...))
yerçekimi

1
Sadece php-mysql (unix vs tcp-socket, her ikisi de localhost) ile birkaç mysql-sorguları test ettim. örneğin, taşıma dışı faktörleri ortadan kaldırmak için "SQL_NO_CACHE 1" i seçin. ölçülebilir bir fark yoktu. BOTH ortalama 0.25 ms idi, BOTH için en iyi zaman 0.19 ms idi.
jens

11

Temel olarak performans ve esneklik arasında bir denge. Unix alan soketleri size biraz daha iyi performans verirken, localhost'a bağlı bir soket size biraz daha iyi taşınabilirlik sağlar. IP adresini localhost'tan farklı bir ana bilgisayar adına değiştirerek sunucu uygulamasını kolayca başka bir işletim sistemine taşıyabilirsiniz.

Bir Unix etki alanı soketi, sunucu ve istemci işlemleri arasında bir IPC mekanizması oluşturmak için yerel dosya sistemini kullanır. Unix alan soketi bağlıyken bir yerde / var bir dosya göreceksiniz.

Tamamen nihai performans çözümü arıyorsanız, paylaşılan bir hafızanın IPC'sini keşfetmek isteyebilirsiniz. Ancak, bu biraz daha karmaşık.


3

Unix alan adı yuvalarının avantajları.

  1. Erişim, Unix kullanıcı izin sistemi aracılığıyla soketin üzerindeki izinleri ayarlayarak veya bağlanan istemcinin kullanıcı adını okuyan sunucu tarafından yönetilebilir.
  2. Yanlışlıkla soketi dış dünyaya maruz bırakma şansınız azalır. Örneğin, sunucu bir web proxy de çalıştırıyorsa, bu, yanlışlıkla yerel ana bilgisayardaki soketlere bağlantı yapılmasına izin verebilir.

Unix etki alanı soketlerinin Eksileri

  1. Unix olmayan sistemlere taşınabilir değildir.
  2. Chroot, hapishane veya benzeri garip olabilir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.