关于使用 ip:port 或 unixsock 连接外部服务的白目问题 ...

iCode
  • 2.2k

这其实是个很白痴的问题 ... 但妈妈说若不懂就要问 ...

只是我不太知道该怎么精确描述这个问题 ... 所以很难依靠搜索引擎取得答案 ...

于是只好来发问耽误大家一点时间了 ...

众所周知在程序中连接一个外部服务有两种方式 ...

make_connection( 'hostname-or-ip:port' ); // e.g. 127.0.0.1:11111
make_connection( '/path/to/unix.sock' ); // e.g. /tmp/icode.sock

我可以理解如果有多台服务器 ... 那么需要使用第一种方式指定外部服务所在的机器 ...

但假如程序和所需要调用的服务在同一台机器上呢 ..?

我应该用 127.0.0.1:11111 的方式来连接 ... 还是用 unixsock 来连接 ..?

这两种方式各有什么优缺点 ..? 在怎样的情况下我该选择哪个 ..?

感觉上如果用第一种方式的话 ... 每次连接都要走一次 TCP/IP ... 性能应该偏低才是 ...

但很多人都在单机上用第一种 ... 说明 unixsock 也许有更严重的瓶颈 ... 是什么呢 ...

如果这样说还是不明确的话 ...

假设一个场景 ... 单台机器上高并发的 web 应用 ... 需要连接一个外部服务 ...

使用这两种方式哪个效率更高哪个更稳定 ... 为什么 ..?

评论
阅读 2.9k
1 个回答

MySQL/X Server在本机默认用的是unix domain socket file,可以推断它不存在性能瓶颈的问题。

AF_INET的数据包要通过tcp/ip栈,而AF_UNIX的数据包是通过文件系统交换的,理论上AF_UNIX的开销要比AF_INET更小,性能应该会更好,而且可以通过文件系统的权限来进行权限管理,但是缺点就是只能用于同一个Unix/Linux机器上。

撰写回答

登录后参与交流、获取后续更新提醒

宣传栏