Könnte mir bitte jemand die Vor- und Nachteile der Verwendung einer Unix-Socket-Datei gegenüber einem TCP / IP-Localhost: -Port beim Einrichten von Diensten auf einem Server (Ubuntu, FWIW) beschreiben?
In diesem speziellen Fall handelt es sich um einen Python-WSGI-Server (uWSGI), aber ich interessiere mich nur für das Allgemeine (z. B. ich weiß, dass Sie MySQL auf beide Arten einrichten können).
Mir ist klar, dass die Verwendung von TCP / IP bedeutet, dass die Dienste anderen Computern zugänglich gemacht werden können, aber ich bin nur daran interessiert, ob es beim lokalen Zugriff auf Dienste Leistungseinbußen gibt.
Prost.
Antworten:
Unix-Sockets sind etwas schneller, da Sie keinen TCP-Overhead haben. Wenn Sie feststellen, dass dieser Leistungsverlust eine Frage der Serverlast ist. Wenn die Serverlast nicht sehr hoch ist, wird sie nicht erkannt.
Wenn Sie Jails (FreeBSD) oder eine andere Virtualisierungstechnologie verwenden, um z. B. den MySQL-Server vom Webserver zu trennen, verwenden Sie häufig das TCP / IP-Setup anstelle von Sockets. Die Firewall-Regeln müssen den Zugriff jedoch einschränken.
Sie müssen herausfinden, ob Ihr System stark ausgelastet ist, damit ein Socket ein Muss ist, oder Sie können sich auf ein ansprechendes Systemdesign (Trennen von Diensten) konzentrieren. Dann ist eine TCP / IP-Lösung besser.
Also mach eine lange Antwort kurz:
Ja, es gibt einen Leistungsunterschied, die Steckdosen sind schneller. Wenn Sie nicht unter hoher Serverauslastung leiden, wählen Sie einfach, was besser zum Design Ihres Systems passt.
quelle
socket(AF_INET, SOCK_STREAM, ...)
)Es ist im Grunde ein Kompromiss zwischen Leistung und Flexibilität. Unix-Domain-Sockets bieten eine etwas bessere Leistung, während ein mit localhost verbundener Socket die Portabilität verbessert. Sie können die Server-App problemlos auf ein anderes Betriebssystem verschieben, indem Sie einfach die IP-Adresse von localhost in einen anderen Hostnamen ändern.
Ein Unix-Domain-Socket verwendet das lokale Dateisystem, um einen IPC-Mechanismus zwischen den Server- und Clientprozessen zu erstellen. Sie sehen eine Datei in / var irgendwo, wenn der Unix-Domain-Socket verbunden ist.
Wenn Sie nur die ultimative Performance-Lösung suchen, sollten Sie einen IPC mit gemeinsamem Speicher ausprobieren. Aber das ist etwas komplexer.
quelle
Vorteile von Unix-Domain-Sockets.
Nachteile von Unix-Domain-Sockets
quelle