PHP7,大象真会飞--胡波@PHPCon2016-web

2020-02-27 234浏览

  • 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.phphttp://github.com/etsy/phan
  • 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