PHP实战PHP实战

记一次商业项目的优化过程

2019-04-30  本文已影响1人  思梦PHP

时间追溯到2月份,一个历时20天的小项目上线了。

20天。能干点啥,你我都能懂吧,但是还是赶出来了

项目背景是一个类似企业分享直播的平台(结合第三方),根据客户需求,这次分享最多300人参加(线上=移动+PC),然后架构设计拟定为单体架构,不用过多优化,正常开发就可以。但是就在直播开始的前几分钟,后台出现了,数据库连接数过多,系统一会直接崩了。

之后迅速查看阿里云后台监控发现tcp连接居然有5000,小声(wocao)

说好的不到300人呢,你是不是在逗我。

之后迅速升级网站配置,重启服务器,之后还是崩溃?

因为阿里云的服务器(其他的服务器不知)有自我保护意识,到达一定的并发,将自启保护措施(类似),然后这就相当于我们升级分配置服务器将无法使用,之后调整服务器的配置就行优化

然后重启,趋于稳定,但是这已经是开播的10分钟之后,聊天室此时各种抱怨,怎么刚才进不来。。。。

最终直播结束,这也宣布这次直播服务失败(编写事故汇报),和客户撕逼

最终确认下次直播,人数将达到5000人,接下来就是各种优化

首先我们加了一个cdn,,然后压缩js+css,压缩图片

之后将首页做了页面静态化,之后升级服务器的带宽,压力测试5000并发,ok了

在之后就是优化直播页面,难点在于:实时更新在线人数(人气),动态加载用户信息,动态渲染页面

解决

(1)实时更新在线人数:使用websocket做长连接,减少每次握手带来的消耗,将数据存储在redis里面,每次请求直接从redis里面获取,之后根据关闭浏览器来减少redis人气数(非强一致性)

(2)动态加载用户信息

1)将登陆方式改成点击操作才登陆,这样就能减少一部分并发的可能性

2)将会用的信息存储在redis里面做队列存储

由于时间关系,我们选择了第一种方案,然后模拟测试,还算ok

(3)动态渲染页面:将一些实时的参数通过实时的ajax加载,然后其他非实时参数做静态缓存

第二次直播,顺利完成!!!

总结:

(1)服务器配置要跟得上

(2)判断是cpu计算密集型还是非密集型

(3)查看是否吃带宽,然后升级带宽

(4)尽量将流量限制在上游,让操作数据的业务尽量来的晚一些

(5)判断业务是否适合做页面静态化,这样大大提高并发

(6)如果在apache和nginx里面选择的话,nginx处理静态资源真的很强大,还是用nginx吧-非绝对,自己判断

最后加环境:PHP+Mysql+Nginx+Linux

祝大家5.1快乐

上一篇下一篇

猜你喜欢

热点阅读