這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
今天太忙,少寫一點,後面再補充。
非同步模式
Go 語言越來越熱門,很多大型互連網公司後端正在轉向 GO 。Java 圈知名的服務話架構 Dubbo 也宣布轉型非同步模式。這是一個大趨勢,非同步模式已經被市場驗證和認可。
在 Web 服務器選擇上,幾年前大部分人就開始選擇 Nginx,而不是 Apache。現在在後端業務開發的編程方面,技術力量強的團隊已經開始將技術棧從同步模式切換為非同步了。
同步阻塞模式存在較多缺陷,並發能力弱、適應性差、慢速請求導致服務不可用。如:後台介面中調用第三方 API 的情境,同步模式效果極差。過去那些使用 Java、PHP、C++、Python、Ruby 語言開發的同步阻塞模式架構,用的人越來越少。
Node.js
雖然 Node.js 也很熱門,很流行,但仍然很少見到企業將 Node.js 作為公司後端方面的主要程式設計語言。C++、Java、PHP、Pytohn 語言同樣也有一些類似的方案,包括 Swoole-1.0 也是基於類似於 Node.js 的非同步回調模式。
本質原因是非同步回調的技術方案,以及在它之上所做的一些最佳化方案,包括 Promise、Future、Yield/Generator、Async/Await 等,改變程式開發的風格和習慣。如果要使用這些技術,那麼工程師需要額外學習這些關鍵詞和函數的使用方法。
使用這些技術方案是無法相容已有程式的。可以說研發成本巨大,難以平滑過渡。影響了非同步回調技術棧的應用。很難讓所有人都接受。
協程
而協程模式,兼顧了同步阻塞的可維護性和非同步非阻塞的高並發能力。將會成為未來後端開發領域的主流技術方案。
最重要的,協程模式只需要對已有項目代碼進行少量調整就可以運行起來,甚至可以完全相容老項目。只需要架構層進行相容即可。這使得團隊可以平滑過渡。
使用協程模式,開發人員完全不需要學習額外的關鍵詞和函數用法。編碼風格與同步模式下是完全一致的。
協程技術裡,當然 GO 語言是最耀眼的那一個。協程、通道、靜態語言、效能、富編譯、標準庫豐富、生態完整、Google 等,優勢太多了。GO 語言,個人認為是目前所有程式設計語言中,最值得學習的。
Swoole-2.x 讓 PHP 這門 20多年歷史的老牌後台程式設計語言也能有協程的能力。相比 Go 這樣的技術,PHP + Swoole 的技術棧,更適合快速開發、快速迭代的情境。畢竟動態語言比靜態語言還是要更加靈活、開發效率更高。
2018 年我重構了 swoole framework 這個很老的項目,底層支援 Swoole 2.x 協程模式。主要原因是車輪公司內部有很多項目基於這個架構,尤其是服務層全部用了 swoole framework。我們希望業務代碼一行不改,可以一鍵切換為協程模式。理論上其他的同步阻塞 PHP 架構,如 Laravel 、Yii ,都可以實現只修改底層相容 Swoole 2.x 協程,實現項目代碼無縫切換協程模式。
使用協程後,整個系統的效能、並發能力、穩定性有了巨大提升。過去,線上經常出現一個慢請求導致整個伺服器卡住的問題不存在了。
PHP & Swoole
雖然 Swoole 2.0 只有不到兩年的曆史,相比 Go 語言 10 年的耕耘,還有很長一段路要走。但相比 GO 這樣的靜態語言,PHP + Swoole 還是有很多優勢的,PHP 更加簡單易用,PHP 是動態語言,使用起來更加靈活。
當然,如果是新項目還是推薦使用 Swoft 這個專門為 Swoole 2.0 的架構,它的曆史包袱更少,因此穩定性更好。
現在有了 Swoole 2.0 協程,我們對 PHP 的未來仍然充滿信心。