Tumblr:咱们是如何从 PHP 5 升级到 PHP 7 的

clipboard.png

Tumblr 团队常常在寻找新的方式来提高网站的性能。这意味着要给访问量大的代码增长缓存,找到更快的 CDN 配置,或者升级基础软件。php

最近,经过一次跨团队的努力,咱们将所有 web 服务器战舰从 PHP 5 升级到了 PHP 7。整个升级是一次有趣的项目,有一些很是酷的结果,因此咱们想分享给你。laravel

时间表

这起源于 2015 年秋的一个黑客日(hackday,相似于黑客马拉松)项目。@oli 和 @trav 在 PHP7 RC 上运行 Tumblr . 此时, 不少 PHP 扩展还不支持 PHP 7, 可是有一些非官方的 forks 已经在(很是)试验性的支持了,就算是这样,它仍是跑起来了。git

这个春天,PHP7 开始变得更加稳定了,咱们决定是时候开始密切关注升级了,咱们作的第一件事就是打包新版本,这样安装就变得简单而且一致。同时,咱们也把咱们内部的 PHP 扩展放进了新版本里,这样全部东西都准备好了,随时可用。github

咱们编写了一个小脚原本升级(或者降级)开发服务器,而后,春末夏初,开始了测试(更多内容请往下看), PHP 包的构建迭代,性能测试和评估,随着它的稳定,咱们开始吸引更多的开发者在支持 PHP7 的机器上进行他们的平常开发。web

最后,在 8 月底,咱们对咱们的测试充满自信, 因而咱们在生产服务器上的一小部分使用了 PHP7 。两周后,随着逐步增长,全部响应用户请求的服务器都更新了!缓存

测试

当咱们进行升级时,测试全部代码并确保它们以相同的方式运行是很是重要的,咱们有一些方法来解决这个问题。安全

Phan. 在这个项目中,咱们用它在代码库中查找与 PHP7 不兼容的代码,有了它,找到而且解决这些问题变得很是容易。服务器

咱们还有一些单元和集成测试来帮忙肯定哪些方面不能像之前同样有效的工做,因为这个项目还在正常开发,咱们须要确保没有添加任何没有经过 PHP7 验证的代码。因此咱们用 CI 任务来跑全部的 PHP 5PHP7 的测试闭包

结果

那么在项目结束时,最后的结果是什么?好吧,有两件事对咱们有很大的改进,一个是性能另外一个是语言的特征。函数

性能

当咱们把 PHP7 推到首批服务器上时,很明显咱们更关注的是各类图表,以确保事情可以顺利的进行。正如咱们上面提到的,咱们正在寻找性能的改进,可是实际结果是惊人的。几乎第一时间发现了延迟降低了一半,服务器上的 CPU 负载至少减小了50%还要多。咱们的服务器服务速度比原来的快两倍,并且是只用了一半的 CPU 资源来完成的。

clipboard.png

clipboard.png

以上这些是处理 API 服务的部分图表。正如你所看到的,延迟降低到不到一半,平均峰值负荷如今低于之前的最低点!

语言功能

PHP 7 还带来了许多有趣的新功能,可让 Tumblr 的开发人员的生活变得更轻松。 一些亮点是:

  • 标量类型提示:PHP 在历史上对于类型安全来讲至关差,PHP 7 引入了标量类型提示,它确保传递的值符合特定类型(string,bool,int,float 等)。
  • 返回类型声明:如今,使用 PHP 7,函数能够具备语言将执行的显式返回类型。 这减小了对一些样板代码的需求并手动检查函数的返回值。
  • 匿名类:很是相似于匿名函数(闭包),匿名类在运行时构建,能够模拟类,符合接口,甚至能够扩展其余类。 这些对于记录类等实用对象颇有用,而且在单元测试中颇有用。
  • 各类安全和性能加强。

总结

PHP 7 真牛逼!

更多现代化 PHP 知识,请前往 Laravel / PHP 知识社区
相关文章
相关标签/搜索