[通讯模型]php-fpm使用unix sock通信和TCP的使用场景及稳定性探讨。

jackxiang 2013-10-28 15:02 | |
背景:线上用unix socket线下测试用tcp 9000,配置一样上线会出问题的。再就是这两种的区别。
两种不同配置会在Nginx上反映出来的:
125 connect() to unix:/usr/local/php/var/run/php-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.136.1, server: mytv.xiyou.cntv.cn, request:

    在你fpm启动脚本php-fpm.conf里配置,在php-fpm.cnf里设置,AF_UNIX稳定性比TCP要高多了,unix socket或者TCP,unix socket的好处是性能更好,一个是AF_UNIX,本地管道,只能本机用一个AF_INET,通过网卡通讯,听说unix不如inet稳定?一个是AF_UNIX,本地管道,只能本机用一个AF_INET,通过网卡通讯。nginx如果打算和fpm在同一台机器,那就用unix sock
如果想分开部署,可以用TCP
基本还是tcp吧
这年头,哪还有一台机器什么都干的事
unix socket是一个环形内存buffer,内核保证顺序
淘宝这里前端接入层是LVS,RS就是nginx + php-fpm,它们之间使用unix sock通信,每台机器都配置一个nginx+php。
回忆未来-向东-Jàck()  下午 03:08:27
不同在:
listen = 127.0.0.1:9000
listen = /usr/local/php/var/run/php-fpm.sock
Nginx在配置上也就不同了:
fastcgi_pass  127.0.0.1:9000;  
fastcgi_index index.php;
include fcgi.conf;

fastcgi_pass  unix:/usr/local/php/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;


半桶水  下午 03:08:33
lvs来分配哪台机器?
话说lvs还没用过
Rango  下午 03:08:58
所有的机器都接入LVS,作为LVS的RS
Rango  下午 03:10:38
Linux集群必备
回忆未来-向东-Jàck()  下午 03:11:49
腾讯有TGW。
Rango  下午 03:12:07
腾讯也用LVS
半桶水  下午 03:12:10
lvs装在哪?
Rango  下午 03:12:39
lvs是运行在内核态的
找一台性能强点的机器部署LVS,
楚吟风  下午 03:13:04
工作在四层
Rango  下午 03:13:10
然后域名解析过来即可
其他的web机器全部接入lvs
楚吟风  下午 03:13:23
听说大流量产生的中断
会导致cpu0耗尽?
半桶水  下午 03:13:34
相当于nginx的upstream?
Rango  下午 03:13:45
比nginx强太多了
楚吟风  下午 03:13:52
lvs保证网络可用
Rango  下午 03:13:58
lvs相当于是一台4层交换机
楚吟风  下午 03:14:01
ngx那是应用层的了  7层
H X M()  下午 03:14:14
缺点就是一定要找一台机器做lvs
半桶水  下午 03:14:17
我知道,
楚吟风  下午 03:14:28
lvs  cpu0 100% 的问题
rango了解吗
Rango  下午 03:14:28
思科的硬件四层交换机贵的离谱
半桶水  下午 03:14:29
我的意思是lvs还是个单点?
Rango  下午 03:14:40
@楚吟风 老内核会这样
楚吟风  下午 03:14:40
lvs配合keepalived高可用
soga
Rango  下午 03:15:32
新内核支持网卡多队列,中断会分配到每一个核上,不存在此问题
楚吟风  下午 03:16:04
不过一个网卡只能在绑定到一个cpu上吧
Rango  下午 03:16:31
老的Linux是用CPU0来做网络中断的,所以如果CPU0到100%,其他核就算空闲也没用
半桶水  下午 03:16:56
lvs这个4层负载高级货暂时还没用过。
Rango  下午 03:17:08
lvs确实单点,不过问题不大
lvs一秒能处理百万量级的数据包
lvs也有双机热备的机制,问题不大
楚吟风  下午 03:17:48
cat /proc/interrupts
可以看到网卡绑定到一个核上
也就是说无法发挥多核优势了吧?
Rango  下午 03:17:59
哦,那就是了
不会啊,可以发挥多核优势。只是网络中断放在CPU0上
楚吟风  下午 03:19:11
貌似听人说过
大流量下
网卡中断处理不过来了
那得多高流量啊
Rango  下午 03:20:08
很有可能的。比如系统负载本来就高,CPU0还要额外做网络中断处理,自然会到100%,
Rango  下午 03:21:33
这种情况下应该用CPU亲和设置,把worker进程绑定到其他核上,让CPU0的负担小一些
楚吟风  下午 03:22:09

这种级别,该上F5了
Rango  下午 03:22:22
贵啊
楚吟风  下午 03:22:36
哈哈
没几家能到这种流量啊
也就bat了吧
Rango  下午 03:23:37
bat也用不起啊
估计只有国家才有这个实力
半桶水 下午 03:24:29
一千个屌丝(pc)干掉几个高富帅还是可以的。
楚吟风  下午 03:30:29
我这边都是用的tcp
N台机器专门跑fpm
一台ngx做webserver
还没搞单点
Rango  下午 03:32:13
ngx处理能力有限
楚吟风 下午 03:33:10
还凑合
rps  30k
活动高峰也就是10k
暂时扛得住
recoye  下午 03:38:25
一台nginx几台fpm的?
楚吟风  下午 03:45:06
目前有8台
php跑着业务,rps单机4k左右
楚吟风  下午 03:46:08
打算搞kvm虚拟化
64核太浪费了
load最高也就2
回忆未来-向东-Jàck  下午 03:46:21
我哥就是卖F5的,说是腾讯都不买自己做。
淘宝还真买F5?
只卖了几个secureID卡给腾讯了,还很便宜。
Rango 下午 03:48:33
腾讯连token都自己搞了


以上大部分来自PHP的swoole开发组讨论。

我们大部分默认的nginx连接方式为php-cgi监听127.0.0.1:9000的方式,刚刚测试了使用socket方式连接,速度飞快啊!
nginx配置方法:
location ~ \.php$ {
fastcgi_pass unix:/dev/shm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /opt/www_data/code/public_html$fastcgi_script_name;
include fastcgi_params;
}

5.2.xx版本php
php-fpm配置方法:
<value name="listen_address">/dev/shm/php-fpm.sock</value>
5.3.xx版本php
listen = /dev/shm/php-cgi.sock
注:这里(/dev/shm)socket在内存中了,用来提高速度。

来自:http://hxl2009.blog.51cto.com/779549/875000

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/6766/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2013-10-28 16:06
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]