在ToC業(yè)務(wù)里赴恨,往往需要在不影響客戶體驗(yàn)的情況下進(jìn)行系統(tǒng)遷移(還是國(guó)企好,說(shuō)停機(jī)就停機(jī))伴栓。不停機(jī)遷移分為兩個(gè)階段伦连。第一階段是通過(guò)流量測(cè)試驗(yàn)證新系統(tǒng)的功能正確性、可伸縮性和性能問(wèn)題钳垮,確保新系統(tǒng)的彈性惑淳。第二階段就是逐步將流量遷移到新系統(tǒng),并監(jiān)控各種指標(biāo):包括客戶設(shè)備級(jí)別的體驗(yàn)質(zhì)量(QoE扔枫,Quality-of-Experience)度量汛聚、服務(wù)級(jí)別協(xié)議(SLA,Service-Level-Agreement)和業(yè)務(wù)級(jí)別的關(guān)鍵性能指標(biāo)(KPI短荐,Key-Performance-Indicator)倚舀。
為了沿驗(yàn)證新系統(tǒng)的正確性和性能,要進(jìn)行重放流量測(cè)試(Reply Traffic Testing)——生產(chǎn)流量復(fù)制和分發(fā)一份到新系統(tǒng)運(yùn)行忍宋,并對(duì)比新舊系統(tǒng)返回結(jié)果的一致性痕貌。
重放解決方案
重放流量測(cè)試解決方案有倆組件:
- 流量復(fù)制和關(guān)聯(lián): 復(fù)制一份流量給新系統(tǒng)的路徑上,并記錄新老系統(tǒng)的結(jié)果
- 對(duì)比分析和報(bào)告: 對(duì)比新老系統(tǒng)的結(jié)果并進(jìn)行分析報(bào)告糠排。
有三種方案去進(jìn)行流量復(fù)制舵稠,
第一種是設(shè)備驅(qū)動(dòng),就是用戶的客戶端去進(jìn)行兩次相同請(qǐng)求給新老系統(tǒng)入宦,缺點(diǎn)是浪費(fèi)客戶端資源哺徊,影響QoE(客戶體驗(yàn)),并且分發(fā)邏輯依賴客戶端代碼乾闰,客戶端迭代周期滿落追,會(huì)影響服務(wù)發(fā)布周期導(dǎo)致遷移瓶頸,此外涯肩,允許設(shè)備執(zhí)行未經(jīng)測(cè)試的服務(wù)端代碼路徑可能會(huì)無(wú)意中暴露潛在攻擊面轿钠。
第二種是服務(wù)端驅(qū)動(dòng),在后端的業(yè)務(wù)邏輯進(jìn)行流量重放病苗,把復(fù)雜度放在了后端疗垛。但是會(huì)要在業(yè)務(wù)邏輯里耦合流量重放測(cè)試功能,重放邏輯中的bug也有可能影響產(chǎn)品代碼和指標(biāo)硫朦,同樣增加了風(fēng)險(xiǎn)贷腕。
第三種是專用服務(wù),加一個(gè)中間層ReplyService,類似插件接口泽裳,重放流量打到ReplyService上芽世,新服務(wù)可以像插件一樣注冊(cè)ReplyService。
重放流量分析
歸一化:要對(duì)結(jié)果進(jìn)行預(yù)處理诡壁,例如無(wú)序的列表济瓢,時(shí)間戳,都要化作可比較的數(shù)據(jù)妹卿。
比較:對(duì)雙方響應(yīng)結(jié)果和關(guān)鍵數(shù)據(jù)進(jìn)行比較旺矾。
追溯:生成響應(yīng)所涉及所有依賴項(xiàng)數(shù)據(jù)版本或校驗(yàn)和的綜合摘要,稱為追溯夺克。例如隨機(jī)數(shù)和依賴數(shù)據(jù)生成的響應(yīng)箕宙。
還要比較實(shí)時(shí)流量、進(jìn)行壓力測(cè)試铺纽。
重放測(cè)試之后柬帕,就要開始正式的遷移了。遷移過(guò)程需要逐步將流量切換到新集群中狡门,就需要一個(gè)流量分發(fā)組件陷寝,能將流量按權(quán)重分給舊系統(tǒng)和新系統(tǒng),這叫灰度發(fā)布也叫金絲雀組其馏。A/B測(cè)試則是把用戶分幾個(gè)組凤跑,控制變量去評(píng)估結(jié)果。
遷移有狀態(tài)服務(wù)
實(shí)際上數(shù)據(jù)庫(kù)也是一個(gè)有狀態(tài)的服務(wù)叛复,所謂無(wú)狀態(tài)服務(wù)仔引,就是可以隨意kill掉然后創(chuàng)建一個(gè)新的。數(shù)據(jù)庫(kù)不能這樣褐奥,所以需要進(jìn)行遷移咖耘。遷移有狀態(tài)比無(wú)狀態(tài)麻煩,可以分為同步初始數(shù)據(jù)撬码、雙活/雙寫進(jìn)行數(shù)據(jù)同時(shí)寫入新舊系統(tǒng)儿倒,然后加大新系統(tǒng)使用,然后實(shí)時(shí)監(jiān)控正確性耍群。
參考資料:
[大廠實(shí)踐] 無(wú)停機(jī)遷移大規(guī)模關(guān)鍵流量 (上)
[大廠實(shí)踐] 無(wú)停機(jī)遷移大規(guī)模關(guān)鍵流量(下)