為什么很多公司升級系統(tǒng),選擇在晚上上線谦趣?
答:美名其曰,晚上上線座每,對用戶影響最小前鹅。
為什么會對用戶產(chǎn)生影響?
答:系統(tǒng)升級往往需要重啟峭梳,重啟的過程中舰绘,正在訪問的用戶會訪問失敗。
如果升級的是web-server:
如上圖葱椭,重啟ip1上的tomcat時捂寿,tomcat上或許有1000個http請求正在處理,這些請求就會失敗挫以。
如果升級的是service:
如上圖者蠕,重啟ip1的service時,service上或許有2000個請求正在處理掐松,這些請求就會失敗踱侣。
web-server升級能否不影響正在處理的請求粪小?
答:可以,需要nginx和web-server配合抡句。
(1)給nginx發(fā)指令探膊,將ip1上的流量切走
(2)nginx不會將新流量放給ip1,舊流量會很快處理完成
(3)舊流量完成后待榔,升級web-server
此時逞壁,ip1上的web-server處于沒有流量的狀況,可以隨便玩:
停服務(wù)備份
升級(粉色代表升級后的節(jié)點(diǎn))
服務(wù)重啟
測試工程師直連ip1進(jìn)行驗(yàn)證
驗(yàn)證完畢
(4)給nginx發(fā)指令锐锣,將流量切回ip1
(5)流量切回ip1腌闯,單節(jié)點(diǎn)上線成功
一個節(jié)點(diǎn)升級完成之后,其他節(jié)點(diǎn)可以依次逐臺升級雕憔。
service升級能否不影響正在處理的請求姿骏?
答:可以,需要RPC-client和RPC-server配合斤彼。
(1)向準(zhǔn)備升級的service節(jié)點(diǎn)ip1發(fā)送切流量指令
這里和web-service不同:
web-service是向上游nginx發(fā)指令切流量
service是通過下游server發(fā)指令切流量
(2)RPC-server通過tcp長連接將切流量的指令通知RPC-client
執(zhí)行切流量指令的組件最終是RPC-client上的tcp連接池分瘦。
(3)RPC-client不再將新流量放給ip1,舊流量逐步處理完成
為啥不能像web-server一樣琉苇,直接給上游nginx發(fā)指令呢嘲玫,因?yàn)閟ervice有太多的上游。
(4)舊流量逐步遷移完成并扇,RPC-client會間歇性重連
此時去团,ip1上的service處于沒有流量的狀況,可以隨便玩:
停服務(wù)備份
升級(粉色代表升級后的節(jié)點(diǎn))
服務(wù)重啟
這個過程中拜马,RPC-client會間歇性嘗試重連(例如每分鐘重試一次)渗勘,直至ip1節(jié)點(diǎn)恢復(fù)
(5)流量切回ip1,單節(jié)點(diǎn)上線成功
一個節(jié)點(diǎn)升級完成之后俩莽,其他節(jié)點(diǎn)可以依次逐臺升級
是否還有其他注意事項(xiàng)?
答:
如果沒有實(shí)現(xiàn)服務(wù)自動發(fā)現(xiàn)乔遮,服務(wù)治理扮超,早期可以這么玩
web-server無損升級,強(qiáng)烈建議腳本化
service無損升級蹋肮,需要服務(wù)框架支持