如何使用工具提高PHP项目的生产力 2--洪涛

2020-02-27 145浏览

  • 1.
  • 2.如何使⽤用⼯工具提⾼高 PHP 项⺫⽬目的⽣生产⼒力 2 洪涛 PHPCon 2015
  • 3.⾃自我介绍 • 洪涛 • 携⻋车⺴⽹网CTO • 10年开发经验
 开源技术爱好者/协作者
 喜欢研究各种开源技术并应⽤用在⼯工作中
  • 4.回顾去年提到的项⺫⽬目 • Composer • Apigility • Vagrant • Slack
  • 5.我们为什么要通过⼯工具 提⾼高项⺫⽬目的⽣生产⼒力? • 「互联⺴⽹网+」是什么? • 「互联⺴⽹网就像是电,每个⾏行业都可以使⽤用」 • 「互联⺴⽹网+」思维对我们技术⼯工作者的启发 • 专注核⼼心业务逻辑,把各种⼯工具当成是电直接使 ⽤用,避免「反复造轮⼦子」,通过运⽤用各种⼯工具提 ⾼高项⺫⽬目的⽣生产⼒力
  • 6.今天会讲到的内容 • 换种姿势跑PHP • PHP 与 Docker • PHP项⺫⽬目的持续集成 • PHP项⺫⽬目的性能监控
  • 7.换种姿势跑PHP
  • 8.为什么要换种姿势? • 扩展PHP的⽤用途 • 提⾼高现有PHP项⺫⽬目运⾏行速度 • 希望每台服务器利⽤用到极限 • 运⾏行环境有限
  • 9.跑PHP的新姿势 • HHVM • Workerman / Swoole / ReactPHP + PHP-PM / phpDaemon • Phalcon / YAF
  • 10.如何选择?
  • 11.现有Web应⽤用 • 速度慢怎么办? • 通⽤用解决⽅方案:
 升级成HHVM • 优化瓶颈代码?
 ⽤用Zephir将瓶颈代码重构成为PHP Extension • 想实现异步/协程?
 fastcgi_finish_request/Recoil(ReactPHP)/Swoole/MQ • 是Symfony2/Laravel框架的项⺫⽬目?
 升级成ReactPHP实现异步
  • 12.新项⺫⽬目/新功能 • Socket/HTTP⻓长连接: • 纯PHP实现:Workerman • 精通俄语/爱折腾:phpDaemon • 觉得上⾯面两个性能不够强:Swoole • Web应⽤用: • 只有两台服务器但访问量有上千万:Phalcon/YAF • 业务逻辑复杂/实现快速开发迭代
 找框架去(Symfony2/Laravel/ThinkPHP/Yii/CI/......) • PHP脚本/命令⾏行程序 • ⽤用HHVM去跑 • 嵌⼊入式应⽤用 • HipHop/Phalcon
  • 13.最佳实践和建议 • 由于Workerman/ReactPHP没有依赖任何外部扩 展和类库,所以可以⽤用HHVM去跑基于这两个异 步框架的项⺫⽬目 • HHVM还处于不稳定状态,代码兼容性有问题 • 项⺫⽬目异步化之后,要注意保持业务逻辑的原⼦子化 • 异步化终究还是要让专业的来,推荐RabbitMQ
  • 14.PHP 与 Docker
  • 15.为什么要虚拟化? • 环境搭建:开发/测试/CI环境/Staging/Prod/演⽰示/ POC/试⽤用,再加上不同的分⽀支 • 实现架构的弹性扩充 • 提⾼高运算效率,降低IT成本
  • 16.现有虚拟机技术
 普遍存在的⼀一些缺点 • 虚拟机越多,对宿主服务器的资源浪费也就越⼤大, 系统整体稳定性就越低,管理成本也越⼤大 • ⽅方案复杂,系统部署脚本需要第三⽅方⽀支持,很难 和开发相结合 • 企业级⽅方案价格昂贵,系统维护费时费⼒力。
  • 17.Docker • 近年来最⽕火的虚拟机技术 • 是⼀一个「轻量级」的虚拟机 • 是⽤用Go语⾔言实现的⽤用来操作LxC的管理软件。 • 提供了对程序员/系统⼯工程师⾮非常友好的操作体验 • 使虚拟化技术变得简单易⽤用
  • 18.Docker可以做到 • 在1秒内完成:创建⼀一个虚拟机,运⾏行特定程序, 然后销毁该操作系统。 • 在服务器上同时运⾏行数百个虚拟机。资源占⽤用极 ⼩小,可以⽤用最⼩小的资源去运⾏行⼤大量虚拟机和程序 • 使环境变得像代码⼀一样⽅方便管理和维护。 • 使⼤大规模部署变得简单。 • 最⼤大程度利⽤用现有硬件资源。
  • 19.PHP开发环境进化史 • 以前 • APMServ/EasyPHP/XAMPP/MAMP/remote mount + server/local environment…… • 去年 • ⽤用Vagrant搭建开发环境 • 今年 • PHP with Docker
  • 20.Vagrant和Docker的区别 • 使⽤用场景的区别 • Vagrant主要⽤用在开发环境 • Docker则可以⽤用在开发和⽣生产环境 • 定位上的区别 • Vagrant只是虚拟机管理软件,需要搭配Chef/Puppet等⾃自动化运维 脚本才能构建系统 • Docker提供了全套的解决⽅方案(images/docker-compose) • 使⽤用上的区别 • Vagrant可以⽤用来管理Docker虚拟机,然⽽而⼏几乎没有⼈人这么干
  • 21.使⽤用Docker后的开发流程 • Pull⼀一个最新的镜像到本地 • 写代码+修改系统配置+优化系统配置 • 将当前代码和环境打包成镜像,Push到服务器 • 执⾏行部署命令,将镜像部署到云服务器
  • 22.PHP在⽣生产环境中使⽤用 Docker的典型场景 • 在⼀一台服务器上运⾏行多个PHP应⽤用 • 实现系统架构的弹性扩充 • 实现应⽤用的隔离性
  • 23.⼀一些Docker相关资源 • ⽐比较好的中⽂文教程 •https://github.com/nicescale/docker-training• all in one的PHP开发环境 •https://github.com/EvaEngine/Dockerfiles • Docker虚拟机管理器 • docker-compose/docker-machine/swarm • Shipyard • Docker国内镜像 •http://daocloud.io
  • 24.Shipyard
  • 25.PHP项⺫⽬目的持续集成
  • 26.持续集成 - 以前我们怎么做 • Hudson/Jerkins • PHPUnit/Behat/Atoum • PHP Mess Detector/PHP CodeSniffer/PHP Depend/PHP Copy Paste Detector/PHP Documentation Generator/PHPLOC
  • 27.现在如何做持续集成 • Scrutinizer • SensioLabsInsight
  • 28.线上持续集成⼯工具 - Scrutinizer
  • 29.每次提交后⾃自动进⾏行代码分析
  • 30.
  • 31.对国内没有相关服务 的⼀一些反思
  • 32.PHP项⺫⽬目的性能监控
  • 33.性能监控 - 以前我们怎么做 • 各种画图/监控⼯工具 • MRTG/Cacti/Munin/Nagios/Ganglia/Zabbix/ Graphite • 各种分析⼯工具 • XHProf/XDebug/apc.php/opcache.php/strace
  • 34.现在我们如何做监控 • 国外 • NewRelic • Blackfire • Tideways • 国内 • OneAPM • 听云 • 透视宝
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.谁更好⽤用⼀一点?
  • 41.其他能够提⾼高⽣生产⼒力的 ⼯工具
  • 42.信息流整合软件 • 国外 • Slack • Hipchat • 国内 • pubu.im • talk.ai • BearyChat • lesschat
  • 43.
  • 44.问答