关于 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 几秒才能打开,这种情况请大神指点

18378 次点击
所在节点    PHP
220 条回复
815979670
2022-05-26 09:58:58 +08:00
话说你们当时已经预料到会有高并发场景了,为啥还要考虑用 Laravel 写,不说 Swoole 了 Tp 都比这个快。。。
holystrike
2022-05-26 09:59:43 +08:00
上 swoole
justfindu
2022-05-26 10:00:54 +08:00
是否尝试把医护录入和居民数据库分开. 码数据加密缓存输出.
zhs227
2022-05-26 10:01:17 +08:00
关键的部分使用更高性能的库重写,比如 swoole ,或者用 go 或者 java 。注意缓存和限流
larval 这种需要经过仔细调优才能达到很高的性能
IDAEngine
2022-05-26 10:02:42 +08:00
主要是要找到瓶颈在哪,服务器内核调度也要针对性优化的,按道理 Laravel 没这么差劲
abigeater
2022-05-26 10:03:19 +08:00
根据你说的,感觉后端好像也没瓶颈了... 前端的 js css 文件是从服务器获取? 全部挪动到 cdn 上试试?
isno
2022-05-26 10:03:37 +08:00
收费分析系统,解决问题,你们接受不? 接受联系我
minuo0day
2022-05-26 10:04:32 +08:00
@815979670
@zhs227
@holystrike
这个是历史遗留问题,一开始这个程序是单点预约检测的使用的业务逻辑,后来临时赶鸭子上架,改成了全民核酸的平台,没来得及
v7788120
2022-05-26 10:05:18 +08:00
php 不懂,java 还是有很多解决方案的
leaf
2022-05-26 10:06:54 +08:00
Laravel 就不适合高并发,我们之前一次活动也被他坑了,后面用 go 重写了核心。
lp7631010
2022-05-26 10:07:18 +08:00
不要告诉我 你们的前端资源是直接访问的服务器。。。
gdt
2022-05-26 10:07:28 +08:00
php 异步框架,swoole 或者 workerman 这些
heyjei
2022-05-26 10:07:34 +08:00
这种情况应该从应用层面去优化:
1. 数据库服务器和应用服务器的 CPU 100%,可以看到什么是进程占用大量的 CPU 嘛
2. 检查下 eloquent 是否有生成多余不用的 SQL 查询
3. 检查下是否有把数据从 MySQL 取出来放到 PHP 里面做各种循环、统计等数据计算处理
4. 检查下 MySQL 是否有查询没有走索引
5. PHP 有没有 opcache
6. Laravel Deployment Optimization 有没有做
7. Nginx 的静态文件压缩有没有做
8. Nginx 的静态文件缓存有没有做
gy123
2022-05-26 10:08:01 +08:00
nginx 是自己搭建的?一台?看看和 nginx 转发到其中一台后端服务时本地端口号用尽有没有关系?
minuo0day
2022-05-26 10:08:06 +08:00
@IDAEngine
@abigeater
瓶颈在接口请求,分析日志看到的是采集点调用的接口请求数量过高,递归把自己写死了,这个问题已经解决了,但压测的情况下,程序打开过于缓慢,这个问题不知道怎么解决
minuo0day
2022-05-26 10:08:42 +08:00
@lp7631010 不是
gy123
2022-05-26 10:09:39 +08:00
@minuo0day 打开慢,带宽打满了吗
sheeta
2022-05-26 10:12:19 +08:00
用 Laravel 就是个最大的错误,benchmark 排名垫底的玩意来做高并发咋这么想不开呢
lp7631010
2022-05-26 10:12:34 +08:00
前端资源放 oss ?搞了单独的域名配 cdn 访问前端资源吗
leo108
2022-05-26 10:13:12 +08:00
程序打开过于缓慢需要先确认瓶颈在哪,大概率是 API 响应慢,开启 PHP-FPM 慢日志,看看是在哪一步慢。

另外就是调高 FPM 进程数,改成静态进程数,因为 FPM 自身的动态进程配置很难应对短时间内爆发增长的请求。

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

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

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

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

© 2021 V2EX