一:概念
允许通过网络进程之间的通信,也可以通过loopback进行本地进程之间通信。
unix socket
允许在本地运行的进程之间进行通信。
二:理论分析

unix socket减少了不必要的tcp开销,而tcp需要经过loopback,还要申请临时端口和tcp相关资源。但是,unix socket高并发时候不稳定,连接数爆发时,会产生大量的长时缓存,在没有面向连接协议的支撑下,大数据包可能会直接出错不返回异常。tcp这样的面向连接的协议,多少可以保证通信的正确性和完整性。
zheme
Ⅰ:测试代码
helthcheck(走项目框架的hello world)
Ⅱ:测试用例:
本机:
测试资源:1c/1.5G容器
测试工具:webbench
测试命令:
1:webbench -c N -t T http://localhost/
2:cat nginx-access.log | grep -v 200 | grep WebBench | wc -l
测试用例
一:Tcp socket的情况
1.1 100并发,持续30s
1.2 200并发,持续30s
1.3 500并发,持续30s
1.4 1000并发,持续30s
1.5 1500并发,持续30s
二:Unix socket的情况(放在/dev/shm中)
2.1 100并发,持续30s
2.2 200并发,持续30s
2.3 500并发,持续30s
三:Unix socket的情况(放在/tmp中)
3.1 100并发,持续30s
3.2 200并发,持续30s
3.3 500并发,持续30s
Ⅲ:测试结论
用例每秒钟响应请求数完成总请求数(pages/min)每秒钟传输数(bytes/sec)200请求数499请求数502请求数

四:结论(基于三的测试结果):
Unix domain socket和Tcp socket,在性能上没有显著差距。
当访问压力较小时(1),可以使用UnixSocket,因为不会占用额外的端口、且理论上效率较高。
当高并发的时候,Tcp Socket能表现出更高的稳定性,且性能并不差于UnixSocket,缺点是会占用大量的临时端口
参考文献:
Tcp&&Unix Socket比较 https://stackoverflow.com/questions/14973942/tcp-loopback-connection-vs-unix-domain-socket-performance
Tcp&&Unix Socket比较 https://www.cnxct.com/default-configuration-and-performance-of-nginx-phpfpm-and-tcp-socket-or-unix-domain-socket/
测试用例: https://blog.csdn.net/erlib/article/details/38488937
Tcp&&Udp 面相连接(物理连接、虚拟连接)和非面相连接 https://blog.csdn.net/qq_32523587/article/details/80523781
《本文》有 0 条评论