Unix socket与TCP

详情参见 本链接

总结一下,使用Unix socket与直接使用TCP具有以下不同:

  • UNIX socket使用文件系统作为URI,因此可以使用文件系统的权限管理控制哪些进程可以连接该Socket
  • localhost回环接口被有意设计为无视“用于连接本地”这一信息,因此系统没有对回环接口上的TCP连接较之普通TCP连接做任何额外的优化。这意味着它是真正的TCP连接:超过MTU-size的包将被分割为多个数据段,每个数据段将需要包装头部,计算checksum,写入发送缓冲区,进行路由,等等,再到达接收缓冲区。UNIX socket则利用了“用于连接本地”这一信息进行了优化,在传输时直接将数据写入接收缓冲区

Overhead

When the server and client benchmark programs run on the same box, both the TCP/IP loopback and unix domain sockets can be used. Depending on the platform, unix domain sockets can achieve around 50% more throughput than the TCP/IP loopback (on Linux for instance). The default behavior of redis-benchmark is to use the TCP/IP loopback.

Factors impacting redis performance

参考 redis 对 TCP over lo和 UNIX socket 进行 benchmark 的结果,根据平台的不同,UNIX socket 能较 TCP over lo 多承担50%左右的吞吐。

但在频繁使用 redis pipeline 的情况下,TCP over lo 较 UNIX socket 产生的 overhead 将趋向于降低。这是符合直觉的,使用 pipeline 相当于将 n 个指令产生的 n 次 TCP wrapping overhead 降低至1次(或若干次,取决于 MTU )。

文章已创建 23

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部