場(chǎng)景:假設(shè)一個(gè)員工管理系統(tǒng)項(xiàng)目有如下功能
- 員工考勤管理
- 員工請(qǐng)假管理
- 薪資查詢
- 員工報(bào)表統(tǒng)計(jì)
- 合同管理
項(xiàng)目的要求很簡(jiǎn)單闯割,也很現(xiàn)實(shí):第一個(gè)版本只要員工考勤和員工請(qǐng)假管理,出來(lái)后立即發(fā)布竿拆。當(dāng)很多企業(yè)下載了該版本的員工管理系統(tǒng)宙拉,發(fā)現(xiàn)功能不齊,要求系統(tǒng)應(yīng)該增加后面的功能如输。于是就有了版本升級(jí)鼓黔。
當(dāng)有新的版本(含了新功能薪資查詢,報(bào)表統(tǒng)計(jì)等)如何才能做好版本的升級(jí)呢不见?
這里推薦用戶一鍵升級(jí)的方式來(lái)升級(jí)項(xiàng)目澳化,操作簡(jiǎn)單,就像桌面軟件一樣稳吮,發(fā)現(xiàn)有新的版本缎谷,點(diǎn)擊更新,不用做任何操作就會(huì)升級(jí)到最新版本灶似。
如何實(shí)現(xiàn)一鍵升級(jí)列林?
這里推薦swoole搭建一個(gè)websocket服務(wù),來(lái)實(shí)現(xiàn)前端交互酪惭。整體設(shè)計(jì)流程如下圖所示:
主要文件如下:
version(文件)
db/(數(shù)據(jù)庫(kù)目錄)
db/userdb.sql(上傳過(guò)程中產(chǎn)生的備份的用戶數(shù)據(jù))
upgrade.php (當(dāng)前項(xiàng)目主升級(jí)文件)
...//其他項(xiàng)目文件
down/db/sys.sql (最新數(shù)據(jù)庫(kù)結(jié)構(gòu)希痴,以及系統(tǒng)數(shù)據(jù)文件)
down/upgrade.php (上傳包解壓后的主升級(jí)文件)
down/(升級(jí),上傳壓縮文件目錄)
down/version
down/.. 其他文件
主要流程:
- 上傳壓縮文件:將遠(yuǎn)程包下載到本地春感,點(diǎn)擊上傳(這里采用ajax異步上傳)
- 解壓縮:將上傳的壓縮包解壓到 down目錄下砌创。
- 檢驗(yàn)文件合法性:避免上傳的非法文件,或者非項(xiàng)目的壓縮包鲫懒,導(dǎo)致整個(gè)項(xiàng)目癱瘓嫩实。
- 校驗(yàn)版本:如果要升級(jí)的版本大于當(dāng)前項(xiàng)目版本,方可升級(jí)窥岩。
- 覆蓋項(xiàng)目文件:將down解壓下的所有文件覆蓋原項(xiàng)目下的文件甲献。
- 熱重啟:這一步很重要。swoole 熱重啟的方法為:$server->reload(); 后面會(huì)介紹為什么需要熱重啟颂翼!
- 備份用戶數(shù)據(jù)晃洒,刪除原數(shù)據(jù)表:表分用戶表和數(shù)據(jù)表,后面做詳細(xì)介紹疚鲤。
- 導(dǎo)入最新表:將最新的表結(jié)構(gòu)和系統(tǒng)數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)锥累,并且將上一步導(dǎo)入的用戶數(shù)據(jù)表導(dǎo)入到數(shù)據(jù)庫(kù)。完成數(shù)據(jù)庫(kù)的升級(jí)和恢復(fù)
- 更改版本號(hào) 將down/version替換項(xiàng)目下version文件
- 升級(jí)完成集歇!
更好的升級(jí)辦法
上傳壓縮包可以做成到云上自動(dòng)下載。這樣可以實(shí)現(xiàn)真正的一鍵升級(jí)语淘,也可以避免因?yàn)樯蟼麇e(cuò)壓縮包導(dǎo)致系統(tǒng)癱瘓的風(fēng)向诲宇。
為什么要熱重啟际歼?
也許,之前的upgrade.php文件并不完善姑蓝,但是每次我們項(xiàng)目的upgrade.php文件是通過(guò)swoole運(yùn)行在內(nèi)存中鹅心,只要進(jìn)程不斷開(kāi),替換或者刪除項(xiàng)目下的upgrade.php文件纺荧,原來(lái)的upgrade.php依舊正常運(yùn)行旭愧。當(dāng)upgrade.php升級(jí)邏輯做了改變的時(shí)候,怎樣才能實(shí)現(xiàn)運(yùn)行的是上傳上去新版本的upgrade.php呢宙暇?
swoole官網(wǎng)提供了熱重啟功能输枯。當(dāng)熱重啟完成后,再次進(jìn)入websocket接口占贫,運(yùn)行的便是最新上傳的升級(jí)文件桃熄。
用戶數(shù)據(jù)和系統(tǒng)數(shù)據(jù)
用戶數(shù)據(jù)指的是用戶產(chǎn)生的數(shù)據(jù),比如該項(xiàng)目中的用戶信息型奥。系統(tǒng)數(shù)據(jù)指的是系統(tǒng)控制的數(shù)據(jù)瞳收,比如所有的員工類型。
升級(jí)數(shù)據(jù)庫(kù)最好的辦法就是 將數(shù)據(jù)表結(jié)構(gòu)和系統(tǒng)數(shù)據(jù)升級(jí)到最新厢汹,然后導(dǎo)入原來(lái)的用戶數(shù)據(jù)螟深。
文檔結(jié)束!
不懂可以加qq:1186969412 qq群:536633782
官網(wǎng):http://uminicmf.com/
php在線面試題集:http://cainiaophp.com/
php面試討論群:536633782