Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
DevOpsDays Taipei 2023 實踐 BizDevOps 在 Legacy System 中 的挑戰與策略 James Wang 大規模系統架構遷移計畫 0
Slide 2
Slide 2 text
關於我 大家好,我是 James Wang,一位熱衷於 探索新知並樂於分享的軟體工程師。同 時,我也擔任台灣領域驅動設計社群的 核心志工。 1
Slide 3
Slide 3 text
2 WARNING 本次分享過往我維護 Legacy System(遺留系統, 或稱為祖產) 的經驗談。 然而我的經驗建立在我當時面臨的問題與當下的 Context(場景、背景、上下文), 和各位不盡相同,內容恐無法直接套用到各位的環境。 本場著重在挑戰與策略,不會談論任何的技術細節,也不會講到工具實務細節。又 因本場定為通識等級之分享,故本次內容廣度優先,沒太深入探討。 如果與你期待的不同,可現在轉移至其他分享教室。 此聲明與設計參考了 Web Conf 2023 的「回顧與展望,從DevOps鑑古觀今知未來 v1.0 公開版 – 陳正瑋」簡報。 艦長參考了同場研討會的「單元測試不是有寫就好 – Kuma Syu」。
Slide 4
Slide 4 text
維護既有系統,曾經面臨過怎 麼問題與挑戰? 3
Slide 5
Slide 5 text
維護既有系統,曾經面臨過怎麼問題與挑戰? 4 整合新技術困難 安全性的挑戰 缺乏自動化測試 佈署過程複雜或容易出錯 資源浪費或低效的資料存取 訓練新員工的成本和時間 改不完的 Bugs 不了解當初設計緣由
Slide 6
Slide 6 text
5 歸納問題: 三大挑戰 無法 看見全貌 缺乏 持續更新維護 組織文化與資源 和知識的限制 安全性的挑戰 難以擴展或適應新的業務需求 依賴既有的工作方式和流程 訓練新員工的成本和時間 富含冗於過時的程式碼 業務架構與技術架構不匹配 使用過時或不再支援的技術框架或平台 不了解當初設計緣由
Slide 7
Slide 7 text
6 三大挑戰: 無法看見全貌 無法 看見全貌 缺乏 持續更新維護 組織文化與資源 和知識的限制 當團隊無法瞭解整體架構、設計決策、或當初的業務需求,就可能導 致不一致的開發、重複的工作或是不合適的設計決策。 此外,當團隊成員只專注於他們負責的部分,可能會忽略整體的最佳 實踐或效率。
Slide 8
Slide 8 text
7 三大挑戰: 缺乏持續更新維護 無法 看見全貌 缺乏 持續更新維護 組織文化與資源 和知識的限制 當初基於當時的業務需求或業界趨勢考量,隨著時間的推移,技術快 速發展,舊的系統可能無法跟上當前的標準或最佳實踐。缺乏持續的 更新和維護會使這些系統在功能、效能和安全性上都落後。
Slide 9
Slide 9 text
8 三大挑戰: 組織文化與資源和知識的限制 無法 看見全貌 缺乏 持續更新維護 組織文化與資源 和知識的限制 組織的文化和資源配置對於遺留系統的維護和改進至關重要。如果組 織文化不重視技術更新或持續學習,則很難驅動系統的進步。同時, 如果缺乏適當的資源和專業知識,即使有意願,也難以進行有效的更 新。
Slide 10
Slide 10 text
Case Study: 美國的 Obamacare 網站 2013 年,美國的 Affordable Care Act(通常稱為 Obamacare)的官 方網站 Healthcare.gov 啟動時遭遇了多次故障和效能問題。部分原 因是該網站依賴多個不同的後端系統(許多是遺留系統),且這些系 統之間的整合存在問題。 事後,歐巴馬總統在一次採訪中提到,沒有人意識到網站異常帶來的 嚴重程度。 9 15% 27000 6% Source: Obamacare: President defends healthcare 'legacy' - BBC News
Slide 11
Slide 11 text
Case Study: 美國的 Obamacare 網站 2013 年,美國的 Affordable Care Act(通常稱為 Obamacare)的官 方網站 Healthcare.gov 啟動時遭遇了多次故障和效能問題。部分原 因是該網站依賴多個不同的後端系統(許多是遺留系統),且這些系 統之間的整合存在問題。 10 Source: Obamacare: President defends healthcare 'legacy' - BBC News 無法 看見全貌 缺乏 持續更新維護
Slide 12
Slide 12 text
策略規劃 了解問題後,思考大規模系統架構遷移計畫。 11
Slide 13
Slide 13 text
開始之前,先來談談如何規劃旅遊。 疫情剛過去,各國開始解封,我也很久沒出國了,想去日本大阪京都 5 日遊。 我希望是一場快樂放鬆的旅程,希望能悠閒的散步在各景點。開始規 劃日期、機票、飯店、伴手禮、觀光景點、和交通運輸方式,希望能 在這幾天愉快的遊玩。 雖然想法很多,然而手邊金額有限,遊玩日期也有限,導致只能捨棄 一些景點。 開始實際執行,購買機票與飯店,深入了解要吃什麼買什麼,確認護 照是否過期等。最終產出了規劃清單。 做好所有準備,收拾行李準備出遊啦。 12 執行行動方案 定義問題 遇見願景 潛在矛盾 策略行動 分析當前現況
Slide 14
Slide 14 text
定義問題: 我們現在遇到什麼問題? 整理團隊面臨的挑戰或困境。 • 我們正在解決哪些問題? • 是什麼人受到影響? • 我們期待問題解決後,成功是什麼樣子? • 有什麼限制住我們,有哪些約束條件? 團隊對於每個人提出的問題, 都要有共同一致的理解。 13 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 15
Slide 15 text
分析當前現況: 業務流程 關注業務流程與結構。目的是看見全貌。 14 參考資料:淺談 Domain Driven Design by James Wang - Speaker Deck 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 16
Slide 16 text
分析當前現況: 系統架構 15 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 17
Slide 17 text
分析當前現況: 指標 因為我們是 Legacy System,理論上應該會有現行系統運行監控的數 據,可供我們參考。 如果系統老舊沒有辦法做任何事情,那就往前端去觀察反向代理伺服 器上的 Log,或架設 Gateway 蒐集數據。 重點是,我們要收集什麼數據呢?以下指標供大家參考。 16 各功能錯誤率 各功能使用率 各功能回應時間 平均故障修復時間 平均故障間隔時間 訂單成交率 訂單處理時間 參考資料:淺談 EventStorming 和 Observability by 雷N 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 18
Slide 18 text
轉換架構與技術問題 17 技術 業務 外在驅動 (客戶) 內在驅動 (工程、業務) 存在某技術 債,可能導 致系統服務 停止。 因存在某技術債,在特定 條件下會引發此問題,導 致會讓服務中斷,將無法 達到承諾客戶的 SLA。 要配合數據(指標)呈現給主管唷~ Source: SRE 實踐與開發平台指南:從團隊協作、原則、架構和趨勢掌握全局,做出精準決策 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 19
Slide 19 text
轉換架構與技術問題 18 技術 業務 外在驅動 (客戶) 內在驅動 (工程、業務) 存在某技術 債,可能導 致系統服務 停止。 因存在某技術債,在特定 條件下會引發此問題,導 致會讓服務中斷,將無法 達到承諾客戶的 SLA。 要配合數據呈現給主管唷~ Source: SRE 實踐與開發平台指南:從團隊協作、原則、架構和趨勢掌握全局,做出精準決策 核心關鍵: ROI(Return On Investment, 投資回報率) vs. COI(Cost Of Inaction, 不採取行動的代價) 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 20
Slide 20 text
探索未來狀態: 將業務流程內聚分群 收斂識別出服務邊界 19 參考資料:DDD 中的橋樑:透過有效建模與設計從戰略走向戰術 by James Wang - Speaker Deck 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 21
Slide 21 text
探索未來狀態: 將每個服務邊界與業務流程串接 看見未來全貌 20 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 22
Slide 22 text
探索未來狀態: 讓業務架構與系統架構保持一致 21 After Before 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 23
Slide 23 text
探索未來狀態: 讓業務架構與系統架構保持一致 22 稽核日誌紀錄與合規服務 數據分析服務 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 24
Slide 24 text
結合現狀與未來的視覺化方式 透過業務流程,進而劃分服務邊界,識別出價值流程(Value Stream)。 下一步,進入潛在矛盾。 23 (現況) (未來) 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 25
Slide 25 text
潛在矛盾: 到底是什麼東西阻礙我們前進 團隊技術能力不足?沒時間還債?如何確保遷移過程系統穩定?QA 要如何測試?… 將大家的擔憂與負面思考展現出來,這些都是思考方案時的限制,或 思考解決方案時要解決的問題。 此環節相當困難,若沒有安全環境,沒有人敢說實話。 然而身為資深工程師或主管,深入了解團隊與利害關係人的擔憂,並 想辦法解決問題。 24 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 26
Slide 26 text
策略規劃: 重構 vs. 重寫 選擇方案: • 日落 • 維護 • 提取和重塑 • 直接遷移 • 全面現代化(重寫) • … 25 Source: Modernization Strategy Selector. | by Nick Tune | Strategy, Architecture, Continuous Delivery, and DDD 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案 本次分享將以遷移為範例
Slide 27
Slide 27 text
策略規劃: 遷移計畫-絞殺者(Strangler)模式 26 Router Router Router Legacy Legacy Modern Modern Time TRANSFORM CO-EXIST ELIMINATE 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 28
Slide 28 text
策略行動: 如何確保絞殺過程功能穩定? 針對我們接下來要絞殺的功能,討論驗收標準,撰寫驗收測試。 透過手動或自動方式,於絞殺重構過程中,持續不斷的確認每一個環 節,功能是否還是正常? 撰寫新程式時,拆解驗收測試,撰寫單元測試。如果可以,你可以試 試看測試驅動開發(TDD)。 27 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 29
Slide 29 text
策略規劃: 遷移方案步驟-從現有 API 歸納收冗 以下只是可能作法,不是唯一。 28 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 30
Slide 30 text
策略規劃: 遷移方案步驟 29 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 31
Slide 31 text
策略規劃: 遷移方案步驟 30 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 32
Slide 32 text
策略規劃: 利用開關切換新舊服務 31 Source: Feature Toggle 應用常見問題 | Miles' Blog (mileschou.me) Source: Feature Toggles (aka Feature Flags) (martinfowler.com) 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 33
Slide 33 text
策略行動: 新的部份導入開發規範 32 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 34
Slide 34 text
策略行動: Architecture Decision Record (ADR) 架構決策記錄 (ADR) 是一個記錄重要架構決策及其情境和結果的檔案。 基本格式包含了標題(Title)、上下文(Context)、決策(Decision)、狀 態(Status)、與結果(Consequences)。 大家是否有發生過,為什麼前人要這樣設計?當初是有遇到什麼問題 或挑戰嘛?內心有千百種問號。然而,系統沒有 bug,運行正常。你 會調整架構設計嘛?是否會擔心害怕是不是有特殊原因所以才這樣設 計呢? 如果有以上問題,那就從今天起,開始紀錄吧。 33 Source: Documenting Architecture Decisions (cognitect.com) 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 35
Slide 35 text
策略行動: 專案架構設計 34 Source: 軟體架構淺談 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw) 軟體架構應與業務 架構保持一致,要 讓架構本身能突顯 出業務功能。 依據業務架構設計 軟體架構,有需要 時可以隨時拆分服 務,方便調整。 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 36
Slide 36 text
執行行動方案 • 從新架構需要的共用套件開始轉換,譬如資料庫連線套件。 • 如果不熟悉絞殺者模式,建議可以先從簡單的既有功能或新功能開 始轉換。 • 從痛點比較痛得地方改善,取得短期勝利。 • 從非功能性需求來看,最常被使用的功能從泥球中獨立出來,方便 自動擴展服務,提供更好的服務品質。 35 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 37
Slide 37 text
如何開始? 如果你們系統目前是泥球架構,唯一建議是,不要再往泥球中加新功 能了。在泥球中加入什麼東西,都還是泥球。 36 Source: Domain-Driven Design: Working with Legacy Projects | Pluralsight 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 38
Slide 38 text
如何開始? 如果你們系統目前是泥球架構,唯一建議是,不要再往泥球中加新功 能了。在泥球中加入什麼東西,都還是泥球。 37 Source: Domain-Driven Design: Working with Legacy Projects | Pluralsight 定義問題 分析當前狀況 遇見願景 潛在矛盾 策略行動 執行行動方案
Slide 39
Slide 39 text
總結 38
Slide 40
Slide 40 text
你或許不需要這麼複雜的流程 39 今天講的內容,都是針對複雜的領域為出發點的。 依據痛點調整使用的工具與手段,譬如不 清楚業務全貌,可以嘗試今天提到的現況 分析手法。
Slide 41
Slide 41 text
是團隊持續迭代的流程 40 不是一次就能完成的任務。 比較好的作法是,針對這次要衝刺的任務進行設計。
Slide 42
Slide 42 text
最後,給 PO/PM/主管 的一句話 41 身為 PO/PM/主管,你們要比團隊更在意技術債。 就像在倉庫中放入貨物,一開始空間很大,容易放入任何東西。 一直放東西進去,越放越多,會發現新的貨物越來越難擺放。 放東西的時間變長之外,尋找貨物的時間也越來越久。 同理,系統需要定期維護,避免違章建築,要適時打掃清潔。 不管是套件還是框架,該升級的時候要空出時間升級。 這樣,我們才能在每次交付過程中,不會因為遺留債務而影響了交付時程與品質。 Time Productivity Complexity
Slide 43
Slide 43 text
Thank you! 42