亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

從PHP遷移至Golang - 基礎(chǔ)篇

Kerr1Gan / 2325人閱讀

摘要:但是,隨著微服務(wù)架構(gòu)的興起以及容器時(shí)代的到來,這種情況又再次加劇。最重要的是,在微服務(wù)與容器領(lǐng)域有很好的基礎(chǔ),后期系統(tǒng)可完美實(shí)現(xiàn)微服務(wù)化與容器化。

1、Why Not PHP

使用PHP構(gòu)建的WEB程序,隨著業(yè)務(wù)發(fā)展到一定體量之后,都不得不面臨以下一些問題:

業(yè)務(wù)功能不斷擴(kuò)張,如何避免某單一業(yè)務(wù)功能故障影響整體,維持系統(tǒng)健壯性

業(yè)務(wù)邏輯復(fù)雜度不斷上升,如何解耦與模塊化,降低系統(tǒng)復(fù)雜性

網(wǎng)站訪問量不斷攀升,如何實(shí)現(xiàn)高并發(fā),實(shí)現(xiàn)系統(tǒng)高可用性

計(jì)算密集型業(yè)務(wù)的出現(xiàn),如何快速適應(yīng)需求,提升網(wǎng)站性能

...

對于PHP而言,在業(yè)務(wù)發(fā)展初期,可以快速實(shí)現(xiàn)業(yè)務(wù)原型,滿足需求,但是在發(fā)展的中后期就顯得略有點(diǎn)后勁不足。
因?yàn)镻HP在高并發(fā)、多進(jìn)程/線程以及密集計(jì)算領(lǐng)域并不擅長。這種情況在swoole出現(xiàn)之后得到了很大的緩和。
但是,隨著微服務(wù)架構(gòu)的興起以及容器時(shí)代的到來,這種情況又再次加劇。因?yàn)镻HP大都需要借助Nginx和PHP-FPM或類似軟件來進(jìn)行進(jìn)程管理,這對于部署的微服務(wù)意味著部署PHP項(xiàng)目代碼的同時(shí)必須同時(shí)包括PHP-FPM和Nginx,這除了增加資源成本也降低了效率。

2、Why Golang

那么,為什么是Golang呢?

首先,Golang與PHP很像,都是類C語言,可以很好的進(jìn)行『知識(shí)遷移』

其次,Golang在性能和開發(fā)效率上有很好的平衡,語法簡單,語言層面上支持并發(fā)編程,且基礎(chǔ)庫健全,部署容易。

最重要的是,Golang在微服務(wù)與容器領(lǐng)域有很好的基礎(chǔ),后期系統(tǒng)可完美實(shí)現(xiàn)微服務(wù)化與容器化。

當(dāng)然了,即便如此,PHP還是世界上最好的語言。

3、How To

做好了思想上的準(zhǔn)備之后,就可以開始確立技術(shù)方案了。
任何大型系統(tǒng)的重構(gòu)都不可能是一蹴而就,頃刻之間發(fā)生的,需要一個(gè)循序漸進(jìn)的過程。并且,在此重構(gòu)過程中,大前提必須保持現(xiàn)有系統(tǒng)的所有業(yè)務(wù)照常運(yùn)行,所以需要確立的是一個(gè)對系統(tǒng)基本無損的分模塊逐步替換的方案。
回歸到我們當(dāng)前的系統(tǒng)架構(gòu):每臺(tái)服務(wù)器上均部署相同的PHP項(xiàng)目代碼,統(tǒng)一由PHP-FPM解釋執(zhí)行,并通過Nginx進(jìn)行反向代理。
在梳理了系統(tǒng)各功能模塊業(yè)務(wù)職責(zé)之后,我們決定先將數(shù)據(jù)模塊試水:使用Golang進(jìn)行改造,理由是數(shù)據(jù)模塊功能較為簡單,Golang只需計(jì)算邏輯然后向前端頁面提供數(shù)據(jù)接口即可。同時(shí)借助Nginx的反向代理功能,將數(shù)據(jù)接口前綴的轉(zhuǎn)發(fā)至Golang程序,其他所有請求還是依舊轉(zhuǎn)發(fā)至原來的PHP-FPM程序。其抽象模型大致如下:

4、About Hot-Update

所謂熱更新,是指在系統(tǒng)升級(jí)或修復(fù)bug過程中對用戶來說是無感知的。
使用PHP開發(fā)時(shí),開發(fā)者無需關(guān)心熱更新,因?yàn)镻HP是解釋型的編程語言,PHP-FPM會(huì)根據(jù)最新的請求實(shí)時(shí)去調(diào)用執(zhí)行具體某個(gè)PHP文件;而Golang則不同,它是編譯型語言,在運(yùn)行時(shí)會(huì)把Golang文件加載到內(nèi)存,這時(shí),所有對代碼的改動(dòng)想要更新必須要重啟服務(wù)才能生效。那么如何在重啟服務(wù)過程中,不影響當(dāng)前用戶請求,便是熱更新需要解決的問題。
目前Golang熱更新大致有兩個(gè)思路:Plugin包(Golang1.8+,原理類似C++動(dòng)態(tài)鏈接庫方式)和第三方熱更新庫(如)Facebook開源的grace庫以及endless庫等。
關(guān)于第三方熱更新庫邏輯大致為:

發(fā)布變更的項(xiàng)目代碼文件

發(fā)送變更通知給服務(wù)進(jìn)程(信號(hào)方式,通常是USR2信號(hào))

服務(wù)進(jìn)程收到通知后,調(diào)用 fork/exec 啟動(dòng)最新項(xiàng)目代碼(新進(jìn)程)

子進(jìn)程調(diào)用會(huì)從父進(jìn)程繼承 socket 文件描述符來重新監(jiān)聽 socket(此時(shí)父子進(jìn)程同時(shí)Accept連接)

原有父進(jìn)程不再接收新請求,待正在處理中的請求處理完后,進(jìn)程自動(dòng)退出(gracefully shutdown)

子進(jìn)程托管給init進(jìn)程

總結(jié)

以上大致接介紹了從PHP項(xiàng)目遷移到Golang所需的一些思想與技術(shù)上的準(zhǔn)備,后續(xù)篇章將介紹具體技術(shù)方案與實(shí)現(xiàn)細(xì)節(jié)。

References

http://mikespook.com/2012/08/...
https://github.com/facebookgo...
https://github.com/fvbock/end...
https://fitstar.github.io/fal...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/29651.html

相關(guān)文章

  • PHP遷移Golang - 熱更新

    摘要:上篇大致提到的的熱更新,本篇將詳細(xì)論述。軟件的熱更新就是指在保持系統(tǒng)正常運(yùn)行的情況下對系統(tǒng)進(jìn)行更新升級(jí)。同樣地,熱更新也可以采取類似的處理。注包方式的熱更新本文暫不討論。 上篇大致提到的Golang的熱更新,本篇將詳細(xì)論述。 1、什么是熱更新 網(wǎng)絡(luò)上有這么一個(gè)例子來形容熱更新,我覺得很形象很貼切: 一架行駛在高速上的大卡車,行駛過程中突然遭遇爆胎,熱更新則是要求在不停車的情況下將車胎修...

    i_garfileo 評論0 收藏0
  • Python 開發(fā)者在遷移到 Go(lang) 時(shí)需要知道哪些事?

    摘要:如果你只對開發(fā)者需要了解的事感興趣,請下拉到早該知道的事板塊。在不泄露機(jī)密的情況下,利用支持向量機(jī)來獲取一個(gè)句子最可能的意思,并且以此來推斷句子的情感。也就是說,如果一個(gè)文檔包含個(gè)詞,就會(huì)與支持向量機(jī)進(jìn)行多次對比。 【編者按】本文最早由 Repustate 發(fā)布,主要介紹將代碼遷移至 Go(lang) 時(shí)的注意事項(xiàng)。文章系國內(nèi) ITOM 管理平臺(tái) OneAPM 編譯呈現(xiàn),以下為正文。 ...

    hqman 評論0 收藏0
  • 途牛原創(chuàng)|途牛周刊

    摘要:的本質(zhì)是團(tuán)隊(duì)博客,關(guān)注互聯(lián)網(wǎng)創(chuàng)業(yè)技術(shù),每周推薦篇優(yōu)質(zhì)文章。堅(jiān)持爭取做到每周更新,與讀者一起進(jìn)步。第十一期第十期第九期第八期第七期第六期第五期第四期第三期切換至,第二期發(fā)布。創(chuàng)刊,用發(fā)布了第一次。 Tuniu Weekly Inspired By 《灣區(qū)日報(bào)》 我們團(tuán)隊(duì)也想基于這種模式,讓大家感受到技術(shù)的人文。 《Tuniu Weekly》就這樣產(chǎn)生了。 《Tuniu Weekly》...

    ThreeWords 評論0 收藏0
  • laravel中使用WangEditor及多圖上傳

    摘要:多圖上傳修改里面的方法將封面修改為封面創(chuàng)建圖片修改器修改器使用說明,請閱讀相關(guān)說明文檔在里增加和兩個(gè)方法顯示效果原文地址地址 laravel中使用WangEditor及多圖上傳 1. 創(chuàng)建項(xiàng)目及安裝所需安裝包 1.1 創(chuàng)建項(xiàng)目 composer create-project laravel/laravel=5.3 blog_wangeditor --prefer-dist 1.2 創(chuàng)建...

    FingerLiu 評論0 收藏0
  • laravel中使用WangEditor及多圖上傳

    摘要:多圖上傳修改里面的方法將封面修改為封面創(chuàng)建圖片修改器修改器使用說明,請閱讀相關(guān)說明文檔在里增加和兩個(gè)方法顯示效果原文地址地址 laravel中使用WangEditor及多圖上傳 1. 創(chuàng)建項(xiàng)目及安裝所需安裝包 1.1 創(chuàng)建項(xiàng)目 composer create-project laravel/laravel=5.3 blog_wangeditor --prefer-dist 1.2 創(chuàng)建...

    qianfeng 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<