node.js - web項目升級怎么樣避免用戶請求無響應
問題描述
比如有5臺服務器跑了5個node項目,然后前面使用nginx做負載均衡
比如項目訪問量很大,然后增加了一些新的功能,項目需要升級 5臺服務器逐個升級,怎么能保證在升級的過程中不會影響訪問
例如 現在要升級A服務器上的node項目,但是A服務器上有許多請求 如果直接升級的話,請求可能就會沒有響應,如果項目涉及到對數據庫操作,可能會產生臟數據
我能想到的一種方案是 事先發公告 沒有流量的時候再升級
我想請問還沒有其它方案,在不影響用戶請求的情況下對服務進行升級呢
問題解答
回答1:只是無響應 (我猜是tcp連接中斷) 比較簡單,nginx切換配置時可以graceful restart的,這樣可以撤掉一臺后端--升級后端--加回去。
但是'不影響訪問' 不止要解決這個,你還需要讓舊版本的前端和新版本的服務器可以共用。
臟數據是另一個問題了。不應該期待每個請求都正常結束,清理臟數據 (現場或事后) 的機制總歸是應該有的。
回答2:當你的服務器支持平滑重啟,這就比較方便了。平滑重啟可能是你自己實現的,也可能是框架或者庫提供的。
回答3:你這么想本來就是錯的,除非你5臺機器上部署的是不同的項目,那么升級只能停機,不然還能怎么辦你說。你這個意思是5臺機器上部署同一個項目,那么升級的時候你考慮怎么能不影響服務,你的出發點應該在這兒,那這里就有一個問題,對于一個請求你是怎么做分發到5臺機器上的,你怎么做的然后就在哪里調整就是了,在低谷的時候把5臺改成4臺,然后升級成功之后再加回去,如果擔心升級過程中響應不過來,那么就調整緩存時間,都5臺機器了,不會沒緩存把。。。
回答4:升級一般都是凌晨升級,因為如果出了什么問題,都不會影響那么大
回答5:負責均衡下掉一臺服務器,升級,然后再up
回答6:完全不影響是不可能,只有盡可能的讓影響看不出來,你觀察一下京東就會發現,它家的服務器經常凌晨升級,升級的時候你打開它的菜單是刷不出東西來的,就看不停的轉圈,但是就是不出內容。所以基本都是升級的時候把服務器切換到友好的不出內容界面,升級完再換回來。
回答7:逐臺升級,升級過程中把流量引導其他服務器
回答8:我們項目是用pm2發布和做進程管理的
發布的時候不會影響用戶是用
回答9:熱部署
灰度發布
相關文章:
1. angular.js - webpack build后的angularjs路由跳轉問題2. java - web項目中,用戶登陸信息存儲在session中好 還是cookie中好,取決于什么?3. 數組按鍵值封裝!4. mysql - 根據一個字段查找另一個字段重復的數據?并刪除相同的記錄,保留其中一個。5. mysql - 查詢字段做了索引為什么不起效,還有查詢一個月的時候數據都是全部出來的,如果分拆3次的話就沒問題,為什么呢。6. 這個是什么問題?7. mysql - navicat 經常打開表一直在載入中 也不能關閉 著急解決8. 單擊登錄按鈕無反應9. mysql 新增用戶 主機名設定 失敗10. mysql儲存json錯誤
