把php5的程序 升级为php7,升级PHP7带来的变化

php5.3的系统资源占用依旧比  php7高。但是处理的内容少的时候,差距不是非常大;

并发上去之后,php7使用占用率明显减少,php5.3资源占用率是php7的2倍;

两个版本php均出现了响应错误的情况(连接超时),网络出现瓶颈;

php7的tps高于php5.3 16%到22%

花椒技术团队PHP7框架测试

说明:程序包含QFrame框架,输出一段简单的json

KVM虚拟机服务器配置: cpu 4核、内存 8G

系统关键参数:net.ipv4.tcp_max_tw_buckets = 20000

结果:

b00ff6892b5bf0b7e6a4e2b62eb0dc75.png

结论:

从只压框架角度看,PHP5.3依旧占用非常多的系统资源,idel依旧为0;

PHP7在1000并发下,系统即将到达瓶颈。但此时依旧可以正常处理绝大部分请求;

PHP7的tps最少是5.3的5倍;

花椒技术团队PHP7资源请求测试

说明:包含一次、两次、三次redis请求,一次redis、一次 mysql,两次redis、一次mysql等测试场景

物理机服务器配置: cpu 24核、内存 64G

系统关键参数:net.ipv4.tcp_max_tw_buckets = 20000

结果:

aca5906414d9493aae1ad49fb8b7d623.png

结论:

单纯 Redis请求时,PHP7是   PHP5.3的 3倍以上;

包含 Mysql请求时,PHP7是   PHP5.3的 2倍以上;

2升级PHP7过程

灰度上线升级:部署PHP7新集群,灰度解析到新集群。

说明:根据用户群体的分布进行灰度解析,将一些用户较少的省市解析到PHP7新环境,用户主体依然解析到PHP5.*老环境,观察一段时间后(1~2周)根据结果进行相应调整。如没问题,便可大规模解析到PHP7环境。

847feb4aedccdb6f811e293a3b928336.png

举例:如上图所示为用户群体分布图,可先将青海、甘肃、云南等地用户通过DNS地域解析到PHP7环境的集群,方便随时观察和调整。如无问题可再将江苏、江西、广东、北京等地解析到PHP7集群。

3升级后的性能对比

拿一个真实业务升级PHP7后的CPU性能变化图作为参考:

82ab8f627c39a460ae6dd036290ec7e2.png

结果:

在4.6号完成升级后,CPU的资源使用有将近30%的提升,符合测试结果预期。如果按照1万RMB一台服务器计算,10台机器的集群能节省3万RMB,100台机器的集群能节省30万RMB。10000台就是3000万啊!

4运维细节

RPM包版本:addops-php-7.0.10-1.el6.x86_64 (addops自己封装的RPM)

编译参数:

Build Date => Oct 27 2016 17:25:53

–prefix=/usr/local/php

–sharedstatedir=/data/php

–localstatedir=/data/php

–enable-fpm

–enable-phpdbg

–enable-phpdbg-webhelper

–enable-phpdbg-debug

–disable-debug

–with-layout=GNU

–with-config-file-path=/usr/local/php/etc

–with-config-file-scan-dir=/usr/local/php/etc/php.d

–disable-ipv6

–enable-dtrace

–enable-libxml

–with-openssl=shared,/usr/local/openssl

–with-pcre-regex

–with-sqlite3

–with-zlib

–enable-bcmath

–with-bz2

–enable-calendar

–enable-ctype

–with-curl=shared,/usr/local/curl

–enable-dom

–with-enchant

–enable-exif

–enable-fileinfo

–enable-filter

–enable-ftp

–with-gd

–with-webp-dir=/usr/local/libwebp

–with-jpeg-dir

–with-png-dir

–with-zlib-dir

–with-xpm-dir=/usr/local/

–with-freetype-dir

–enable-gd-native-ttf

–with-gettext

–with-gmp

–with-mhash

–enable-hash

–with-iconv

–enable-json

–enable-mbstring

–with-mcrypt

–with-mysqli=mysqlnd

–enable-opcache

–enable-opcache-file

–enable-huge-code-pages

–enable-pcntl

–enable-pdo

–with-pdo-mysql=mysqlnd

–with-pdo-pgsql

–without-pdo-sqlite

–with-pgsql

–enable-phar

–enable-posix

–with-readline

–with-recode

–enable-session

–enable-shmop

–enable-simplexml

–enable-soap

–enable-sockets

–enable-sysvmsg

–enable-sysvsem

–enable-sysvshm

–with-tidy

–enable-tokenizer

–enable-xml

–enable-xmlreader

–with-xmlrpc

–enable-xmlwriter

–with-xsl

–enable-zip

–enable-mysqlnd

–enable-mysqlnd-compression-support

–with-pear

用户通过HULK平台的puppet集群管理对RPM和配置文件进行统一管控,可以搜索一下平台支持的php7扩展:

475b758ee41559a465e570c3a2c3bc67.png

然后编辑配置文件进行同步:

8692c43b8500da85f26a0eff63a19b83.png

d47caf3e7316d927a40ea74e6a1fd650.png

秒级完成集群软件包的安装和同步,用户完全自助部署PHP7新集群。需要注意配置文件的参数要和老集群的保持一致,不然两个环境配置不一样就给自己挖坑了。

b9e10b5d8d5a13490b8de64813e0ed28.png

通过HULK平台,业务人员可以自助的完成线上环境的部署,将之前复杂的运维交付以分钟级单位完成。这也为花椒直播在2016年的很多大活动打下了夯实的基础。

总结

在面对新技术时先衡量一下给团队的收益,收益明显的话再去做。关于持续集成和持续交付(CI/CD)也是HULK未来重点努力的方向,有啥好的实践和落地方案的小伙伴欢迎留言交流~

文章来自微信公众号:HULK一线技术杂谈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值