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

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

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

我意识到,使用tcp / ip意味着服务可以暴露给其他机器,但我只是有兴趣在本地访问服务时是否有任何性能折衷。

干杯。

因为你没有tcp开销,所以Unix套接字速度要快一些。 如果您意识到这种性能损失是服务器负载的问题。 如果你没有很高的服务器负载,你将无法识别它。

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

你需要知道你的系统是否处于沉重的负载之下,以至于套接字是必须的,或者你可以专注于一个好的系统devise(分离服务),那么TCP / IP解决scheme会更好。

所以请简短地回答一下:

是的,有一个性能差异,套接字更快。 如果你没有承受高服务器负载,只要select适合你的系统devise的东西。

这基本上是性能和灵活性之间的折衷。 Unix域套接字会给你提供更好的性能,而连接到本地主机的套接字可以提供更好的可移植性。 只需将IP地址从本地主机更改为不同的主机名,即可轻松将服务器应用程序移至其他操作系统。

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

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

Unix域套接字的优点

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

Unix域套接字的缺点

  1. 不能移植到非Unix系统。
  2. 可以与chroots,监狱或类似的尴尬