前端系統(tǒng)服務(wù)遷移通用方案

前端系統(tǒng)服務(wù)遷移方案

背景

由于公司內(nèi)部架構(gòu)調(diào)整,原來負(fù)責(zé)的業(yè)務(wù)由橫向支撐昧捷,閉環(huán)到了業(yè)務(wù)部門罐寨。人員也跟著到了業(yè)務(wù)部門下鸯绿,所以需要對(duì)原項(xiàng)目進(jìn)行跨部門遷移。

主要從以下幾點(diǎn)考量遷移的必要性:(涉及到具體業(yè)務(wù)用A幔烛、B指代饿悬,A業(yè)務(wù)代表我負(fù)責(zé)的業(yè)務(wù)狡恬,B業(yè)務(wù)為其他業(yè)務(wù))

  • 影響范圍&穩(wěn)定性:項(xiàng)目原架構(gòu)為monorepo,其他包的改動(dòng)會(huì)影響到我們業(yè)務(wù)子包的部署上線祷安,可能會(huì)帶來潛在的第三方線上問題汇鞭。且B業(yè)務(wù)回滾可能會(huì)影響到A業(yè)務(wù)庸追。

    • 其他業(yè)務(wù)耦合:B業(yè)務(wù)代碼和我們業(yè)務(wù)代碼走同一條流水線打包部署淡溯,耦合性較高咱娶,且B業(yè)務(wù)代碼目前全部是外包維護(hù),質(zhì)量較差屈糊,會(huì)影響到我們業(yè)務(wù)前端的穩(wěn)定性
  • 流程&人力&效率:由于組件架構(gòu)調(diào)整另玖,目前上線還要依賴原團(tuán)隊(duì)oncall審批表伦,原團(tuán)隊(duì)無法隨時(shí)抽調(diào)人力對(duì)商業(yè)化項(xiàng)目進(jìn)行CR/發(fā)版/上線蹦哼,效率低且可控性差纲熏。

    • 無代碼合并權(quán)限:原上線部署流程是oncall人員輪班制度锄俄,oncall需要申請(qǐng)權(quán)限奶赠,負(fù)責(zé)原倉庫的所有業(yè)務(wù)的代碼合并發(fā)版上線回滾操作毅戈,合并需要在oncall群統(tǒng)一艾特相關(guān)人員留存記錄愤惰,合并權(quán)限一周后回收宦言。目前脫離原組織架構(gòu)奠旺,無法繼續(xù)走oncall輪班施流,只能依賴原部門前端嫂沉。

      image-20231121152010564.png

      • oncall人力無法隨時(shí)抽調(diào):日常發(fā)版走定時(shí)班車制趟章,無法隨時(shí)match商業(yè)化后端部署節(jié)奏蚓土。緊急上線回滾時(shí)蜀漆,無法隨時(shí)抽調(diào)原團(tuán)隊(duì)人力支持A業(yè)務(wù)項(xiàng)目的發(fā)版/上線/回滾确丢。
  • 框架基建:修改框架基建會(huì)影響到其他不屬于A業(yè)務(wù)的子包,需要推動(dòng)原團(tuán)隊(duì)前端進(jìn)行修改和review

  • 機(jī)器資源:機(jī)器資源歸屬于原團(tuán)隊(duì)褂始,目前和B業(yè)務(wù)共用同一臺(tái)機(jī)器發(fā)版崎苗,資源不可控

    • 原流水線和容器中胆数,包含了其他業(yè)務(wù)線的業(yè)務(wù)互墓,需要拆包部署隔離

一篡撵、調(diào)研

遷移內(nèi)容:項(xiàng)目中原架構(gòu)為monorepo架構(gòu),本次遷移涉及到A1業(yè)務(wù)子包骂租、A2業(yè)務(wù)子包渗饮。(A1互站、A2均為我負(fù)責(zé)的業(yè)務(wù))

時(shí)間deadline:最多一個(gè)月時(shí)間胡桃,排期緊張。

1容贝、可行性

由于本次遷移涉及范圍是兩個(gè)部門之間,涉及到跨部門之景,所以需要和原部門確認(rèn)該業(yè)務(wù)子包是否可遷出斤富,流水線是否可遷出,可以遷出那機(jī)器的配置和容災(zāi)情況要怎么配锻狗,遷出以后是否會(huì)有風(fēng)險(xiǎn)满力。

  • 流程是否可遷移:復(fù)制流水線

  • 容器是否可遷移:生產(chǎn)環(huán)境容器需要1C2G,測(cè)試環(huán)境需要0.5C1G

  • 代碼是否可遷移:可以轻纪,克隆原倉庫

2油额、難點(diǎn)

本次遷移時(shí)間緊急刻帚,到deadline只有一個(gè)月潦嘶,期間需要保障業(yè)務(wù)研發(fā)穩(wěn)定推進(jìn),還要保障遷移有序進(jìn)行我擂。實(shí)操時(shí)間可能不到一周,需要對(duì)整體節(jié)奏規(guī)劃清楚缓艳,面臨的挑戰(zhàn)主要有:

  • 項(xiàng)目代碼復(fù)雜:相互依賴較多校摩,其他業(yè)務(wù)的包也耦合其中,需要剔除阶淘。

  • 功能驗(yàn)證復(fù)雜:涉及海量頁面衙吩,測(cè)試無法覆蓋到所有頁面。

  • 穩(wěn)定性保障:新舊項(xiàng)目需要完全隔離溪窒,互不影響坤塞。

  • 機(jī)器資源:之前沒有做過機(jī)器相關(guān)的工作冯勉;機(jī)器資源需要申請(qǐng),配置也需要同步摹芙。

  • 域名流量切換:切換流量需要做到用戶無感灼狰,且不出故障。

  • 代碼遷移同步:代碼遷移需要做到和源倉庫完全同步浮禾,保障正在開發(fā)中的需求不受影響交胚。

3、如何度量遷移成果

  • 遷移過程中上線0故障

  • 影響范圍縮小到0:原團(tuán)隊(duì)和A業(yè)務(wù)發(fā)版上線隔離盈电,不會(huì)出現(xiàn)公共包部署帶來的潛在第三方問題

  • 流程閉環(huán)效率提升:A業(yè)務(wù)項(xiàng)目發(fā)版上線蝴簇,不依賴其他團(tuán)隊(duì),可以內(nèi)部獨(dú)立上線&回滾匆帚,效率提升熬词,可隨時(shí)match我們部門前后端節(jié)奏發(fā)版,遇到問題回滾更迅速吸重,更加可控

  • 機(jī)器資源閉環(huán):前端部署的容器資源遷移到A業(yè)務(wù)團(tuán)隊(duì)下互拾,不受原團(tuán)隊(duì)縮減機(jī)器成本影響

二、實(shí)施

  • 盤點(diǎn)機(jī)器資源晤锹,申請(qǐng)遷移所需的機(jī)器資源

  • 新建流水線摩幔,將原代碼倉庫部署到新staging容器上,并將staging流量打到新staging容器鞭铆,穩(wěn)定運(yùn)行一段時(shí)間

  • 將原代碼倉庫部署到新prod容器上或衡,通過測(cè)試路由將流量打到新prod容器上,穩(wěn)定運(yùn)行一段時(shí)間

  • 新建代碼倉庫车遂,遷移原代碼封断,并接入新流水線,打通新staging和新prod容器的流量舶担,通過測(cè)試路由進(jìn)行放量測(cè)試

  • 將線上路由打通到新prod容器坡疼,進(jìn)行灰度測(cè)試,穩(wěn)定運(yùn)行后切掉舊機(jī)器流量衣陶,全部遷移到新容器

1柄瑰、遷移功能盤點(diǎn)

  • 域名流量遷移

  • 保持原path不變,公司內(nèi)部網(wǎng)關(guān)代理流量遷移(提供反向代理剪况、訪問控制教沾、HTTPS 等功能,為接入的 Web 應(yīng)用提供安全防護(hù)译断,所有 Web 服務(wù)部署在改服務(wù)的后方授翻。)。

  • 機(jī)器遷移

    • 盤點(diǎn)機(jī)器資源

    • 配置復(fù)制原有配置

    • 將打包內(nèi)容部署到新機(jī)器上

    • 流量切換

    • 容災(zāi)策略

    • 穩(wěn)定性保障

  • 流程遷移

    • 流水線復(fù)制

    • 代碼合并權(quán)限

    • 上線通知機(jī)器人遷移

  • 代碼遷移

    • 倉庫代碼遷移

    • 代碼同步源倉庫

2、設(shè)定里程碑

時(shí)間點(diǎn)進(jìn)行脫敏處理堪唐,大概看下就行巡语。

  • 2023/0x/xx 盤點(diǎn)機(jī)器資源

  • 2023/0x/xx 方案實(shí)施調(diào)研

  • 2023/0x/xx 方案細(xì)化設(shè)計(jì)

  • 2023/0x/xx 創(chuàng)建流水線

  • 2023/0x/xx 部署到公司的靜態(tài)容器

  • 2023/0x/xx 部署到測(cè)試環(huán)境,staging上可訪問到新容器

  • 2023/0x/xx 功能驗(yàn)證

  • (x月)容災(zāi)策略制定

  • (x月)灰度流量切換

  • (x月)穩(wěn)定性保障

  • (x月)持續(xù)觀測(cè)無問題

  • (x月底)完成

3淮菠、遷移

  1. 創(chuàng)建靜態(tài)容器部署服務(wù)

  2. 流水線創(chuàng)建

  3. 關(guān)聯(lián)靜態(tài)部署服務(wù)和流水線

  4. 創(chuàng)建路由path

  5. 使用代理服務(wù)器的路由測(cè)試是否可以正常訪問男公,正常會(huì)跨域,服務(wù)跑不通兜材,只要check靜態(tài)資源加載正常就好理澎。

    1. 例如代理路由為 xiaoqingwa.proxy.com/frontend/index.html
  6. 通過代理工具(例如whistle)配置本地代理,將線上真實(shí)staging環(huán)境代理到測(cè)試的域名上曙寡,使用真實(shí)staging路由訪問糠爬,可以正常訪問。并且加載的資源也是靜態(tài)部署容器的

    1. 舉例:線上staging環(huán)境域名為 staging.kuaishou.com/frontend/index.html举庶,我們部署的服務(wù)為xiaoqingwa.proxy.com/frontend/index.html执隧,通過whistle配置 staging.kuaishou.com/frontend/index.html xiaoqingwa.proxy.com/frontend/index.html這樣就可以通過正式staging域名訪問到我們部署的服務(wù)進(jìn)行測(cè)試了,可以通過靜態(tài)資源返回Header判斷是否是新容器户侥。
      image-20231121154048590.png

      image-20231121154116806.png
  1. 到目前為止镀琉,測(cè)試代理路由是成功的,我們就可以著手切線上流量了蕊唐。

    1. 到公司內(nèi)網(wǎng)網(wǎng)關(guān)根據(jù)不同的路徑匹配規(guī)則配置對(duì)應(yīng)接口流量轉(zhuǎn)發(fā)到新的容器即可屋摔。
    image-20231121154405377.png

    image-20231121154428538.png
  1. 進(jìn)行功能驗(yàn)證、權(quán)限驗(yàn)證沒問題

  2. beta環(huán)境遷移同上替梨,不贅述了

  3. 生產(chǎn)環(huán)境遷移

  4. 生產(chǎn)環(huán)境目前有五條線路钓试,我們就叫p1,p2,p3,p4,p5。只有p5是走網(wǎng)關(guān)代理配置副瀑,p1-p4走的是Nginx配置

  5. 列遷移計(jì)劃

    1. 可以現(xiàn)在p5切流測(cè)試弓熏,生產(chǎn)環(huán)境灰度發(fā)布,漸進(jìn)式遷移

    2. 升級(jí)回滾方案需要制定糠睡,保障業(yè)務(wù)不出問題

    3. 上線Nginx方案待學(xué)習(xí)

    4. 遷移admin.p5 (這里不贅述了挽鞠,和staging,beta環(huán)境一模一樣)

  6. 遷移p1-p4

**TODO**

4狈孔、功能驗(yàn)證

staging 驗(yàn)證完成

beta 驗(yàn)證完成

prod 待驗(yàn)證 p5驗(yàn)證完成信认,p1-p4待驗(yàn)證

5、穩(wěn)定性保障

需要制定容災(zāi)回滾策略均抽,才可以部署生產(chǎn)環(huán)境嫁赏,流程如下:

image-20231121155109745.png

具體細(xì)節(jié):

流量切回舊容器:生產(chǎn)環(huán)境除了p5走ap以外,p1-p4域名都是走的Nginx到忽,需要Nginx配置回滾橄教。上線前要明確回滾操作,找到對(duì)應(yīng)接口人輔助喘漏,切忌盲目上線無法回滾护蝶。

三、總結(jié)

  • 遷移之前想清楚為什么要遷移翩迈,遷移的計(jì)劃要列出來持灰,制定里程碑

  • 遷移中每一步都要做好planB,避免系統(tǒng)損失负饲。盡可能在每一步操作前都可以通過一些特定的方法進(jìn)行線下驗(yàn)證再切換到線上堤魁,把控風(fēng)險(xiǎn)。

  • 遷移后要oncall進(jìn)行觀察功能

做好這三點(diǎn)返十,系統(tǒng)遷移基本上可以穩(wěn)定進(jìn)行妥泉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市洞坑,隨后出現(xiàn)的幾起案子盲链,更是在濱河造成了極大的恐慌,老刑警劉巖迟杂,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刽沾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡排拷,警方通過查閱死者的電腦和手機(jī)侧漓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來监氢,“玉大人布蔗,你說我怎么就攤上這事∶Σぃ” “怎么了何鸡?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長牛欢。 經(jīng)常有香客問我骡男,道長,這世上最難降的妖魔是什么傍睹? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任隔盛,我火速辦了婚禮,結(jié)果婚禮上拾稳,老公的妹妹穿的比我還像新娘吮炕。我一直安慰自己,他們只是感情好访得,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布龙亲。 她就那樣靜靜地躺著陕凹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鳄炉。 梳的紋絲不亂的頭發(fā)上杜耙,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音拂盯,去河邊找鬼佑女。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谈竿,可吹牛的內(nèi)容都是我干的团驱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼空凸,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼嚎花!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起呀洲,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤贩幻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后两嘴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丛楚,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年憔辫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了趣些。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贰您,死狀恐怖坏平,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锦亦,我是刑警寧澤舶替,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布止毕,位于F島的核電站氛堕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏猪狈。R本人自食惡果不足惜抛蚁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一陈醒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瞧甩,春花似錦钉跷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽彬坏。三九已至,卻和暖如春膝晾,著一層夾襖步出監(jiān)牢的瞬間苍鲜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工玷犹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洒疚。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓歹颓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親油湖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子巍扛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容