Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

導讀持續交付 2.0 - 談當代軟體交付之虛實融合

導讀持續交付 2.0 - 談當代軟體交付之虛實融合

新竹敏捷社群 Meetup

Date: 2019/04/27
Title: 導讀持續交付 2.0 - 談當代軟體交付之虛實融合
Location: 交大工程三館

Blog: https://rickhw.github.io/2019/04/27/DevOps/Introduce-to-Continuous-Delivery-2/
Youtube Playlist: https://www.youtube.com/playlist?list=PL63J1r2PBvohTyGQ7pqAwVEogospMOJ5v

Avatar for Rick Hwang

Rick Hwang

April 27, 2019
Tweet

More Decks by Rick Hwang

Other Decks in Education

Transcript

  1. 3 Rick Hwang https://www.gtcafe.com • Sr. Manager @ 91APP •

    經營管理 • Cloud / AWS / GCP • DevOps / SRE • Distributed Systems • 音樂 吉他 鍵盤 編曲 • 哲學 科幻 金庸 喇賽
  2. 5

  3. 17

  4. 28

  5. • 團隊 ◦ 溝通成本 ◦ 訊息一致性 • 文化 ◦ 信任

    ◦ 開放 ◦ 價值 • 目的:共識與一致性 • 問題:協作效率 組織問題 29 協作效率
  6. 30

  7. • 市場是 VUCA ◦ Volatility(易變性) ◦ Uncertainty(不確定性) ◦ Complexity(複雜性) ◦

    Ambiguity(模糊性) • 客戶要的是什麼? ◦ 客戶要的更多了 ◦ 市場變化更快了 ◦ 產品解決客戶什麼問題? • 問題:混屯的需求與市場 • 目標:成事 • 目的:價值 業務問題 32 價值
  8. 協作、共識 技術管理 複 雜 度 (康 威 定 律 )

    x y z Business (Products) Teams (Organization) Engineering (Architecture) https://rickhw.github.io/2019/03/17/Management/Perspective-in-XYZT/ 人 事 物
  9. 44

  10. 48

  11. 軟體交付的概念 49 • 任何人都可以部署任意版本,到特定環境 ◦ 任何人:開發、測試、支援、維運、業務、老闆、老闆的老闆、掃地的 ◦ 可以部署:be able to

    -- one button ◦ 任意版本:Artifacts、Configure ◦ 特定環境:Production、Sandbox • 部署流水線 (Pipeline) 也要被測試、優化、監控、維護 (Ops Pipeline) ◦ 部署程式也是程式,要可以在 Local 開發、測試 ◦ Pipeline: Build, Provisioning, Deployment, AutoTasks (Test, Backup …)
  12. 50

  13. 53

  14. 第4章 持續交付2.0的組織文化 第5章 持續交付的軟件系統架構 第6章 業務需求協作管理 第7章 部署流水線原則與工具設計 第8章 利於集成的分支策略

    第9章 持續集成 第10章 自動化測試策略與方法 第11章 軟件配置管理 第12章 低風險發布 第13章 監測與決策 附錄A 軟件工程的三次進化 附錄B 排序法做相對估算 七巧板三大主要板塊 的工作原則與實踐 價值探索環 快速驗證環 概述持續交付 2.0 實戰案例分析 I II III (1)堅持少做 (2)持續分解工作 (3)堅持快 回饋 (4)持續改善並衡量 第1章 持續交付2.0 第2章 價值探索環 第3章 快 驗證環 第14章 大型互聯網團隊的FT化 第15章 小團隊逆襲之旅 第16章 研發推動的DevOps 核心工作原则
  15. 個 人 想 法 與 見 解 68 現實 理想

    我們想的 客戶要的 問題是什麼? 所有的功能 有在用的功能
  16. 75

  17. 第4章 持續交付2.0的組織文化 第5章 持續交付的軟件系統架構 第6章 業務需求協作管理 第7章 部署流水線原則與工具設計 第8章 利於集成的分支策略

    第9章 持續集成 第10章 自動化測試策略與方法 第11章 軟件配置管理 第12章 低風險發布 第13章 監測與決策 附錄A 軟件工程的三次進化 附錄B 排序法做相對估算 I II III (1)堅持少做 (2)持續分解工作 (3)堅持快 回饋 (4)持續改善並衡量 第1章 持續交付2.0 第2章 價值探索環 第3章 快 驗證環 第14章 大型互聯網團隊的FT化 第15章 小團隊逆襲之旅 第16章 研發推動的DevOps 核心工作原则
  18. 塑 文化四步法 81 第一步: 定義我們想要做的事 第二步: 定義我們期望的做事方式或方法 第三步: 提供相應的培訓,使員工具備完成其工作的能力 第四步:

    設計一些必要的機制或措施來強化我們所鼓勵的那些行為 -- 讓員工成功掌握自己工作的方法,進而改變企業文化。 《 精益企業 》 - Page 48, From : Jez Humble & Joanne Molesky
  19. 83

  20. 架構要求 • design for test • design for deployment •

    design for monitor • design for scale • design for faliure 85
  21. 常見架構模式 - Microcore Architecture • 又稱 Plugin Architecture • Eclipse、VSCode、Firefox、Chrome、

    Mobile App • 優點: ◦ 良好的延展性 (Extensibility) ◦ 容易發布 ◦ 容易測試,隔離性佳 ◦ 可以漸進式開發、逐步增加功能 • 缺點: ◦ 擴展性差 (Scability),不適合分散式系統 ◦ 開發難度高 ◦ 高度依賴框架 87
  22. 常見架構模式 - Monolithic Architecture • 獨立完整的體系 • 優點: ◦ 利於開發與整合測試

    ◦ 架構簡單 ◦ 部署簡單 ◦ 容易擴展 • 缺點: ◦ 對整體要熟悉,否則容易 污染整個應用 ◦ 很難與新技術共存 ◦ 只能維持整體的擴展 ◦ 持續部署很困難 88
  23. 常見架構模式 - Microservices Architecture • 單一應用劃分成的小服務,透過彼 此的協作、通訊等機制,達到整體運 作 • 優點:

    ◦ 擴展性佳,服務之間低耦合、高 內聚 ◦ 容易部署、開發 ◦ 容易單獨驗證 • 缺點: ◦ 原子性操作變得複雜 (2PC) ◦ 網路通訊消耗大 ◦ 服務複雜,除錯不易 ◦ 測試時需要部署多個服務 ◦ 共用函式庫管理問題 89
  24. 如何改 既有的架構 90 模式 優點 缺點 案例 拆遷者模式 與舊版沒有瓜葛 沒有歷史包袱

    可以依照預期進行架構設計 業務需求遺漏 市場環境變化 人力資源消耗大 閉門 車 成功:HP 雷射印表機韌體架構改 ,耗時 3 年 失敗:Netscape 改 企業軟體, 被微軟 IE 趕上 絞殺者模式 不會遺漏原有需求 可穩定地提供價值 避免閉門 車 改 時間的跨度大 產生一定的迭代成本 修繕者模式 系統外部無感知 不會遺漏原有需求 可以隨時停下來改 避免閉門 車 改 時間的跨度大 會有更多額外迭代成 本
  25. 個 人 想 法 與 見 解 工程 vs 組織

    Microservices create organizational problems? or Organization creates microservices architecture? 93
  26. 95 架構與團隊 Storage Web API Database Internal GW External LB

    Whatever Service 架構 Backend APP QA SRE PO / PM Mission Impossible Team 團隊 Manager 個 人 想 法 與 見 解 • 演講:從緊急事件 談 SRE 應變能力的培養 • 事件管理與康威定律
  27. 96 End User Private Public Protected ACL 架構與團隊 BlackForest SwordBearer

    ShelterEra Internal Users Production (SaaS) ThreeBody ChaoticEra Gravity Naming: 三體中英文對照表 Dweller 個 人 想 法 與 見 解
  28. 97

  29. 個 人 想 法 與 見 解 99 Source Build

    Artifact Repository Programmers Continuous Integration Continuous Deployment Production QA R&D Deploy WebAPI v2.1.0 WebAPI v2.1.0 Test: Function, Regression, Performance Go Production Build, Pack Code Quality, Unit Test Source WebAPI 20190323_v2.1.0 CI / CD 的全貌 Config Infrastructure Provisioning Source: 聊聊軟體交付的濫觴 談產出物管理 (Artifacts Management)
  30. 個 人 想 法 與 見 解 100 Source Build

    Artifact Repository Programmers CH09 Continuous Integration Continuous Deployment Production QA R&D Deploy WebAPI v2.1.0 WebAPI v2.1.0 CH10 Test: Function, Regression, Performance CH12 Go Production Build, Pack Code Quality, Unit Test Source WebAPI 20190323_v2.1.0 CI / CD 的全貌 Config Infrastructure Provisioning CH08 分支策略 CH11 軟體配置管理 CH07 部署流水線的原則與工具設計 CH11 軟體配置管理 CH13 監測與決策 Source: 聊聊軟體交付的濫觴 談產出物管理 (Artifacts Management)
  31. 第八章 利於整合的分支策略 • 主幹開發、主幹發布 (Trunk-Based Development & Release) • 主幹開發、分支發布

    (Trunk-Based Development & Branch-based Release) • 分支開發、主幹發布 (Branch-Based Development * Trunk-based Release) 101
  32. 分支策略 102 策略 特性 案例 主幹開發 主幹發佈 管理簡單(沒有分支管理) 低頻率交付衝突問題多 主幹開發

    分支發佈 (TBD) 主幹提交活動頻繁,有淺在風險 分支只修復缺陷 主幹有問題,分支也要合併 (合併 Alive 的版本) 需要 Feature Toggle Google、Facebook 分支開發 主幹發佈 從主幹拉分支 發佈的分支要合併回主幹 在主幹修復問題,太久會很容易衝突 團隊可以自由開分支 Open Source Git Flow
  33. Trunk-Based Development (TBD) • Feature Toggle • 分支只修復缺陷,不加新 功能 •

    新版本發佈有問題,分支 也要修復 103 https://paulhammant.com/2013/04/05/what-is-trunk-based-development/
  34. 我的選擇:主幹開發、分支發布 104 個 人 想 法 與 見 解 •

    考慮:以終為始,交付的產出物 (Artifact) 只有一個,例如: ◦ 新版本:2.0.0 -- 開發 ◦ 舊版本:1.9.0 -- 維運 • 開發: ◦ 每次的 commit 都 build 得過 ◦ 功能透過 Feature Toggle 控制 • 測試: ◦ 部署是同一個 • 交付流水線:單一化 • 挑戰: ◦ 開發人員必須有良好的 Config 設計與 DI / IoC 概念 ◦ 架構的耦合性要低
  35. 106

  36. 第4章 持續交付2.0的組織文化 第5章 持續交付的軟件系統架構 第6章 業務需求協作管理 第7章 部署流水線原則與工具設計 第8章 利於集成的分支策略

    第9章 持續集成 第10章 自動化測試策略與方法 第11章 軟件配置管理 第12章 低風險發布 第13章 監測與決策 附錄A 軟件工程的三次進化 附錄B 排序法做相對估算 I II III (1)堅持少做 (2)持續分解工作 (3)堅持快 回饋 (4)持續改善並衡量 第1章 持續交付2.0 第2章 價值探索環 第3章 快 驗證環 第14章 大型互聯網團隊的FT化 第15章 小團隊逆襲之旅 第16章 研發推動的DevOps 核心工作原则
  37. 改進步驟 1. 成立內部變革小組 2. 改產品線的負責人掛帥,成員包含外部顧問、核心管理層 3. 評估現狀,定義目標 4. 成立變革小組後,評估面臨問題 a.

    定義改進目標:激發整體活力,提升 產品研發效率 b. 目標:每個月準時發布一個高質量的全網版本,沒有延期 5. 識別具體問題,制定短期目標 6. 制定解決方案,並實施 7. 再實施過程中,根據真實反饋,不斷優化直到實現短期目標 8. 返回 (3) 持續進行,直到完成最初目標 109
  38. 改 前: • 線上環境出現問題時,各職能角色的抱怨 理由都很充分 ◦ 運維人員:上前前沒通知,沒文檔 ◦ 專案經理:這個問題是測試沒測導致 ◦

    測試人員:太晚拿到測試包,時間被壓縮 ◦ 開發人員:需求變更太快,重複開發工作太 多 ◦ 產品:需求早就提了,設計人員不足,太晚出 設計文件 ◦ …. 二、組織再 113 改 後: • Feature Team:源自於敏捷開發,由各種職 能角色組成,負責 E2E 交付,有明確業務 目標,是一個 mini-business unit • 負責業務價值的交付 • 目標:接下來的六個月,用 戶活躍數增加 40%
  39. 改進步驟 1. 成立內部變革小組 2. 改產品線的負責人掛帥,成員包含外部顧問、核心管理層 3. 評估現狀,定義目標 4. 成立變革小組後,評估面臨問題 a.

    定義改進目標:激發整體活力,提升 產品研發效率 b. 目標:每個月準時發布一個高質量的全網版本,沒有延期 5. 識別具體問題,制定短期目標 6. 制定解決方案,並實施 7. 再實施過程中,根據真實反饋,不斷優化直到實現短期目標 8. 返回 (3) 持續進行,直到完成最初目標 116
  40. 118

  41. Working Backwards 123 1. Start by writing the Press Release:

    先寫 Release 新聞稿 2. Write a Frequently Asked Questions document: 寫 FAQ 文件 3. Define the customer experience: 定義客戶體驗 4. Write the User Manual: 寫使用手冊 AWS CTO Werner Vogels: Working Backwards
  42. 125

  43. Arch Business 開 (ㄕㄠ) 源 (ㄑㄧㄢˊ) 節 (ㄔㄥˊ) 流 (ㄅㄣˇ)

    128 Dev Ops 狹義的 DevOps - 開發團隊 (大部分) Product Team Backend Frondend App DevOps SRE DBA Infra HD AE QA
  44. 組織角度的 DevOps (廣義) 129 • 產品開發團隊 (Dev):產品 + 開發 +

    測試 • 企業營運團隊 (Ops):行銷 + 業務 + 維運 + IT + 人資 + 財務 + 法務 ….
  45. Arch Business 開 (ㄕㄠ) 源 (ㄑㄧㄢˊ) 節 (ㄔㄥˊ) 流 (ㄅㄣˇ)

    130 Dev Ops 廣義的 DevOps - 整個企業 CEO CTO COO CxO Engineering Backend Frondend App QA HR MIS Product Finance Legal VP Product Engineering Architect BD SD MKT BizOps SysOps SRE Infra Security
  46. Arch Business Functional Feature 開 (ㄕㄠ) 源 (ㄑㄧㄢˊ) 節 (ㄔㄥˊ)

    流 (ㄅㄣˇ) Func A Func B Service B Service A Service D Service C Func C CM AM Infrastructure 133 Product A Product B Product D Product C Product E 找到你的位置、找到你的價 值
  47. 139 人 (組織) 物 (工程) 事 (業務) 科學、技術 架構、數據 文化、信任

    連結、希望 需求、商業 未來、方向 軟體交付的三體問題
  48. 第4章 持續交付2.0的組織文化 第5章 持續交付的軟件系統架構 第6章 業務需求協作管理 第7章 部署流水線原則與工具設計 第8章 利於集成的分支策略

    第9章 持續集成 第10章 自動化測試策略與方法 第11章 軟件配置管理 第12章 低風險發布 第13章 監測與決策 實 虛 虛實融合 I II III 第1章 持續交付2.0 第2章 價值探索環 第3章 快 驗證環 第14章 大型互聯網團隊的FT化 第15章 小團隊逆襲之旅 第16章 研發推動的DevOps
  49. 144

  50. 147 人 (組織) 物 (工程) 事 (業務) 科學、技術 架構、數據 文化、信任

    連結、希望 需求、商業 未來、方向 軟體交付的三體問題
  51. 協作、共識 技術管理 複 雜 度 (康 威 定 律 )

    x y z Business (Products) Teams (Organization) Engineering (Architecture) https://rickhw.github.io 人 事 物
  52. 個 人 想 法 與 見 解 150 Source Build

    Artifact Repository Programmers CH09 Continuous Integration Continuous Deployment Production QA R&D Deploy WebAPI v2.1.0 WebAPI v2.1.0 CH10 Test: Function, Regression, Performance CH12 Go Production Build, Pack Code Quality, Unit Test Source WebAPI 20190323_v2.1.0 CI / CD 的全貌 Config Infrastructure Provisioning CH08 分支策略 CH11 軟體配置管理 CH07 部署流水線的原則與工具設計 CH11 軟體配置管理 CH13 監測與決策
  53. 一個人的持續成長:Working Backwards 151 1. Start by writing the Press Release:

    先寫 Release 新聞稿 2. Write a Frequently Asked Questions document: 寫 FAQ 文件 3. Define the customer experience: 定義客戶體驗 4. Write the User Manual: 寫使用手冊 AWS CTO Werner Vogels: Working Backwards
  54. Arch Business 開 (ㄕㄠ) 源 (ㄑㄧㄢˊ) 節 (ㄔㄥˊ) 流 (ㄅㄣˇ)

    153 Dev Ops 狹義的 DevOps - 開發團隊 (大部分) Product Team Backend Frondend App DevOps SRE DBA Infra HD AE QA
  55. Arch Business 開 (ㄕㄠ) 源 (ㄑㄧㄢˊ) 節 (ㄔㄥˊ) 流 (ㄅㄣˇ)

    154 Dev Ops 廣義的 DevOps - 整個企業 CEO CTO COO CxO Engineering Backend Frondend App QA HR MIS Product Finance Legal VP Product Engineering Architect BD SD MKT BizOps SysOps SRE Infra Security
  56. Arch Business Functional Feature 開 (ㄕㄠ) 源 (ㄑㄧㄢˊ) 節 (ㄔㄥˊ)

    流 (ㄅㄣˇ) Func A Func B Service B Service A Service D Service C Func C CM AM Infrastructure 155 Product A Product B Product D Product C Product E
  57. 156

  58. 157