Unix 套接字与 TCP/IP 主机:端口

Unix 套接字与 TCP/IP 主机:端口

有人可以向我描述一下在服务器(Ubuntu,FWIW)上设置服务时使用 Unix 套接字文件与 tcp/ip localhost:port 的优缺点吗?

在这个特定的实例中,它适用于 Python WSGI 服务器(uWSGI),但我只是对一般感兴趣(例如,我知道您可以用两种方式设置 MySQL)。

我意识到使用 tcp/ip 意味着服务可以暴露给其他机器,但我只是想知道在本地访问服务时是否存在任何性能权衡。

干杯。

答案1

Unix 套接字速度稍快一些,因为没有 tcp 开销。如果您意识到这种性能损失是服务器负载的问题,那么您可能不会意识到这一点。如果您的服务器负载不是很高,那么您不会意识到这一点。

如果您使用 Jails (FreeBSD) 或其他虚拟化技术将 MySQL 服务器与 Web 服务器分开,则通常会使用 tcp/ip 设置而不是套接字。不过防火墙规则需要限制访问。

您需要确定您的系统是否负载很重,因此套接字是必须的,或者您可以专注于良好的系统设计(分离服务),那么 tcp/ip 解决方案会更好。

因此,请简短回答:

是的,性能上确实有差异,套接字速度更快。如果您的服务器负载不高,只需选择更适合您系统设计的方案即可。

答案2

这基本上是性能和灵活性之间的权衡。Unix 域套接字将为您提供更好的性能,而连接到本地主机的套接字将为您提供更好的可移植性。您只需将 IP 地址从本地主机更改为其他主机名,即可轻松将服务器应用程序移动到另一个操作系统。

Unix 域套接字使用本地文件系统在服务器和客户端进程之间创建 IPC 机制。当 Unix 域套接字连接时,您将在 /var 中的某个位置看到一个文件。

如果您正在寻找纯粹的终极性能解决方案,您可能想要探索共享内存 IPC。但这有点复杂。

答案3

Unix 域套接字的优点。

  1. 可以通过 Unix 用户权限系统来管理访问,方法是在套接字本身上设置权限,或者通过服务器读取连接客户端的用户名。
  2. 无意中将套接字暴露给外界的可能性较小。例如,如果服务器还运行 Web 代理,则可能会无意中允许连接到本地主机上的套接字。

Unix 域套接字的缺点

  1. 不能移植到非 UNIX 系统。
  2. 与 chroot、jail 或类似系统配合可能会不太方便

相关内容