對於php而言,在業務發展初期,可以快速實現業務原型,滿足需求,但是在發展的中後期就顯得略有點後勁不足。
因為php在高併發、多程序/執行緒以及密集計算領域並不擅長。這種情況在swoole出現之後得到了很大的緩和。
但是,隨著微服務架構的興起以及容器時代的到來,這種情況又再次加劇。因為php大都需要借助nginx和php-fpm或類似軟體來進行程序管理,這對於部署的微服務意味著部署php專案**的同時必須同時包括php-fpm和nginx,這除了增加資源成本也降低了效率。
那麼,為什麼是golang呢?
當然了,即便如此,php還是世界上最好的語言。
做好了思想上的準備之後,就可以開始確立技術方案了。
任何大型系統的重構都不可能是一蹴而就,頃刻之間發生的,需要乙個循序漸進的過程。並且,在此重構過程中,大前提必須保持現有系統的所有業務照常執行,所以需要確立的是乙個對系統基本無損的分模組逐步替換的方案。
回歸到我們當前的系統架構:每台伺服器上均部署相同的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庫等。
關於第三方熱更新庫邏輯大致為:
以上大致接介紹了從php專案遷移到golang所需的一些思想與技術上的準備,後續篇章將介紹具體技術方案與實現細節。
svn從windows遷移至unbuntu
1.apt get install subversion 獲取svn 2.mkdir opt svn 我把svn目錄放在opt下 3.svnadmin create opt svn cloud 建立乙個svn專案 4.rm rf opt svn cloud 把svn內容清空 5.利用ssh secu...
從AIX遷移至SUSE11基本配置
1 永久修改主機名 vi etc hostname vi etc hosts sysctl w kernel.hostname 主機名 2 同步時間 ntpdate 目標ip 3 關閉防火牆 vi etc init.d chkconfig susefirewall2 init off stop ch...
SVN伺服器從windows遷移至Linux
一 備份visualsvn專案 1.現在要使用linux作為svn伺服器,之前是在windows server 2008上的,用的是visualsvn,作者除了遷移了svn還有禪道,gitlab等,為此可是查閱了很多資料,為此做乙個總結,希望以後遇到類似問題的有資料可查,有興趣的可以看看我的其他隨筆...