摘要:但是,隨著微服務架構的興起以及容器時代的到來,這種情況又再次加劇。最重要的是,在微服務與容器領域有很好的基礎,后期系統可完美實現微服務化與容器化。
1、Why Not PHP
使用PHP構建的WEB程序,隨著業務發展到一定體量之后,都不得不面臨以下一些問題:
業務功能不斷擴張,如何避免某單一業務功能故障影響整體,維持系統健壯性
業務邏輯復雜度不斷上升,如何解耦與模塊化,降低系統復雜性
網站訪問量不斷攀升,如何實現高并發,實現系統高可用性
計算密集型業務的出現,如何快速適應需求,提升網站性能
...
對于PHP而言,在業務發展初期,可以快速實現業務原型,滿足需求,但是在發展的中后期就顯得略有點后勁不足。
因為PHP在高并發、多進程/線程以及密集計算領域并不擅長。這種情況在swoole出現之后得到了很大的緩和。
但是,隨著微服務架構的興起以及容器時代的到來,這種情況又再次加劇。因為PHP大都需要借助Nginx和PHP-FPM或類似軟件來進行進程管理,這對于部署的微服務意味著部署PHP項目代碼的同時必須同時包括PHP-FPM和Nginx,這除了增加資源成本也降低了效率。
那么,為什么是Golang呢?
首先,Golang與PHP很像,都是類C語言,可以很好的進行『知識遷移』
其次,Golang在性能和開發效率上有很好的平衡,語法簡單,語言層面上支持并發編程,且基礎庫健全,部署容易。
最重要的是,Golang在微服務與容器領域有很好的基礎,后期系統可完美實現微服務化與容器化。
當然了,即便如此,PHP還是世界上最好的語言。
3、How To做好了思想上的準備之后,就可以開始確立技術方案了。
任何大型系統的重構都不可能是一蹴而就,頃刻之間發生的,需要一個循序漸進的過程。并且,在此重構過程中,大前提必須保持現有系統的所有業務照常運行,所以需要確立的是一個對系統基本無損的分模塊逐步替換的方案。
回歸到我們當前的系統架構:每臺服務器上均部署相同的PHP項目代碼,統一由PHP-FPM解釋執行,并通過Nginx進行反向代理。
在梳理了系統各功能模塊業務職責之后,我們決定先將數據模塊試水:使用Golang進行改造,理由是數據模塊功能較為簡單,Golang只需計算邏輯然后向前端頁面提供數據接口即可。同時借助Nginx的反向代理功能,將數據接口前綴的轉發至Golang程序,其他所有請求還是依舊轉發至原來的PHP-FPM程序。其抽象模型大致如下:
所謂熱更新,是指在系統升級或修復bug過程中對用戶來說是無感知的。
使用PHP開發時,開發者無需關心熱更新,因為PHP是解釋型的編程語言,PHP-FPM會根據最新的請求實時去調用執行具體某個PHP文件;而Golang則不同,它是編譯型語言,在運行時會把Golang文件加載到內存,這時,所有對代碼的改動想要更新必須要重啟服務才能生效。那么如何在重啟服務過程中,不影響當前用戶請求,便是熱更新需要解決的問題。
目前Golang熱更新大致有兩個思路:Plugin包(Golang1.8+,原理類似C++動態鏈接庫方式)和第三方熱更新庫(如)Facebook開源的grace庫以及endless庫等。
關于第三方熱更新庫邏輯大致為:
發布變更的項目代碼文件
發送變更通知給服務進程(信號方式,通常是USR2信號)
服務進程收到通知后,調用 fork/exec 啟動最新項目代碼(新進程)
子進程調用會從父進程繼承 socket 文件描述符來重新監聽 socket(此時父子進程同時Accept連接)
原有父進程不再接收新請求,待正在處理中的請求處理完后,進程自動退出(gracefully shutdown)
子進程托管給init進程
總結以上大致接介紹了從PHP項目遷移到Golang所需的一些思想與技術上的準備,后續篇章將介紹具體技術方案與實現細節。
Referenceshttp://mikespook.com/2012/08/...
https://github.com/facebookgo...
https://github.com/fvbock/end...
https://fitstar.github.io/fal...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29651.html
摘要:上篇大致提到的的熱更新,本篇將詳細論述。軟件的熱更新就是指在保持系統正常運行的情況下對系統進行更新升級。同樣地,熱更新也可以采取類似的處理。注包方式的熱更新本文暫不討論。 上篇大致提到的Golang的熱更新,本篇將詳細論述。 1、什么是熱更新 網絡上有這么一個例子來形容熱更新,我覺得很形象很貼切: 一架行駛在高速上的大卡車,行駛過程中突然遭遇爆胎,熱更新則是要求在不停車的情況下將車胎修...
摘要:如果你只對開發者需要了解的事感興趣,請下拉到早該知道的事板塊。在不泄露機密的情況下,利用支持向量機來獲取一個句子最可能的意思,并且以此來推斷句子的情感。也就是說,如果一個文檔包含個詞,就會與支持向量機進行多次對比。 【編者按】本文最早由 Repustate 發布,主要介紹將代碼遷移至 Go(lang) 時的注意事項。文章系國內 ITOM 管理平臺 OneAPM 編譯呈現,以下為正文。 ...
摘要:的本質是團隊博客,關注互聯網創業技術,每周推薦篇優質文章。堅持爭取做到每周更新,與讀者一起進步。第十一期第十期第九期第八期第七期第六期第五期第四期第三期切換至,第二期發布。創刊,用發布了第一次。 Tuniu Weekly Inspired By 《灣區日報》 我們團隊也想基于這種模式,讓大家感受到技術的人文。 《Tuniu Weekly》就這樣產生了。 《Tuniu Weekly》...
摘要:多圖上傳修改里面的方法將封面修改為封面創建圖片修改器修改器使用說明,請閱讀相關說明文檔在里增加和兩個方法顯示效果原文地址地址 laravel中使用WangEditor及多圖上傳 1. 創建項目及安裝所需安裝包 1.1 創建項目 composer create-project laravel/laravel=5.3 blog_wangeditor --prefer-dist 1.2 創建...
摘要:多圖上傳修改里面的方法將封面修改為封面創建圖片修改器修改器使用說明,請閱讀相關說明文檔在里增加和兩個方法顯示效果原文地址地址 laravel中使用WangEditor及多圖上傳 1. 創建項目及安裝所需安裝包 1.1 創建項目 composer create-project laravel/laravel=5.3 blog_wangeditor --prefer-dist 1.2 創建...
閱讀 2984·2021-09-10 10:50
閱讀 3188·2019-08-30 14:19
閱讀 3515·2019-08-29 17:31
閱讀 3240·2019-08-29 16:43
閱讀 2190·2019-08-29 14:05
閱讀 2087·2019-08-29 13:17
閱讀 2041·2019-08-26 13:25
閱讀 1755·2019-08-26 12:20