关于 PHP 高并发,请教各位

2022-05-26 09:53:36 +08:00
 minuo0day

H5 页面的核酸系统,前后端分离,前端 VUE ,后端 PHP 自己搭的 larave 框架,数据库 mysql,Nginx , 三台负载均衡的天翼云应用服务器,都是 32 核 64G ,一台数据库服务器 16 核 32G ; 基本业务逻辑: 用户端,进入页面绑定自己身份证号手机号乡镇信息等个人信息,前端凭借身份证号直接生成个人二维码,向医护人员出示二维码,1 个小时需要做 40 万人口的核酸; 医护端,手机号身份证号登录或者申请,登入先选采集点,扫开箱码,再扫试管码选择十合一或二十合一,再点击添加人员打开扫一扫扫居民个人码添加;

24 日早上 4 点 30 ,医护人员开始大量的开始进入程序扫箱码开箱,并在后台开始大量的添加临时采集点,于 4 点 58 分,CPU 使用率 100%,系统崩溃,日志显示,瞬间请求数 1 万 4 ,重启在进入还是崩;

24 日下午系统整体挪到阿里云服务器,也是三台负载均衡的服务器,三台 32 核 64G ,加了 OSS ,用了阿里云的云数据库 RDS 版,主实例 8 核 16G ,只读数据库服务器 8 核,压测 10 分钟 15 万人,和 4000 医护人员同时在线也崩了,数据库和应用服务器的 CPU 利用率都打到了 100%,为了保障第二天不出问题,临时调大了一台应用服务器调到了 52 核,并同时把读写的两台数据库服务器都调到了最大 104 核,第二天检测才扛过去。

问:我们虽然调大了服务器的配置,但调大以后压测 10 分钟 20 万人和 4000 医护在线,服务器承载 20%都上不去,但前端页面会变得非常慢,基本上 10 几秒才能打开,这种情况请大神指点

18788 次点击
所在节点    PHP
220 条回复
ferock
2022-05-26 16:56:19 +08:00
@limingxinleo #128

现在改架构?你这是可行性方案么?何况性能瓶颈是换个架构就解决了?如果是屎山,用其他架构依然是一坨屎山
你怎么不说:“ 底层用 c 写 so 保证速度嗖嗖的?用 clang 真的很容易就顶住了。。。哪来这么多麻烦事呢”

这种方向正确的废话,对 LZ 有什么帮助?
ferock
2022-05-26 16:58:39 +08:00
@JaguarJack #131

“明显是代码写的有问题” +1
最反感那种不分析实际问题,动不动就大动干戈的人。

写出垃圾代码的项目,换什么都依然是产出垃圾代码
HalfaMillion
2022-05-26 16:59:33 +08:00
@ferock 他只管推自己的框架,这么牛批的 hyperf 当年不知为何 12306 没用他
rapperx2
2022-05-26 17:04:58 +08:00
“但前端页面会变得非常慢,基本上 10 几秒才能打开”, 端口数量不够用了吧,优化下 Linux ?
limingxinleo
2022-05-26 17:07:57 +08:00
@HalfaMillion 你这就是抬杠了,12306 你换什么都顶不住,早就不是一个框架能解决的问题了。

但是楼主这个问题,显然现在已经通过硬件加配顶住了,下一步重构是无可避免的。

另外,我确实来推一波框架,用 Swoole 真没这么多麻烦事。Swoole 的框架都自带连接池,这个问题绝对不是什么大问题。

@ferock 而且我第二个回复也说过了,楼主这个问题大概率是 MySQL 的问题,加个代理,80%的可能性可以解决这个问题。
star7th
2022-05-26 17:08:44 +08:00
作为一个有用 php 跑过生产环境的人,我想说,你这个服务器配置没问题,甚至说冗余了。我觉得大概率问题出现在 IO 上,导致没发挥出服务器性能。重点检查 nginx 的并发设计和 mysql 的慢查询日志。php 本身大概率不是瓶颈。
limingxinleo
2022-05-26 17:09:35 +08:00
@ferock @HalfaMillion 另外我真的懒得在这里推 Swoole ,这里的 PHP 氛围早就感受过了。

如果不是碰到这么个帖子,群友发给我的,我还真懒得来看。

不过在 PHP 环境里讨论高并发,确实能引出一大堆人来。
HalfaMillion
2022-05-26 17:11:56 +08:00
@limingxinleo 不是你个 213 上来说什么用 hyperf 秒杀一切问题?
limingxinleo
2022-05-26 17:12:28 +08:00
@ferock 另外,我还记得你。。我还记得你当时在这里说 Swoft 。。主动引战
ToBeHacker
2022-05-26 17:12:52 +08:00
进程线程模型处理大并发是很弱的
rapperx2
2022-05-26 17:13:19 +08:00
@defunct9 大哥开 SSH 让你上去看看?
HalfaMillion
2022-05-26 17:13:23 +08:00
@limingxinleo 换成 Hyperf 框架,解决战斗!! 不是你原话?
limingxinleo
2022-05-26 17:13:28 +08:00
@HalfaMillion 我可没说秒杀一切问题,我只是说解决战斗而已。

一切问题这么绝对的事情,是你说的
HalfaMillion
2022-05-26 17:15:32 +08:00
@limingxinleo 你咋不说用 c 语言重写呢?
HalfaMillion
2022-05-26 17:15:44 +08:00
@limingxinleo 你咋不上天呢?
limingxinleo
2022-05-26 17:15:56 +08:00
@HalfaMillion 不过说真的,这个量级,换成 Hyperf 确实很容易就解决。

当然,最主要的原因还是因为 Swoole 的能力而已。

就算不用 Swoole ,重构成 webman ,加个 Mysql 连接池也可以处理。

当然,SQL 优化这些,肯定也要慢慢处理。
limingxinleo
2022-05-26 17:17:01 +08:00
@HalfaMillion 为啥要上天呢?这个量级跟真正的高并发比起来,真的不大。。。

FPM 、同步 IO 真的有瓶颈。。。

你不能不承认
limingxinleo
2022-05-26 17:18:04 +08:00
@HalfaMillion 而且,系统迟早都要重构的,重构的时候选型是必要的。

就算是屎山,你也得铲掉。
noyidoit
2022-05-26 17:22:04 +08:00
@limingxinleo 性能差距确实巨大, 我以前用 ab 小测了一下, 就一个输入 helloworld 的接口, swoole QPS 10000+, laravel 400...... laravel 文档里说过的优化部署都已经做过了
xcsoft
2022-05-26 17:23:28 +08:00
前端使用的是 vue. 打开速度慢 可以考虑将把静态文件加上 cdn 吧。
后端尝试使用 workerman 等框架

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/855361

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX