(胡波)微博升级PHP7经验分享

2020-02-27 164浏览

  • 1.PHP7,⼤象真会⻜~ 微博移动服务集群 PHP7 升级部署经验分享 @胡波_
  • 2.关于我 • 现在负责微博移动应用服务 • 经历过两次创业 • 打拼了十多年的老码农 • 微博: @胡波_
  • 3.关于移动应用服务 • 直接面向用户,需求变动频繁还要求能快速相应 • 微博最大的流量入口,每天过百亿的 Hits • 突发热点事件,极端峰值,QPS 峰值过80万 • 三节(元旦、圣诞、春节)超高峰值 • 面向移动客户端,网络接入环境复杂且不稳定 • 背负着几十个线上版本
  • 4.DD DD GD H FH B DD CB C A H Cache F F DHG DH A M F . IG H CB F A H G F . . Access control EI GH . . C & CF HH LH F A CF G D C C G Yar Java API Yar C Service Yar PHP Service
  • 5.PHP7 新特性 • PHP NG,新一代引擎 • 抽象语法树 • 标量类型声明、返回值类型声明、强类型、Int64 • 新操作符符 <=>,**,??,\u{xxxx} • define() 常量支持数组, 匿名类,Closure::call()• 核心错误可以通过异常捕获了 • ……
  • 6.为什么升级 PHP7
  • 7.为什么升级 PHP7
  • 8.为什么升级 PHP7 • PHP5.4 : 519 • PHP7 : 1000 • PHP7+hugepage : 1107 +113% +93%
  • 9.为什么升级 PHP7 • PHP7比 PHP5.4 性能提升一倍以上 • 微博移动应用服务依赖的扩展都已经支持 PHP7 • 业务增长迅速,DAU 同比增长60%(晚高峰 idle<25%) • V5 项目,升级到 PHP5.4, 节省了777台服务器 • 穷,三节马上到了……
  • 10.我们升级的后盾 • 单元测试:覆盖率 >85% • 持续集成:Gitlab-CI,PHPUnit,PHPCS,PHPMD,QuickBuild… • 监控和日志检索:Rsyslog,Elasticsearch, Kibana,Zabbix, Graphite,plog,kafka,hangout • 配置管理及异常反馈系统:AOE,SLA • 有鸟哥的大力支持 J
  • 11.Unit Testing
  • 12.Unit Testing
  • 13.Gitlab-CI
  • 14.Kibana
  • 15.Kibana
  • 16.Kibana
  • 17.Zabbix
  • 18.Graphite
  • 19.SLA分析系统
  • 20.依赖梳理 • mysql × (改成mysqli即可) • opcache √ (PHP7内置支持) • php-jsond √ (已经被 PHP7收编) • redis : 有一个 PHP7分支,测试没发现问题 • memcached √ • iplookup / fcache √ (升级自己的扩展) • weibo_util × (依赖度低,用 PHP 实现了) • yaf / yar / yaconf √ • msgpack √
  • 21.升级代码http://php.net/manual/zh/migration70.php
  • 22.升级代码 • • 编写替代类和函数 • Base62_Encode • jsond_encode(), jsond_decode() • Weibo_conf 封装 yaconf 使用脚本批量扫描替换 • mcrypt_cbc(),mcrypt_cfb(),mcrypt_ecb(),mcrypt_ofb() • preg_replace() 中的 /e 修饰符被废弃 • Mysqli • $HTTP_RAW_POST_DATA àphp://input• 完善单元测试,单元测试覆盖率一直保持 >85% • Gitlab-CI 做持续集成、自动化测试
  • 23.升级系统 • • • AOE: 批量部署和配置工具,保证快速在多版本系统和软件间快速切 换 • V5-PHP5.4 • V5-PHP7 PHP5.4 和 PHP7 的主软件包及其依赖扩展包 支持大规模并发变更操作
  • 24.灰度部署 • 内网灰度,大量 VIP 全功能用户,时间最长,填坑 • 单机房灰度30% • 单运营商机房全量 • 全站全量
  • 25.坑? • PHP7 没有坑!PHP7 没有坑!PHP7 没有坑! • 几个小插曲 • msgpack 0.5.5 和 msgpack2.0.0不兼容 • yaconf 1.0.0 “段错误” • memcached.serializer = "igbinary” • json_encode : JSON_ERROR_RECURSION
  • 26.配置、优化 • listen = /dev/shm/php-fpm.sock • pm = static • pm.max_children = 400 • pm.max_request = 1500 • listen.backlog = 8191 • opcache.enable=1
  • 27.配置、优化 • opcache.enable=1 • opcache.huge_code_pages=1 • GCC 4.8以上编译器 • PGO(Profile Guided Optimization)
  • 28.成果
  • 29.成果
  • 30.• Docker • PGO • Microservices • Composer • Ab Testing Gateway
  • 31.欢迎加入微博,一起撸! 谢谢! @胡波_ hubo3@staff.weibo.com