我的軟考歷程
摘要
2023年2月,我所在的公司做了開發紗線MES系統的決定,該系統為國內紗線工廠提供SAAS服務,旨在提高紗線工廠的智能化和數字化水平。我在該項目中被任命為系統架構設計師,全面掌管該項目的架構設計工作。本文將結合我在該項目中的架構設計工作經驗,詳細介紹如何把基于架構的軟件設計方法應用在項目中。ABSD方法把項目開發分為了六個階段:架構需求、架構設計、架構文檔化、架構復審、架構實現、架構演化,通過以上階段,可以有效地保障系統的非功能屬性和功能屬性,有力地保障項目的開發進度和質量。最終在2023年10月,該系統正式上線并運行至今,目前已經有879家工廠接入了我們的系統,系統運行穩定,表現優異,得到了客戶工廠和公司領導的一致贊揚。
項目背景
隨著我國從制造業大國升級為制造業強國以及工廠數字化和智能化的持續推進,我所在的某地某科技公司基于自研的物聯網平臺相繼開發了染整一體化和織布一體化等系統,這些系統上線后,得到了工廠的追捧,也為公司帶來了豐厚的經濟回報。基于此,我司于2023年2月開始研發紗線MES系統,該系統預算730萬,建設工期10個月,涵蓋紗線工廠從清花、梳棉、并條、精梳、粗紗、細紗到絡筒的全流程工序,將為紗線工廠提供全面的生產管理解決方案以及基于數據的智能決策分析能力。該項目為物聯網層次架構,整體分為感知層、網絡層和應用層。其中網絡層為公司已有的物聯網平臺,這次重點建設內容為感知層和應用層,感知層使用Golang語言開發,作為聯網網關部署在工廠側,負責工廠數據的采集和云端指令的下發。應用層為紗線MES系統主體,采用Java語言開發,使用Spring Cloud微服務架構,數據庫使用Mysql,緩存使用Redis,前端框架使用vue.js,日志、監控和鏈路追蹤采用skywalking、prometheus、grafana和ELK,最終通過devops的方式部署在kubernetes集群中。系統上線后,將提供以下:基礎管理、數據接入、工單排產、數字孿生、工資計算、智控中心和數據分析等等功能,通過以上功能,可以全面提升紗線工廠的數字化和智能化水平,使其運營水平和生產效率得到質的提升。
論述內容
由于該系統功能復雜,涉及工廠多,數據接入流程長,如何保證項目的正常開發和上線就成了一個大問題,在立項后,我作為該項目的架構設計師,和紗線業務專家、運維部門負責人、產品部門負責人以及公司業務線領導做了深入的討論,最終決定使用基于ABSD的架構設計方式去構建我們的項目。ABSD分為六個階段:架構需求階段、架構設計階段、架構文檔化階段、架構復審階段、架構實現階段、結構演化階段。下面本文將詳細介紹這六個階段以及每個階段的實踐過程。
一、架構需求階段
該階段主要需要明確公司的戰略需求以及紗線工廠的需求,需要確定在功能、行為、性能、設計約束等方面的期望,梳理項目的功能性需求、質量屬性需求以及約束性需求。該階段的主要活動是需求獲取、標識構件和架構評審。根據之前我司建設染整一體化和織布一體化的經驗,我們從領域模型的建設角度考慮,在需求階段提取了一系列構件包括業務功能組件和通用功能組件,通用功能組件包括我司的物聯網平臺、Influxdb時序性數據庫、XXL-JOB分布式任務、微服務架構腳手架、前端通用VUE腳手架等;業務功能組件包括文件上傳下載、權限認證、工作流引擎、通用低代碼等等。除此之外,我們團隊還確定了一系統要滿足的質量屬性需求,比如性能方面要滿足:1、從工廠上報數據到系統要保證在2秒內;2、各種數據分析頁面展示要在1秒內出現。在可用性方面要滿足:1、系統出現問題,在10分鐘內要恢復正常;2、數據要采用冗余備份,當主庫出現問題,從庫要在1分鐘內替換代替主庫。在可調試性方面要滿足:提供遠程調試接口,當出現問題時可以遠程調試排查。最后,工廠專家提了一些約束,比如傳輸過程必須要保證數據的機密性。通過以上過程,我們明確了架構需求。
二、架構設計階段、架構文檔化階段
該階段是一個迭代的過程,利用架構需求構建系統架構模型。這個階段主要包括提出架構模型、將已經標識的構件映射到架構中,分析構件之間的相互作用,產生系統架構并進行架構評審。在這個階段,我們采用面向對象的設計方法,對工廠的業務需求進行建模分析,分別提取出了以下關鍵領域:前置處理、細砂、絡筒、工資、通用查詢等領域,然后對各領域進行面向對象的設計,通過UML中的用例圖、類圖等描述架構模型。例如,我們對工資計算進行用例圖的建立,識別參與者、用例、用例之間的關系,參與者包括定時任務、管理者、員工等,用例包括查看工資、工資計算、權限校驗、各種方式的工資計算、工資確認等等,其中查看工資跟權限校驗屬于包含關系,跟工資確認屬于擴展關系;工資計算跟各種方式的工資計算屬于泛化關系。除此之外,我們還識別到其他一些組件,比如消息隊列、分布式定時任務、分布式配置等,這些組件已經在公司內部存在,就可以直接利用并組裝,如果存在不匹配的情況,就需要做適配操作。架構設計階段之后,我們就形成了架構規格說明書和測試架構需求的質量設計說明書,以供后續流程使用,為項目參與者提供共識。
三、架構復審階段、架構實現階段、架構演化階段
該階段在架構設計階段之后,團隊已經進行了架構文檔化整理,生成了架構規格說明書和測試架構需求的質量設計說明書,并通過4+1視圖去描述架構。此時,我邀請紗線業務專家、運維部門負責人、測試部門負責人、產品部門負責人以及公司業務領導等,大家一起通過ATAM(架構權衡分析方法)對架構進行評估,去復審架構,去發現架構中的缺陷和隱患。該階段包含以下步驟:介紹和描述、分析和評價、測試、報告四個階段。首先,我向大家介紹了ATAM方法,并讓產品負責人對業務需求進行介紹,同時我也指出了業務的質量屬性和非功能性需求。然后,架構組對該架構進行了分析,得到了一系統需要滿足的質量屬性,并生成了效用樹,之后對各質量屬性進行了排序,取舍。在測試階段,我們通過測試比較,得到結論,可用性、安全性、性能、可修改性是我們最重要的四種屬性。由于項目復雜,涉及工廠眾多,所以我們重點考慮性能、可用性、安全性。最終,我們生成了報告,報告包含效用樹、需求說明書、架構規格說明書、質量設計說明書等等。基于架構需求和架構模型,我們采用瀑布模型進系統進行了實現,滿足了功能和質量屬性,后期會根據現實的情況再考慮是否進行架構演化。
通過基于ABSD的架構設計方法,我們滿足了系統的質量屬性和非功能性需求,同時按時按質量保證了系統的開發。
總結
最終在2023年12月,該項目正式投產并對外提供服務,至今穩定運行,各項功能和性能指標均遠遠超過了客戶的預期,得到了客戶工廠和公司領導的一致贊揚。雖然項目取得了成功,但是也遇到過一些問題,在項目初期,由于產品經理對紗線業務的不熟悉,導致很多功能的調整和返工,這打擊了開發人員的士氣,基于此,我提出兩個解決方式:1、派產品進入工廠一線,與工人交流,熟悉操作流程,徹底摸清紗線業務,保證需求質量;2、開發人員也要學習紗線業務,遇到問題反饋給產品,同時在做設計時,采用靈活的設計模式,為需求的變動留下可操作的空間。我們通過這兩個方法解決了這個問題,保證了項目的進展。通過這次實踐,我不僅學習到了軟件設計方法等相關技術,也鍛煉了自己的架構和管理能力,我意識到只有不斷地學習和實踐才能讓知識融匯于自己的技術體系之中,才能在未來的工作中游刃有余、勇擔大任,為祖國的信息化建設貢獻自己的力量。