女主宣言 最近女主在QCon2017的会议上听到一句话:“在决定做一件事情之前,先不要考虑它的困难有多难,要先想想收益明显不明显,如果明显那就克服一切困难把它搞定”。多么激励人心有木有~ 在是否升级PHP7的问题上,花椒技术团队和addops团队也是进行了一番“苦战”,最后终于在2016年11月完成升级。今天就为大家分享一篇PHP7的升级历程,希望能够帮助有同样升级想法的GG们。 PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!
背景 在升级PHP7前花椒服务端的代码基本全部采用PHP 5.* 编写。可是当遇到高并发的场景时,比如去年奥运期间的张继科直播,瞬间百万粉丝涌入直播间,服务器负载爆表、PHP执行队列堆积严重,CPU被吃光,短时间内只能靠扩容来抗住高并发。考虑到如果使用别的语言进行重构的话周期会比较长,跟不上产品快速迭代的速度。于是便考虑到升级PHP7,因为官方给出PHP7的性能是一次里程碑的变革。 在衡量了一下利弊后得出如下结论,发现收益还是大于困难的。
1 压测报告 鸟哥(官方)测试: 鸟哥-惠新宸分享的PHP7性能报告,方便大家参考。 WordPress的QPS压测: 在WordPress项目中,PHP7对比PHP5.6,QPS提升2.77倍! Benchmark对比: 处理时长耗时从2.991下降到1.186,大幅度下降60%! 花椒技术团队的基准测试 说明:直接输出 “hello world” KVM虚拟机服务器配置: cpu 4核、内存 8G 系统关键参数:net.ipv4.tcp_max_tw_buckets = 20000 结果: 结论:
花椒技术团队PHP7框架测试 说明:程序包含QFrame框架,输出一段简单的json KVM虚拟机服务器配置: cpu 4核、内存 8G 系统关键参数:net.ipv4.tcp_max_tw_buckets = 20000 结果: 结论:
花椒技术团队PHP7资源请求测试 说明:包含一次、两次、三次redis请求,一次redis、一次 mysql,两次redis、一次mysql等测试场景
物理机服务器配置: cpu 24核、内存 64G 系统关键参数:net.ipv4.tcp_max_tw_buckets = 20000 结果:
结论:
2 升级PHP7过程 灰度上线升级:部署PHP7新集群,灰度解析到新集群。 说明:根据用户群体的分布进行灰度解析,将一些用户较少的省市解析到PHP7新环境,用户主体依然解析到PHP5.*老环境,观察一段时间后(1~2周)根据结果进行相应调整。如没问题,便可大规模解析到PHP7环境。 举例:如上图所示为用户群体分布图,可先将青海、甘肃、云南等地用户通过DNS地域解析到PHP7环境的集群,方便随时观察和调整。如无问题可再将江苏、江西、广东、北京等地解析到PHP7集群。 3 升级后的性能对比 拿一个真实业务升级PHP7后的CPU性能变化图作为参考: 结果:
4 运维细节 RPM包版本:addops-php-7.0.10-1.el6.x86_64 (addops自己封装的RPM) 编译参数: Build Date = |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|