1. 程式人生 > >平滑重啟和平滑重啟原理

平滑重啟和平滑重啟原理

什麼是平滑重啟?

平滑重啟不同於普通的重啟,平滑重啟可以做到在不影響使用者的情況下重啟服務,以便重新載入PHP程式,完成業務程式碼更新。

平滑重啟一般應用於業務更新或者版本釋出過程中,能夠避免因為程式碼釋出重啟服務導致的暫時性服務不可用的影響。

注意:只有子程序執行過程中載入的檔案支援reload,主程序載入的檔案不支援reload。或者說Worker::runAll執行完後workerman執行過程中動態載入的檔案支援reload,Worker::runAll執行前就載入的檔案程式碼不支援reload

平滑重啟原理

WorkerMan分為主程序和子程序,主程序負責監控子程序,子程序負責接收客戶端的連線和連線上發來的請求資料,做相應的處理並返回資料給客戶端。當業務程式碼更新時,其實我們只要更新子程序,便可以達到更新程式碼的目的。

當WorkerMan主程序收到平滑重啟訊號時,主程序會向其中一個子程序傳送安全退出(讓對應程序處理完畢當前請求後才退出)訊號,當這個程序退出後,主程序會重新建立一個新的子程序(這個子程序載入了新的PHP程式碼),然後主程序再次向另外一箇舊的程序傳送停止命令,這樣一個程序一個程序的重啟,直到所有舊的程序全部被置換為止。

我們看到平滑重啟實際上是讓舊的業務程序逐個退出然後並逐個建立新的程序做到的。為了在平滑重啟時不影響客使用者,這就要求程序中不要儲存使用者相關的狀態資訊,即業務程序最好是無狀態的,避免由於程序退出導致資訊丟失。