奇點云:SAFe框架下,我們對平臺軟件工程生產線做了4項改造

導讀:

客戶規模擴大,如何保證大數據軟件產品和服務質量始終如一?幾乎所有成長中的軟件廠商,尤其是需要通過私有化部署交付的廠商,都會面臨這個問題。正如《人月神話》中多次表明的,單純地增加人手、擴大團隊規模,并不能成功達成大型系統建設目標。

軟件的生產、交付和運維,如何從“手工作坊”走向“現代化工廠”?廠商又應當在什么時候改變對“高級工匠”的依賴,研究生產線如何改造?

本文作者牧然,奇點云資深技術專家,曾在多家大型互聯網公司負責DevOps、質量保障體系建設、效能和過程改進,主導完成奇點云的工程生產線改造。

2023年,奇點云產品研發團隊改造了面向交付的工程生產線

雖然投入了大量的時間精力,我們的最終結論是“磨刀不誤砍柴工”——成功提升了產品的發布版本質量和穩定性,提高了客戶環境部署、版本升級的效率,完善了客戶項目運維的響應流程,強化了主動發現風險的能力。

一、為什么要改造?

私有化部署的大數據平臺軟件,帶來M*N的挑戰

大數據平臺軟件體量大,通常是私有化部署的方式交付給客戶。奇點云的核心產品數據云平臺DataSimba也不例外。

有別于SaaS產品專注維護一套生產環境的一個發布版本,私有化部署的大型平臺軟件產品在交付和運維上面臨更復雜的挑戰:

對不同客戶的獨立環境(M),維護不同的產品發布版本(N),從數學上說,就會有M*N種維護場景。

當然,在客戶規模尚未出現井噴時,上述挑戰的影響還在可預見、可應對的范疇之內。

我們開始探索從“手工作坊”走向“現代化工廠”的路徑,根本上源于需求爆發:

- 2019是大家熟知的數據中臺元年,那時在全行業范圍內,建設數據中臺的企業都比較有限。

- 2021年前后,數據價值陸續得到驗證,數字化成為確定性選擇。DataSimba作為企業的數據基礎設施,新客戶數量激增,老客戶復購需求持續上漲。團隊面臨的交付、運維挑戰,相較往年也成倍上難度。

- 2022年,我們在收斂主售版本的基礎上,推出了長期維護版(即LTS版),一定程度上讓維護的范圍更集中。但團隊仍然需要投入大量精力,來應對“M*N”的交付和運維問題——除了日常維護,版本更新、漏洞修復等都需要準確無誤地更新到每個獨立的客戶環境中。

- 2023年,客戶對數據的使用不斷深入,數據系統成為核心的生產系統。除了軟件的功能,開始關注其Reliability(可靠性)、Availability(可用性)、Serviceability(可服務性),要求可靠、連續、穩定地產出數據業務結果。這就需要服務商提供“產品+服務+連續可靠的運行機制”做保障。

“RAS”是企業級軟件的金標準。這一年,我們從軟件、服務、管理等各個層面向“企業級”升級。毋庸置疑,企業級軟件在企業級客戶的交付和運維,也要達到企業級標準。而形成一條更優質高效的生產線,是規模化服務好客戶的前提。

二、改造面向交付的工程生產線

SAFe框架下,四項主要改造

回歸正題,企業級的私有化軟件產品交付,應滿足3個基本要求:

  1. 產品質量:軟件通過嚴格測試,包括功能測試、性能測試、安全測試等等,覆蓋所有的功能和邊界情況,確保軟件的穩定性、可靠性。
  2. 交付時間:要在嚴格的時間內完成交付。(也就是說,過去友商常見的花1個月甚至更久時間部署已成“過去時”。)
  3. 運維服務:要滿足SLA要求,服務水平和滿意度達標。

上述三個要求映射到工程生產線的“開發—交付—運維”,我們需要完成的是:

  1. 開發環節:將眾多分散的需求開發整合為整體發布,并對整體進行全面的自動化回歸測試以控制質量;
  2. 交付環節:建立標準化交付流程,并實現自動化部署升級。
  3. 運維環節:實現運維響應流程閉環,能主動發現問題。

在介紹具體改造實踐前,奇點云的產品研發有一個大前提:SAFe。

2021年至今,我們嚴格遵循SAFe(Scaled?Agile?Framework,大型敏捷軟件工程方法論)的迭代原則,保持產品研發和版本發布的穩定節奏,目前總計發布了32個R版。

Built in Quality(內建質量)是SAFe框架中的一個重要概念,要求團隊在工作的每個階段都要關注和進行質量實踐,而不是把質量留到最后的測試階段。

正如質量管理的先驅戴明博士(William Edwards Deming)所說,“檢驗不能提高質量,也不能保證質量。檢驗為時已晚,產品已有好壞之分。”“它(即質量)必須內置在其中。”在SAFe方法論中,有5個關鍵維度來衡量內建質量:流程(Flow)質量,架構與設計質量,代碼質量,系統質量,發布質量。

- 流程質量,我們通過持續優化開發流程,進行DevOps實踐,串聯從需求開發到產品交付的每個環節,并提高流程節點上的自動化率。自動化是我們始終關注并堅持的要求。

- 架構與設計質量,我們采用“三評審”:需求評審,架構與設計評審,測試用例評審。

- 代碼質量,運行嚴格的代碼審查機制,結合自動化測試工具與CI流程,堅持代碼的準入標準。

- 系統質量,我們通過全面的功能測試、性能測試、安全測試。同樣,自動化率仍然是金標準。

- 發布質量,結合近3年在客戶環境進行的數千次部署/升級經驗,我們設計和完善了部署/升級的SOP,確保新版本順利更新到客戶環境。

SAFe方法論統領下,我們控制內建質量,并在以下維度做了改造:

1、分支管理

代碼分支管理老生常談,但有效。在這次改造中,有兩個重點:

其一,研發過程中,當穩定分支(master)有合并,就觸發完整CI流程,執行所有MR(Merge

Request,分支合并請求)卡點,通過全面自動化測試后才能合并成功。

其二,維護階段,某一個客戶現場有特殊問題需要修復時,bugfix分支向release發起MR,生成的包給客戶修復問題。MR積累到一定數量后再統一合入穩定分支(master),避免未經全面測試的特殊修復給全局版本引入風險。

各分支說明

2、需求從開發到發布(CI)

我們建立了研發流水線,并設計了自動化測試,開發環節效率得到顯著提升:目標分支發布到目標環境的效率提高;目標分支合并后產生的包都經過了12000個自動化測試用例,研發、測試、運維基于此工作,不會發生基礎問題。

如圖所示:

1)研發在feature分支完成需求開發后,向目標分支(如master分支)發起MR,自動觸發CI流程,將包與鏡像推往對象存儲,可一鍵構建到開發環境。(測試及生產環境需要通過發布平臺執行。)

2)測試過程中feature分支代碼變更,會再次自動觸發CI流程,生成包和鏡像,按需一鍵發布到目標環境。

3)在觸發穩定分支(master)合并后,會再次觸發CI流程,生成正式包,用于發版。

4)bugfix分支向release發起MR,生成的包用于客戶環境問題修復。

3、MR卡點

如前文所述,在開發環節我們增設了MR卡點,來控制產品質量,預防分支合并錯誤等問題產生。

· 分支名卡點,防止拉錯分支或將錯誤分支合入的情況。

· 編譯卡點,針對因代碼沖突或其他原因,導致代碼合并后的打包失敗情況。這是開發環節的高頻問題。

· 單元測試卡點,用于提高測試質量。

· 漏洞掃描卡點,用于識別新增或變更代碼是否引入了新漏洞。

上述要求是開發環境的強制要求。

測試環境、預發環境除此之外,還額外要求:

· MR審核,由至少1位架構師進行人工審核;

· 通過全量接口和場景自動化測試用例卡點,目前我們要求通過全部(12000個)自動化測試用例,無失敗。

4、交付部署(CD)

交付環節,我們同樣通過自動化的方式提效。

· 自動化部署工具:支持“一鍵”部署;可以集中管理配置、自動渲染;集成日志系統,支持日志集中查詢;支持監控報警,分級報警,分級處理。我們之所以把日志和監控工具都集成到了部署工具中,是因為部署DataSimba并不只是簡單的安裝軟件,也需要保障其運行穩定。

· 自動化驗證工具:我們從12000條自動化測試用例中選取了3000條,用于客戶環境部署后的驗證,以確保部署后的產品可用性。測試過程耗時僅30分鐘。

三、軟件工程生產線的最后一步

沒有標準化運維,談什么企業級?

做到這里,工程生產線基本上改造完成了。

相比之前,團隊工作上的體感已經大不相同:再也沒有出現分支發布到目標環境失敗或功能不可用的問題;再也不會出現臨時緊急修復一個問題,而影響到了全部版本;也不再出現客戶環境部署完成后還有功能不可用的問題。

很多廠商會把部署完成視為交付的最后一步,鑰匙交給客戶萬事大吉。但像前文所說的,數字化進程越深入,客戶越要求可靠、連續、穩定地產出數據業務結果,這離不開持續、可靠的運維。

運維是一個“人力”比較重的過程,所以同樣會面臨需求爆發和質量管控的問題:一位運維工程師通常會負責多家企業客戶的運維,同一個客戶也會經歷不同運維工程師的運維。

對此,解法也是類似的——“運維標準化”,即同一個產品在不同客戶環境,有統一的運維方案。從監控告警到日志標準化,從應急操作手冊到巡檢工具,都通過統一的運維SOP和工具完成,來保障運維響應的規范、質量、效率和全面性。

具體而言,我們在運維階段設置了主被動干預:

· 監控告警:設置分層監控(集群監控、服務監控、業務監控),配合多渠道告警(電話、短信、IM、郵件等),確保系統運維工程師和數據運維工程師快速響應;

· 自動化巡檢:定期自動化巡檢生成報告,由運維專家分析報告并給出優化建議;

· On-call小組:我們更新了On-call的機制,工單分級響應,并設置了問題處理超時預警機制,確保服務水平和滿意度。

此外,對運維有深度需要的客戶,我們還上架了配套的高級運維服務:數據開發陪跑包,協助客戶團隊建立數據開發的CI/CD流程;VIP專屬運維服務包,由我們原廠的運維專家提供一對一服務,包括系統運維規劃、專屬運維實施等等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717518.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717518.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717518.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的植物病害檢測系統(Python+PySide6界面+訓練代碼)

摘要:開發高效的植物病害檢測系統對于提升農業生產效率和作物健康管理意義重大。本篇博客詳細闡述了如何運用深度學習技術構建一個植物病害檢測系統,并提供了完整的實現代碼。該系統基于先進的YOLOv8算法,對YOLOv7、YOLOv6、YOLOv5進行了性能…

考研數學——高數:微分方程

一、一階線性微分方程 兩種形式: 非齊次: 齊次: 推導過程 推導公式的過程一般由特殊到一般:所以先求解齊次方程的解 (然后對等式兩邊同時積分) 再來求非齊次方程的解,由…

【測開求職】2023秋招快手一面面經

已經過了百度測開三面,快手這個一面比百度的要難很多,可能也是遇到了比較嚴格的面試官,感覺其他面經沒有這么難。30分鐘實習,20分鐘算法題,20分鐘八股,沒有問項目。 實習 diff遇到了哪些痛點diff是全量還是增量一些字段的增加或者枚舉值的增加可以用diff測嗎有哪些自動化…

03-grafana的下拉列表選項制作-grafana的變量

一、準備環境 為了實現下拉列表篩選的樣例,我們監控兩個linux節點; 目前,我們已經有了一個節點了,再添加一個; 二、grafana的儀表盤變量 如果想給儀表盤自定義下拉列表,那么,需要設置變量&#…

線上問題——2021-12-27 父子線程共用線程池導致死鎖故障

一、事故現象 從早上6點開始edu-wings-admin的timer-task和mq就開始報警任務堆積,且數量持續上升,到6點50左右mq也開始告警,8點左右發現問題,開始排查,直到11點才找到問題,任務開始正常消費。 二、事故影響…

haproxy集成國密ssl功能[下]

上接[haproxy集成國密ssl功能上 4. 源碼修改解析 以下修改基本圍繞haproxy的ssl_sock.c進行修改來展開的,為了將整個實現邏輯能夠說明清楚,下述內容有部分可能就是直接摘抄haproxy的原有代碼沒有做任何修改,而大部分增加或者修改的內容則進行了特別的說明。 4.1 為bind指令…

基于springboot+vue的疾病防控綜合系統

博主主頁:貓頭鷹源碼 博主簡介:Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰,歡迎高校老師\講師\同行交流合作 ?主要內容:畢業設計(Javaweb項目|小程序|Pyt…

計算機設計大賽 深度學習貓狗分類 - python opencv cnn

文章目錄 0 前言1 課題背景2 使用CNN進行貓狗分類3 數據集處理4 神經網絡的編寫5 Tensorflow計算圖的構建6 模型的訓練和測試7 預測效果8 最后 0 前言 🔥 優質競賽項目系列,今天要分享的是 🚩 **基于深度學習貓狗分類 ** 該項目較為新穎&a…

Python測試框架pytest介紹用法

1、介紹 pytest是python的一種單元測試框架,同自帶的unittest測試框架類似,相比于unittest框架使用起來更簡潔、效率更高 pip install -U pytest 特點: 1.非常容易上手,入門簡單,文檔豐富,文檔中有很多實例可以參考 2.支持簡單的單…

C++內存模型與內存序

寫在前面 在真正了解Memory Order的作用之前,曾經簡單地將Memory Order等同于mutex和atomic來進行線程間數據同步,或者用來限制線程間的執行順序,其實這是一個錯誤的理解。直到后來仔細研究了Memory Order之后,才發現無論是功能還…

Android 12 設置默認的屏幕亮度百分比

1、安卓每個版本的更新, 其核心代碼也會隨之更新,本次為Android 12 版本默認屏幕亮度的修改。 其中涉及的核心代碼主要有: packages\apps\Settings\src\com\android\settings\display\BrightnessLevelPreferenceController.java frameworks…

力扣706:設計哈希映射

題目: 不使用任何內建的哈希表庫設計一個哈希映射(HashMap)。 實現 MyHashMap 類: MyHashMap() 用空映射初始化對象void put(int key, int value) 向 HashMap 插入一個鍵值對 (key, value) 。如果 key 已經存在于映射中&#x…

【GPU驅動開發】- mesa編譯與鏈接過程詳細分析

前言 不必害怕未知,無需恐懼犯錯,做一個Creator! 一、總體框架圖 暫時無法在飛書文檔外展示此內容 二、Mesa API 處理 OpenGL 函數調用 Mesa API 負責實現 OpenGL 和其他圖形 API 的函數接口。Mesa API 表是一個重要的數據結構&#xf…

c# 獲得進程的標題

使用 System.Diagnostics.Process 類來獲取所有 Internet Explorer 進程的標題。以下是如何做到這一點的代碼示例: using System; using System.Diagnostics;class Program {static void Main(){foreach (Process process in Process.GetProcessesByName("iex…

數據中臺的演進與實踐——構建企業的數字核心_光點科技

數據中臺,一個在近年來被頻繁提及的概念,已經成為眾多企業數字化轉型的核心組成部分。然而,盡管它的重要性被業界廣泛認可,對于數據中臺的深入理解和有效實踐仍然是許多企業面臨的挑戰。在本文中,我們將從數據中臺的演…

從租完ecs云服務器 使用docker建立用戶 全過程

一 登錄root用戶 ssh root公網ip 輸入密碼,若沒有密碼可以前往阿里云設置服務器root密碼 二 創建新用戶 并賦予 新用戶sudo權限 adduser $USER usermod -aG sudo $USER 三 Ubuntu安裝docker sudo apt-get remove docker docker-engine docker.io containerd ru…

藍橋杯:門牌制作

題目 小藍要為一條街的住戶制作門牌號。 這條街一共有2020 位住戶,門牌號從1 到2020 編號。 小藍制作門牌的方法是先制作0 到9 這幾個數字字符,最后根據需要將字符粘貼到門牌上,例如門牌1017 需要依次粘貼字符1、0、1、7,即需要1…

反向代理原理

反向代理是一種網絡應用架構模式,主要用于將對一個或多個后端服務器的請求進行轉發、負載均衡和緩存,以提高系統的安全性、性能和可靠性。 其原理如下: 1. 客戶端向反向代理發送請求。 2. 反向代理服務器接收請求,并根據預設的規…

基于window安裝Elasticsearch詳細教程

目錄 一、安裝Java環境1.1 Java版本選擇 二、下載和安裝ES2.1 下載地址2.2 文件目錄 3、啟動服務3.1 以管理員身份打開cmd3.2 首次登錄會有密碼,需要記住3.3 訪問 一、安裝Java環境 1.1 Java版本選擇 官網地址:https://www.elastic.co/cn/support/matr…

9個接口性能優化方案,RT從9000ms到180ms

昨天接到生產 SkyWalking 鏈路監控告警: 服務的百分位數響應時間在過去的 10 分鐘內超過 2000 毫秒的次數達到 3 次。 經過不斷的優化,將接口從 9000ms 優化到 180ms,先看結果 優化前: 優化后: 廢話不多我們開始 一、定位性能差的…