年久失修的大廠系統(tǒng)如何做遷移?
話題背景
在企業(yè)IT基礎(chǔ)設(shè)施中,一些系統(tǒng)可能因長時間運行而未能及時更新和維護(hù),導(dǎo)致它們逐漸變得過時且不再可靠。這些年久失修的系統(tǒng)可能存在以下問題:硬件老化、軟件過時、安全性漏洞頻發(fā)、性能瓶頸以及不支持新的業(yè)務(wù)需求。這些問題很有影響日常運營效率。
那么有同事提出了該疑問:我們正計劃對一款運營系統(tǒng)進(jìn)行收攏和下線處理。然而,由于該系統(tǒng)已經(jīng)長時間未進(jìn)行維護(hù),加之團(tuán)隊成員的頻繁變動,導(dǎo)致許多功能的具體用途和背后的設(shè)計邏輯已經(jīng)變得模糊不清。為了確保下線過程的順利進(jìn)行并最大程度地減少潛在風(fēng)險,我們應(yīng)該采取什么措施來重新梳理和了解這款系統(tǒng)的各個方面呢?
那今天就讓我們來一起聊聊“年久失修的系統(tǒng)到底該如何做遷移?”
鵝廠工程師的看法
一、
\ dol-數(shù)據(jù)挖掘工程師 /
既然是要收攏下調(diào)的運營系統(tǒng),應(yīng)該主要功能都有替代平臺了。
以我個人收攏/升級改造 N個老運營系統(tǒng)的經(jīng)驗,可以從以下幾個方面著手:
1. 收入口:主要有下面兩類
- 運營平臺頁面:可以通過頁面訪問流水(web服務(wù)器日志之類)搜集目前的用戶,可以聯(lián)系用戶提示要關(guān)站。如頁面流水定位不到用戶,可以把入口頁面(一般是登錄頁)替換成告示頁,頁面加上oa登錄拉取用戶(自己弄個html頁面加個api通過太湖獲取下用戶,不麻煩),提示平臺要遷移做好指示,同時保留一個到當(dāng)前平臺的跳轉(zhuǎn)鏈接,這樣搜集一段時間訪客。后續(xù)關(guān)站之前也可以用這個告示頁提示已關(guān)站。
- 對外的api:可以查api的監(jiān)控上報,這個一般不包含人,但是可以追查上游主調(diào)ip,在通過ip找服務(wù)負(fù)責(zé)人確定api的用途和范圍,是否可以下線以及替代功能api。如果沒有監(jiān)控上報,只能tcpdump轉(zhuǎn)包捕獲api調(diào)用排查調(diào)用來源ip和大致內(nèi)容。
2. 查出口:主要有
- 調(diào)外部api:絕大多數(shù)api調(diào)用是為了當(dāng)前平臺為了完成自己功能,伴隨用戶訪問的產(chǎn)生的,隨著當(dāng)前平臺入口被攔住,這些調(diào)用會消失。需要留意平臺有無類似cron任務(wù),通過調(diào)用外部api給其他平臺同步數(shù)據(jù)/狀態(tài),不過這類同步的狀態(tài)/數(shù)據(jù)實際隨著當(dāng)前平臺沒有了訪問量,一般也就沒用了,不用太關(guān)心。
- 數(shù)據(jù)庫被外部系統(tǒng)依賴:這種比較麻煩,只能看配置文件找用到的數(shù)據(jù)庫,再聯(lián)系paas平臺找除當(dāng)前平臺以外的使用方。如果數(shù)據(jù)庫連接信息hard coding到服務(wù)里面,只能是抓包大法了,相對來說抓包和分析也更麻煩。
流程上可以分為以下幾個步驟:
- 先做收入口,沒有用戶訪問/api調(diào)用了就關(guān)站(關(guān)閉頁面/api入口,不下線服務(wù),可以通過設(shè)置iptable或者其他服務(wù)器層面的操作)。
- 關(guān)站狀態(tài)保持一段時間(1個月),等待可能的用戶投訴,溝通解決這些遺漏點,提供替代功能。以及可能第三方系統(tǒng)依賴當(dāng)前系統(tǒng)的api或者數(shù)據(jù)庫 投訴沒有(新)數(shù)據(jù)了之類的問題。如果只是想收攏運營平臺,可以暫時不下線依賴的數(shù)據(jù)庫。
- 以上問題都木有了,備份代碼,服務(wù)程序和資源徹底停服。以上的流程可能會有反復(fù),例如關(guān)站了發(fā)現(xiàn)有功能,有不少用戶暫時沒有替代,又要打開。不建議上來就看平臺代碼,運營平臺的特點是邏輯零散,依賴復(fù)雜,歷史包袱重,從代碼梳理ROI太低。
二、
\ johnson-研發(fā)工程師 /
- 拔掉網(wǎng)線
- 看誰會找上門
若:
- 沒人來找,宣布下線完成
- 有人來找,插上網(wǎng)線...
找日志或者監(jiān)控信息,看進(jìn)站出站流量,搜集頁面訪問和后臺調(diào)用情況;沒有的話,考慮在前后端配置一些監(jiān)控來采集信息,然后監(jiān)測之;找到DB,捋一遍數(shù)據(jù)的最后更新日期,事務(wù)日志等信息,幫助對訪問情況做一個大致的估計;通過前序獲得的信息,找到用戶群體,搞清楚系統(tǒng)的功能,判斷是否能下線,討論下線后的后續(xù)接續(xù)方案等等....
三、
\ xavier-開發(fā)工程師 /
如果是針對收攏下線舊系統(tǒng)遷移用戶到新系統(tǒng)的場景,個人建議可以嘗試以下幾個步驟:
1. 信息收集
- 收集現(xiàn)有系統(tǒng)的相關(guān)文檔,如開發(fā)文檔、tapd需求、用戶手冊等,盡可能理解舊系統(tǒng)的需求場景。
- 系統(tǒng)日志收集分析,對舊系統(tǒng)做一些日志埋點,識別系統(tǒng)的高頻功能操作場景及用戶信息。
2. 策略及實施
- 優(yōu)先級排序,根據(jù)業(yè)務(wù)功能重要性,為各個功能模塊設(shè)置下線優(yōu)先級、時間表和里程碑。
- 信息溝通,根據(jù)前期收集的用戶信息,建立支持渠道,及時通知目標(biāo)用戶舊系統(tǒng)下線時間節(jié)點及平替遷移方案,后續(xù)也可即時響應(yīng)用戶下線過程中遇到的各種問題。
- 風(fēng)險管理,識別下線過程可能存在的風(fēng)險點,并制定相應(yīng)的應(yīng)對措施。
注意事項:
- 在整個過程中要保持與關(guān)鍵利益相關(guān)者(核心目標(biāo)用戶)的溝通渠道,確保項目的順利進(jìn)行。
- 考慮到用戶可能的遷移成本,下線的過程可能存在反復(fù),要有相應(yīng)的措施預(yù)案,耐心協(xié)助用戶順利完成遷移。
四、
\ esword-架構(gòu)工程師 /
- 透視出系統(tǒng)頁面/API與調(diào)用用戶的關(guān)系,重新管理用戶組
- 重新開發(fā)一套系統(tǒng)和接口,灰度關(guān)閉舊接口
五、
\ sai-開發(fā)工程師 /
1. 快速了解系統(tǒng)功能:找到訪問來源和核心功能分布
從系統(tǒng)的訪問來源上看,一般可以分為兩類:后臺API調(diào)用、WEB頁面訪問
(1) 通過日志分析平臺,找到最近3個月的核心API+訪問IP
- 根據(jù)API訪問排行,著重從訪問量大的接口開始,做為核心API
- 訪問IP是為了找到訪問方,便于下面的統(tǒng)一拉群通知
- 如果現(xiàn)狀沒有接入日志分析平臺,可以先從后端增加一些簡單的日志:API名稱、訪問IP、輸出輸出日志
(2) 拆分系統(tǒng)功能類型:從任務(wù)流的設(shè)計上看,系統(tǒng)任務(wù)分為兩大類:同步任務(wù),異步任務(wù)。
- 同步任務(wù):一個任務(wù)接口內(nèi),直接獲取到執(zhí)行結(jié)果
- 異步任務(wù):創(chuàng)建任務(wù)、監(jiān)控任務(wù)執(zhí)行結(jié)果
2. 進(jìn)一步了解功能:通過繪制流程圖、DB日志、代碼日志加深系統(tǒng)理解
(1) 用流程圖梳理:核心API內(nèi)的大致訪問關(guān)系鏈,加深對系統(tǒng)鏈路的理解
(2) 通過DB的訪問日志,可以找到使用的表,通過表結(jié)構(gòu)和數(shù)據(jù)內(nèi)容進(jìn)一步了解系統(tǒng)功能
如果是云數(shù)據(jù)庫,以騰訊云數(shù)據(jù)庫為例,可以在控制臺導(dǎo)出后端鏈接數(shù)據(jù)庫的日志(增刪改查日志)
(3) 在核心API內(nèi),增加詳細(xì)日志
- 當(dāng)前系統(tǒng)訪問其他外部API打印日志
- 定要打印輸入輸出日志,切換一旦遇到異常,可以快速比對處理
- 核心API內(nèi)不,補充更多詳細(xì)日志,加深對系統(tǒng)功能理解
(4) 在進(jìn)一步了解系統(tǒng)功能過程中,整理輸出相關(guān)文檔,準(zhǔn)備下線
3. 切換訪問來源,平滑下線
(1) 下線前
- API用戶:根據(jù)IP在公司的服務(wù)器管理平臺上找到服務(wù)器負(fù)責(zé)人,拉群通知
- WEB用戶:強制彈窗提示公告,當(dāng)天用戶使用的時候,需要點擊確認(rèn)知曉
(2) 下線中
- 整理替換指引,給到用戶做參考。
比如:api替換指引,WEB頁面替換指引
- 統(tǒng)計當(dāng)天訪問量,標(biāo)記下線切換完成
整理輸出訪問的在線表格,逐步跟進(jìn)切換下線結(jié)果
六、
\ keson-生態(tài)技術(shù)工程師 /
可以先本地升級下,更新下系統(tǒng)內(nèi)核和驅(qū)動lib庫等,然后再通過遷移工具進(jìn)行在線遷移升級