我的軟考歷程
摘要
2023年2月,我所在的公司通過了研發紗線MES系統的立項,該項目為國內紗線工廠提供SAAS服務,旨在提升紗線工廠的數字化和智能化水平。我在該項目中擔任架構設計師,負責該項目的架構設計工作。本文結合我在該項目中的實踐,詳細論述了軟件架構復用的實現過程。軟件架構復用可以有效降低成本,提高開發速度和質量屬性,架構復用方法的步驟分為三個過程:可復用資產的獲取、架構復用的管理、架構復用的使用。通過架構復用,我們有效地利用了之前的架構設計、建模分析、需求文檔、詳細設計、測試過程、人員等等。有效地保障了項目的進展,保證了項目的開發質量。最終在2023年12月,該項目正式上線對外提供服務,得到了客戶工廠和公司領導的一致好評。
項目背景
隨著我國從制造業大國升級為制造業強國以及工廠數字化和智能化的持續推進,我所在的某地某科技公司基于自研的物聯網平臺相繼開發了染整一體化和織布一體化等系統,這些系統上線后,得到了工廠的追捧,也為公司帶來了豐厚的經濟回報。基于此,我司于2023年2月開始研發紗線MES系統,該系統總投資730萬,開發周期10個月,涵蓋紗線工廠從清花、梳棉、并條、精梳、粗紗、細紗到絡筒的全流程工序,將為紗線工廠提供全面的生產管理解決方案以及基于數據的智能決策分析能力。該項目采用物聯網層次架構,整體分為感知層、網絡層和應用層。其中網絡層為公司已有的物聯網平臺,這次重點建設內容為感知層和應用層,感知層使用Golang語言開發,作為聯網網關部署在工廠側,負責工廠數據的采集和云端指令的下發。應用層為紗線MES系統主體,采用Java語言開發,使用Spring Cloud微服務架構,數據庫使用Mysql,緩存使用Redis,前端框架使用vue.js,日志、監控和鏈路追蹤采用skywalking、prometheus、grafana和ELK,最終通過devops的方式部署在kubernetes集群中。系統上線后,將提供以下:基礎管理、數據接入、工單排產、數字孿生、工資計算、智控中心和數據分析等等功能,通過以上功能,可以全面提升紗線工廠的數字化和智能化水平,使其運營水平和生產效率得到質的提升。
論述內容
該項目涉及參與者眾多,業務邏輯和流程復雜,又由于我司以前有工廠數字化的積淀,所以采用架構復用可以顯著提升開發速度和保障項目質量,基于此,我們團隊一致決定采用軟件架構復用的方式來開發該系統。軟件架構復用主要有三個階段:1、獲取可復用的架構資產;2、管理可復用的架構資產;3、使用可復用的架構資產。我們基于這三個過程,有效地利用了之前積累的軟件架構資產如:架構設計,架構需求,架構文檔,基礎組件,測試代碼,功能代碼、運維組件等等資產。我們通過架構復用的方式,提高了開發速度,降低了風險和項目成本,保障了項目的質量屬性。下面就從這三個階段來介紹我們是如何應用軟件架構復用的。
一、獲取可復用的架構資產
在開發紗線MES系統之前,我司已經基于物聯網技術開發了染整一體化和織布一體化平臺,它們分別針對染整工廠和織布工廠,基于此,我司已經積累了大量的可復用的架構資產,比如設計文檔,可用的構件,架構的設計、經驗豐富的開發人員,測試用例。這里面的大部分內容都是可以再次利用的,有些甚至不需要改造就可以拿來使用。比如,物聯網平臺就可以直接拿來使用,通過該平臺可以為紗線MES系統提供穩定可靠的數據交互能力,又由于它經歷過了生產環境檢驗,它能顯著降低開發成本,提高項目的質量。又如公司自有的微服務基礎架構:用戶權限系統,短信系統,文件系統,這些系統都可以直接為紗線Mes所使用,不需要再次開發,并且這些系統也經過生產環境的檢驗,可靠性極強。同時紗線MES系統非常依賴物聯網技術,公司所沉淀下來的物聯網知識就提供了大量的可復用資產:物聯網相關文檔、MQTT協議文檔、邊端開發技術手冊、設備破解方法、工廠網絡配置等等,這些資產能有效地幫助開發人員迅速進入開發狀態并解決相應的問題,同時之前那些有經驗的開發人員,被我邀請加入到該紗線Mes系統的開發之中,強有力地保障了項目的進展。還有就是測試的復用,公司之前已經建立了一套可靠的測試流程和工具,所以我們在開發紗線MES系統時就可以完全使用原來的流程和工具。最后就是運維的復用,公司已經基于devops和kubernetes技術建立一整套完善的自動化運維流程,這套流程和工具也就完全地被我們采用。
二、管理可復用資產
當獲取了可復用的架構資產之后,就需要對架構資產進行管理。對于技術文檔類的資產,可以建立有效的文檔庫,知識庫,方便讓參與人員隨時查詢和學習。對于微服務類的組件,比如短信微服務、用戶權限微服務,那么就可以建立微服務查詢服務,主要借助Nacos的功能,方面公司內部人員檢索所有的服務。對于測試和運維類的工具,就需要我們建立構件庫,把各種組件和工具都放在統一的構件庫中,構件庫要使用層級的管理方式,讓開發人員能方便查找到自己需要的工具,不止如此,我們還提供了基于關鍵字、刻面、超文本的三種方式來組織和管理我們的構件。通過該階段后,我們有效地建立了可復用的資產庫,有了這個資產庫,以后所有的項目都可以方便地采用架構復用技術來開發自己的系統。
三、使用可復用的資產
在建立了資產庫之后,就可以通過采用構件組裝的方式來開發我們的系統了。首先,紗線MES系統要使用物聯網平臺,通過物聯網平臺,可以提供數據的路由和轉發,可靠為邊端和云端提供數據交互能力,集成物聯網平臺的方式也比較簡單,物聯網平臺對外提供非常易用的接口和基于消息隊列的方式,云端需要通過接口下發指令,并通過消息隊列獲取工廠的生產數據。邊端采用MQTT協議與物聯網平臺對接,主要為了保障數據傳輸在復雜不穩定的網絡下的可靠性,其次邊端采用了之前公司的Golang腳手架,在原來的基礎上做了改造和適配,主要是要適配紗線工廠的設備,對這些設備進行采集和控制。其他如測試和部署的方式都復用原來的,保證了測試和部署的連貫性。在微服務層面,紗線MES系統要使用已有的短信、用戶權限、文件等服務,那就需要讓已有的服務提供接口到Nacos中,這樣紗線Mes系統的微服務就可以發現調用這些服務并使用這些服務的功能。在緩存層面,公司已經有了基于kubernetes管理的Redis服務,那么就可以直接通過kubernetes建立一個為紗線MES系統服務的Redis服務。對于測試人員來說,就可以利用現有的開發環境、測試環境和灰度環境,測試人員可以很容易地進行測試,降低了測試的成本,保證了測試的質量。
總結
通過以上三個過程,我們有效地實施了軟件架構復用,降低了項目成本,提高了開發速度和項目質量,保障了項目地順利進展。最終在2023年12月,該項目正式投產并對外提供服務,至今穩定運行,各項功能和性能指標均遠遠超過了客戶的預期,得到了客戶工廠和公司領導的一致贊揚。雖然項目取得了成功,但是也遇到過一些問題,在項目初期,由于產品經理對紗線業務的不熟悉,導致很多功能的調整和返工,這打擊了開發人員的士氣,基于此,我提出兩個解決方式:1、派產品進入工廠一線,與工人交流,熟悉操作流程,徹底摸清紗線業務,保證需求質量;2、開發人員也要學習紗線業務,遇到問題反饋給產品,同時在做設計時,采用靈活的設計模式,為需求的變動留下可操作的空間。我們通過這兩個方法解決了這個問題,保證了項目的進展。通過這次實踐,我不僅學習到了架構復用的相關技術,也鍛煉了自己的架構和管理能力,我意識到只有不斷地學習和實踐才能讓知識融匯于自己的技術體系之中,才能在未來的工作中游刃有余、勇擔大任,為祖國的信息化建設貢獻自己的力量。