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 5
和 PHP7
的測試閉包
那麼在項目結束時,最後的結果是什麼?好吧,有兩件事對咱們有很大的改進,一個是性能另外一個是語言的特徵。函數
當咱們把 PHP7 推到首批服務器上時,很明顯咱們更關注的是各類圖表,以確保事情可以順利的進行。正如咱們上面提到的,咱們正在尋找性能的改進,可是實際結果是驚人的。幾乎第一時間發現了延遲降低了一半,服務器上的 CPU 負載至少減小了50%還要多。咱們的服務器服務速度比原來的快兩倍,並且是隻用了一半的 CPU 資源來完成的。
以上這些是處理 API 服務的部分圖表。正如你所看到的,延遲降低到不到一半,平均峯值負荷如今低於之前的最低點!
PHP 7 還帶來了許多有趣的新功能,可讓 Tumblr 的開發人員的生活變得更輕鬆。 一些亮點是:
PHP 7 真牛逼!
更多現代化 PHP 知識,請前往 Laravel / PHP 知識社區