Tumblr团队一直在寻找新的方法来提高网站的性能。这意味着向访问频繁的代码添加缓存、寻找更快的CDN配置或升级底层软件。我们最近通过跨团队的努力将我们所有的Web服务器战舰从PHP5升级到PHP7。整个升级是一个有趣的项目,有一些非常酷的结果,所以我们想与您分享。时间表这起源于2015年秋季的一个hackday(hackday(类似于hackathon)项目)。@oli和@trav在PHP7RC上运行Tumblr。目前,许多PHP扩展还不支持PHP7,但有一些非官方分支具有(非常)实验性的支持,即便如此,它也能正常工作。今年春天,随着PHP7开始变得更加稳定,我们决定是时候开始密切关注升级了,我们做的第一件事就是对新版本进行打包,以便安装变得简单和一致。同时,我们也把我们内部的PHP扩展也放到了新版本中,一切就绪,随时可用。我们写了一个小脚本来升级(或降级)开发服务器,然后在春末夏初开始测试(更多内容见下文),构建PHP包的迭代,性能测试和评估,当它稳定时,我们开始吸引更多开发人员在支持PHP7的机器上进行日常开发。最后,在8月底,我们对我们的测试非常有信心,以至于我们在一小部分生产服务器上使用了PHP7。两周后,随着增量的增加,所有响应用户请求的服务器都更新了!测试当我们进行升级时,测试所有代码并确保它以相同的方式运行是非常重要的,我们有几种方法可以解决这个问题。番。在这个项目中,我们使用它来查找代码库中的PHP7不兼容代码,有了它,可以很容易地找到并修复这些问题。我们也有一些单元和集成测试来帮助确定哪些功能不如以前有效,并且由于该项目仍在开发中,我们需要确保不添加任何未通过PHP7验证的代码。所以我们用CI任务运行了所有PHP5和PHP7测试,项目结束时的最终结果是什么?嗯,有两件事让我们有了很大的提升,一是性能,二是语言特性。性能当我们将PHP7推向第一台服务器时,很明显我们更加关注各种图表以确保一切顺利进行。正如我们上面提到的,我们一直在寻求性能改进,但实际结果令人惊讶。我几乎立即注意到延迟减少了一半,服务器上的CPU负载减少了至少50%或更多。我们的服务器的服务速度提高了一倍,并且使用了一半的CPU资源。这些是一些处理API服务的图表。如您所见,延迟下降到不到一半,平均峰值负载现在低于之前的低点!语言特性PHP7还带来了许多有趣的新特性,这些特性应该会让Tumblr的开发人员的生活更轻松。一些亮点是:标量类型提示:PHP在类型安全方面一直很差,PHP7引入了标量类型提示,它确保传递的值符合特定类型(string、bool、int、float等)。返回类型声明:现在,在PHP7中,函数可以具有该语言将强制执行的显式返回类型。这减少了对一些样板代码和手动检查函数返回值的需要。匿名类:与匿名函数(闭包)非常相似,匿名类是在运行时构建的,可以模拟类、符合接口,甚至可以扩展其他类。这些对于实用程序对象(例如日志类)很有用,并且在单元测试中很有用。各种安全性和性能增强。总结PHP7太棒了!如需更多现代PHP知识,请访问Laravel/PHP知识社区
