爲何不少公司升級系統,選擇在晚上上線?nginx
答:美名其曰,晚上上線,對用戶影響最小。web
爲何會對用戶產生影響?tomcat
答:系統升級每每須要重啓,重啓的過程當中,正在訪問的用戶會訪問失敗。框架
若是升級的是web-server:tcp
如上圖,重啓ip1上的tomcat時,tomcat上或許有1000個http請求正在處理,這些請求就會失敗。分佈式
若是升級的是service:微服務
如上圖,重啓ip1的service時,service上或許有2000個請求正在處理,這些請求就會失敗。源碼分析
web-server升級可否不影響正在處理的請求?性能
答:能夠,須要nginx和web-server配合。學習
(1)給nginx發指令,將ip1上的流量切走
(2)nginx不會將新流量放給ip1,舊流量會很快處理完成
(3)舊流量完成後,升級web-server
此時,ip1上的web-server處於沒有流量的情況,能夠隨便玩:
(4)給nginx發指令,將流量切回ip1
(5)流量切回ip1,單節點上線成功
一個節點升級完成以後,其餘節點能夠依次逐臺升級。
service升級可否不影響正在處理的請求?
答:能夠,須要RPC-client和RPC-server配合。
(1)向準備升級的service節點ip1發送切流量指令
這裏和web-service不一樣:
(2)RPC-server經過tcp長鏈接將切流量的指令通知RPC-client
執行切流量指令的組件最終是RPC-client上的tcp鏈接池。
(3)RPC-client再也不將新流量放給ip1,舊流量逐步處理完成
爲啥不能像web-server同樣,直接給上游nginx發指令呢,由於service有太多的上游。
(4)舊流量逐步遷移完成,RPC-client會間歇性重連
此時,ip1上的service處於沒有流量的情況,能夠隨便玩:
這個過程當中,RPC-client會間歇性嘗試重連(例如每分鐘重試一次),直至ip1節點恢復
(5)流量切回ip1,單節點上線成功
一個節點升級完成以後,其餘節點能夠依次逐臺升級
是否還有其餘注意事項?
答: