首页 > php > nginx和php-fpm两种通信方式对比UnixSocket和TcpSocket
2021
11-15

nginx和php-fpm两种通信方式对比UnixSocket和TcpSocket

一:概念

tcp socket

允许通过网络进程之间的通信,也可以通过loopback进行本地进程之间通信。

unix socket

允许在本地运行的进程之间进行通信。

二:理论分析

c7ea19e78735942742987d62632aeba.jpg


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请求数

image.png

四:结论(基于三的测试结果):

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 条评论

留下一个回复