系統架構設計師論文分享-論軟件架構復用

我的軟考歷程

摘要

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、開發人員也要學習紗線業務,遇到問題反饋給產品,同時在做設計時,采用靈活的設計模式,為需求的變動留下可操作的空間。我們通過這兩個方法解決了這個問題,保證了項目的進展。通過這次實踐,我不僅學習到了架構復用的相關技術,也鍛煉了自己的架構和管理能力,我意識到只有不斷地學習和實踐才能讓知識融匯于自己的技術體系之中,才能在未來的工作中游刃有余、勇擔大任,為祖國的信息化建設貢獻自己的力量。

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

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

相關文章

虛擬主機與獨立服務器如何選擇

在搭建和維護網站時,選擇合適的服務器套餐至關重要。虛擬主機和獨立服務器是兩種常見的選擇,它們各有優缺點,適用于不同需求的用戶。本文將深入探討這兩種服務器類型的特點,以幫助您為您的網站選擇最合適的服務器解決方案。虛擬主…

NFC的安全技術體系

NFC(近場通信)技術因廣泛應用于移動支付、身份認證、門禁控制等敏感場景,其安全技術體系是保障用戶數據與交易安全的核心。該體系涵蓋數據傳輸安全、存儲安全、身份認證、防攻擊機制等多個維度,通過硬件隔離、加密算法、協議規范等…

Echarts3D柱狀圖-圓柱體-文字在柱體上垂直顯示的實現方法

全部代碼 <!DOCTYPE html> <html lang"en" style"height: 100%"> <head><meta charset"utf-8"><title>3D柱狀圖-圓柱體-文字豎排</title> </head> <body style"height: 100%; margin: 0"…

【算法訓練營Day08】字符串part2

文章目錄 反轉字符串里的單詞右旋字符串KMP算法雙指針法總結 反轉字符串里的單詞 題目鏈接&#xff1a;151. 反轉字符串中的單詞 雙指針法解題邏輯 head指針遍歷字符串遍歷到單詞首單詞&#xff0c;生成end指針移動到單詞尾部遇到完整單詞收集&#xff0c;壓入棧中head指針移動…

如何使用backtrace定位Linux程序的崩潰位置

在嵌入式Linux開發中&#xff0c;特別是復雜軟件&#xff0c;多人協作開發時&#xff0c;當某人無意間寫了一個代碼bug導致程序崩潰&#xff0c;但又不知道崩潰的具體位置時&#xff0c;單純靠走讀代碼&#xff0c;很難快速的定位問題。 本篇就來介紹一種方法&#xff0c;使用…

十大排序算法匯總

好的&#xff0c;下面為你整理一篇面試全覆蓋、極其深入的十大排序算法總結博客&#xff0c;涵蓋算法原理、復雜度、穩定性、應用場景、工程實踐、C與Python實現&#xff08;含詳細注釋&#xff09;&#xff0c;并對比分析各種排序的優缺點與適用情境。內容力求結構清晰、講解透…

零基礎 “入坑” Java--- 七、數組(二)

文章目錄 一、數組轉字符串二、數組的拷貝三、求數組中元素的平均值四、查找數組中指定元素&#xff08;順序查找&#xff09;五、數組排序&#xff08;冒泡排序&#xff09;六、查找數組中指定元素&#xff08;二分查找&#xff09;七、判斷兩個數組中的元素是否相等八、填充數…

【C++ 真題】P1104 生日

P1104 生日 題目描述 cjf 君想調查學校 OI 組每個同學的生日&#xff0c;并按照年齡從大到小的順序排序。但 cjf 君最近作業很多&#xff0c;沒有時間&#xff0c;所以請你幫她排序。 輸入格式 輸入共有 n 1 n 1 n1 行&#xff0c; 第 1 1 1 行為 OI 組總人數 n n n&…

Oracle DB和PostgreSQL,OpenGauss主外鍵一致性的區別

針對于unique索引在主外鍵上的表現&#xff0c;o和PG的行為確實不一致&#xff0c;測試樣例&#xff1a;PG:測試1&#xff1a;test# CREATE TABLE gdb_editingtemplates ( objectid INTEGER NOT NULL, globalid VARCHAR(38) DEFAULT {00000000-0000-0000-0000-000000000000} …

06.自動化測試概念

自動化測試概念 1. 自動化1.1 回歸測試1.2 自動化分類 1.3 自動化測試金字塔2. web自動化測試3.Selenium 1. 自動化 ? **自動化測試&#xff08;Automated Testing&#xff09;&#xff1a;**是指使用軟件工具或腳本來自動執行測試任務&#xff0c;代替人工進行重復性、繁瑣的…

頁面登錄數據的加密(前端+后端)

本加密過程使用的 AESRSA概要1.使用AES對傳輸數據進行加密AES為對稱加密,加密和解決所需要的key是一樣的,所以攔截到AES key就可以直接解密,所以需要結果RSA進行加密2.對AES的key進行RSA加密RSA為非對稱加密,客戶端只能獲取到publicKey(公鑰),而解密只能使用服務器的privateKey…

PC端基于SpringBoot架構控制無人機(一):初識無人機控制

一、無人機飛控系統的概述飛控&#xff08;Flight Controller&#xff09;是無人機最為核心的組成部分之一&#xff0c;負責實現無人機的自主飛行控制和穩定飛行。飛控系統的功能決定了無人機的飛行性能&#xff0c;包括飛行的穩定性、操控的響應速度、導航的精確度等。通過飛控…

QT6 源(154)模型視圖架構里的列表視圖 QListView:先學習屬性部分,

&#xff08;1&#xff09;屬性總圖&#xff0c;以及測試程序的框架 &#xff1a; 開始屬性的學習 &#xff1a; &#xff08;2&#xff09; 繼續屬性學習 &#xff1a; &#xff08;3&#xff09; 謝謝

MySQL——9、事務管理

事務管理 1、什么是事務&#xff1f;2、事務常見操作方式3、事務隔離級別4、數據庫并發場景4.1、讀-寫4.2、RR與RC的本質區別 1、什么是事務&#xff1f; mysql是基于CS模式的&#xff0c;是一套網絡服務&#xff0c;所以我們是可以在本地連接上遠程服務器的mysql服務端的。my…

Python之面向對象詳解(一篇足矣)

目錄 一、初階面向對象 1. 初識面向對象 1.1 對象和self 1.2 常見成員 1.3 應用示例 將數據封裝到一個對象&#xff0c;便于以后使用。 將數據封裝到對象中&#xff0c;在方法中對原始數據進行加工處理。 根據類創建多個對象&#xff0c;在方法中對對象中的數據進行修改…

【Qt】qml組件對象怎么傳遞給c++

將QML組件對象傳遞給C的方法 在QML和C之間傳遞完整的組件對象需要特殊處理&#xff0c;因為QML組件是動態創建的JavaScript對象。以下是幾種有效的方法&#xff1a; 1. 使用QObject指針傳遞 C端設置 // MyClass.h #include <QObject> #include <QQuickItem>cla…

Java基礎 集合框架 List框架

list架構 list接口list 核心特性以及擴展Collection的體現 抽象類 AbstractList抽象類 AbstractSequentialList (簡化鏈表的順序訪問)AbstractSequentialList 核心特點自定義實現示例代碼講解其實現原理AbstractSequentialList 總結與AbstractList的對比 List 實現類 ArrayList…

2025年6月28和29日復習和預習(C++)

學習筆記大綱?一、預習部分&#xff1a;數組基礎?&#xff08;一&#xff09;核心知識點?數組的創建&#xff1a;掌握一維數組的聲明方式&#xff0c;如int arr[5];&#xff08;創建一個包含 5 個整數的數組&#xff09;。重點在于理解數組長度需為常量&#xff0c;且在聲明…

【centos8服務如何給服務器開發3306端口】

在 CentOS 8 中開放 MySQL 默認端口 3306&#xff0c;需要配置防火墻和 SELinux。以下是詳細步驟&#xff1a; 1. 開放防火墻端口&#xff08;Firewalld&#xff09; CentOS 8 默認使用 firewalld 管理防火墻&#xff0c;執行以下命令開放 3306 端口&#xff1a; # 開放 TCP 33…

python系列之:使用md5和sha256完成簽名認證,調用接口

python系列之:使用md5和sha256完成簽名認證,調用接口 MD5簽名和sha256簽名認證md5認證代碼sha256認證代碼拼接簽名生成簽名拼接url調用接口MD5簽名和sha256簽名認證 MD5簽名認證 算法特性: 生成128位(16字節)的哈希值計算速度快已被證明存在碰撞漏洞(不同輸入可能產生相同…