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
结果:
结论:
从只压框架角度看,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
结果:
结论:
单纯 Redis请求时,PHP7是 PHP5.3的 3倍以上;
包含 Mysql请求时,PHP7是 PHP5.3的 2倍以上;
2升级PHP7过程
灰度上线升级:部署PHP7新集群,灰度解析到新集群。
说明:根据用户群体的分布进行灰度解析,将一些用户较少的省市解析到PHP7新环境,用户主体依然解析到PHP5.*老环境,观察一段时间后(1~2周)根据结果进行相应调整。如没问题,便可大规模解析到PHP7环境。
举例:如上图所示为用户群体分布图,可先将青海、甘肃、云南等地用户通过DNS地域解析到PHP7环境的集群,方便随时观察和调整。如无问题可再将江苏、江西、广东、北京等地解析到PHP7集群。
3升级后的性能对比
拿一个真实业务升级PHP7后的CPU性能变化图作为参考:
结果:
在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扩展:
然后编辑配置文件进行同步:
秒级完成集群软件包的安装和同步,用户完全自助部署PHP7新集群。需要注意配置文件的参数要和老集群的保持一致,不然两个环境配置不一样就给自己挖坑了。
通过HULK平台,业务人员可以自助的完成线上环境的部署,将之前复杂的运维交付以分钟级单位完成。这也为花椒直播在2016年的很多大活动打下了夯实的基础。
总结
在面对新技术时先衡量一下给团队的收益,收益明显的话再去做。关于持续集成和持续交付(CI/CD)也是HULK未来重点努力的方向,有啥好的实践和落地方案的小伙伴欢迎留言交流~
文章来自微信公众号:HULK一线技术杂谈