轉(zhuǎn)載:https://www.sohu.com/a/228710646_178889
**為什么很
為什么很多公司升級(jí)系統(tǒng)北苟,選擇在晚上上線(xiàn)?
答:美名其曰刺桃,晚上上線(xiàn)粹淋,對(duì)用戶(hù)影響最小。
為什么會(huì)對(duì)用戶(hù)產(chǎn)生影響瑟慈?
答:系統(tǒng)升級(jí)往往需要重啟桃移,重啟的過(guò)程中,正在訪(fǎng)問(wèn)的用戶(hù)會(huì)訪(fǎng)問(wèn)失敗葛碧。
如果升級(jí)的是web-server:
如上圖借杰,重啟ip1上的tomcat時(shí),tomcat上或許有1000個(gè)http請(qǐng)求正在處理进泼,這些請(qǐng)求就會(huì)失敗蔗衡。
如果升級(jí)的是service:
如上圖,重啟ip1的service時(shí)乳绕,service上或許有2000個(gè)請(qǐng)求正在處理绞惦,這些請(qǐng)求就會(huì)失敗。
web-server****升級(jí)能否不影響正在處理的請(qǐng)求洋措?
答:可以济蝉,需要nginx和web-server配合。
(1)給nginx發(fā)指令菠发,將ip1上的流量切走
(2)nginx不會(huì)將新流量放給ip1王滤,舊流量會(huì)很快處理完成
(3)舊流量完成后,升級(jí)web-server
此時(shí)滓鸠,ip1上的web-server處于沒(méi)有流量的狀況雁乡,可以隨便玩:
- 停服務(wù)備份
- 升級(jí)(粉色代表升級(jí)后的節(jié)點(diǎn))
- 服務(wù)重啟
- 測(cè)試工程師直連ip1進(jìn)行驗(yàn)證
- 驗(yàn)證完畢
(4)給nginx發(fā)指令,將流量切回ip1
(5)流量切回ip1糜俗,單節(jié)點(diǎn)上線(xiàn)成功
一個(gè)節(jié)點(diǎn)升級(jí)完成之后踱稍,其他節(jié)點(diǎn)可以依次逐臺(tái)升級(jí)。
service****升級(jí)能否不影響正在處理的請(qǐng)求悠抹?
答:可以珠月,需要RPC-client和RPC-server配合。
(1)向準(zhǔn)備升級(jí)的service節(jié)點(diǎn)ip1發(fā)送切流量指令
這里和web-service不同:
- web-service是向上游nginx發(fā)指令切流量
- service是通過(guò)下游server發(fā)指令切流量
(2)RPC-server通過(guò)tcp長(zhǎng)連接將切流量的指令通知RPC-client
執(zhí)行切流量指令的組件最終是RPC-client上的tcp連接池锌钮。
(3)RPC-client不再將新流量放給ip1,舊流量逐步處理完成
為啥不能像web-server一樣引矩,直接給上游nginx發(fā)指令呢梁丘,因?yàn)閟ervice有太多的上游侵浸。
(4)舊流量逐步遷移完成,RPC-client會(huì)間歇性重連
此時(shí)氛谜,ip1上的service處于沒(méi)有流量的狀況掏觉,可以隨便玩:
- 停服務(wù)備份
- 升級(jí)(粉色代表升級(jí)后的節(jié)點(diǎn))
- 服務(wù)重啟
這個(gè)過(guò)程中,RPC-client會(huì)間歇性嘗試重連(例如每分鐘重試一次)值漫,直至ip1節(jié)點(diǎn)恢復(fù)
(5)流量切回ip1澳腹,單節(jié)點(diǎn)上線(xiàn)成功
一個(gè)節(jié)點(diǎn)升級(jí)完成之后,其他節(jié)點(diǎn)可以依次逐臺(tái)升級(jí)
是否還有其他注意事項(xiàng)杨何?
答:
- 如果沒(méi)有實(shí)現(xiàn)服務(wù)自動(dòng)發(fā)現(xiàn)酱塔,服務(wù)治理,早期可以這么玩
- web-server無(wú)損升級(jí)危虱,強(qiáng)烈建議腳本化
- service無(wú)損升級(jí)羊娃,需要服務(wù)框架支持
希望大家有收獲。幫轉(zhuǎn)哈埃跷。