系統架構設計師論文分享-基于架構的軟件設計方法及應用

我的軟考歷程

摘要

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

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

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

相關文章

團結引擎發布純鴻蒙應用

大家好,我是阿趙。 ??這里嘗試一下用團結引擎發布純鴻蒙系統的應用。 一、 安裝鴻蒙系統發布需要的組件 在團結引擎的Hub里面找到Add modules: 然后找到OpenHarmony的支持選項,由于我已經安裝過了,所以會顯示Installed,如果沒…

C++基礎(FreeRDP編譯)

安裝 先安裝openssl 保姆級OpenSSL下載及安裝教程,OpenSSL下載及安裝教程-CSDN博客 vcpkg integrate install 安裝 vcpkg install zlib vcpkg install ffmpeg:x64-windows 編譯指令 PS D:\freerdp\FreeRDP\build> cmake .. -G "Visual Studio 17 2022" -A x…

用celery作為信息中間件

要在 Django 的 settings.py 中設置 Redis 作為 Celery 的 broker 和(可選)backend,你需要添加如下配置: 安裝依賴(如未安裝): pip install celery redis在 settings.py 中添加 Celery 配置(推薦放在文件底部): # Celery 配置 CELERY_BROKER_URL = redis://127.0.0.1…

Postman介紹及使用

Postman 是一個強大的 API 開發、測試和文檔化工具,廣泛用于開發者、測試人員和 API 設計者。以下是 Postman 的核心使用指南,涵蓋基礎操作到進階功能: 一、基礎使用 安裝與界面 下載:官網下載(支持 Windows/macOS/Lin…

Android14音頻子系統-ASoC-ALSA之DAPM電源管理子系統

文章目錄 概述1)codec對象-WM89602)ALSA下的kcontrol的構造與使用3)ASOC-ALSA下的kcontrol構造與使用1、通用寄存器對象 - kcontrol2、DAPM下的寄存器對象-widget3、如何構造widget?4、抽象對象widget、route與path1)r…

如何修改anaconda 創建新虛擬環境的路徑(默認是C:\.conda\envs)

參考文章: 如何修改anaconda 創建新虛擬環境的路徑(默認是C:\.conda\envs)_anaconda創建環境怎么改路徑-CSDN博客

前綴和計算

前綴和 輸入一個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l, r。對于每個詢問,輸出原序列中從第l個數到第r個數的和。 所用方法和基本原理 前綴和數組的構建: 首先定義了一個方法getPrefixSum來構建前綴和數組。前綴和數組…

BP神經網絡支持向量機實現風機故障診斷

BP神經網絡,支持向量機等用于風機故障診斷 BP神經網絡,支持向量機等用于風機故障診斷/成功算法/bp20111202_FDD.m , 1580 BP神經網絡,支持向量機等用于風機故障診斷/成功算法/BP_FDD.m , 6044 BP神經網絡,支持向量機等用于風機故…

c++ std::initializer_list

測試代碼&#xff1a; int sum(std::initializer_list<int> params) { // 傳遞若干同類型參數int total 0;for (auto num : params) {total num;}return total; }void testInitializer_list() {// 自定義類支持列表初始化class Demo {public:Demo(std::initializer_li…

Python 數據分析與機器學習入門 (五):Matplotlib 數據可視化基礎

引言&#xff1a;為何可視化至關重要&#xff1f; 俗話說&#xff0c;“一圖勝千言”。在數據分析領域&#xff0c;這句話尤其正確。原始的數據表格和統計摘要雖然精確&#xff0c;但往往難以揭示數據中隱藏的模式、趨勢、異常值和關系。數據可視化通過將數據轉換成圖形&#…

AI基礎1--線性代數(TODO)

1 前言 關于矩陣的運算&#xff0c;其實之前寫過一篇&#xff1a;算法矩陣提速原理_矩陣分塊計算速度會更快嘛-CSDN博客 還是那句話&#xff0c;計算機懂個毛的高等數學。只是矩陣運算的并行性和結構化特點與 SIMD/GPU 的執行模型非常一致。在實際硬件實現中&#xff0c;許多矩…

如何讓宿主機完全看不到Wi-Fi?虛擬機獨立聯網隱匿上網實戰!

“如何讓宿主機完全看不到Wi-Fi&#xff1f;虛擬機獨立聯網隱匿上網實戰&#xff01;” 一、前言 在某些特定環境&#xff08;如企業辦公或信息安全測試&#xff09;中&#xff0c;我們可能有這樣的需求&#xff1a; 讓宿主機無法識別或使用某個USB網絡設備&#xff0c;但虛擬…

Excel基礎操作知識筆記

? 學習視頻鏈接&#xff1a; ??????【公開課】Excel基礎大全&#xff08;1-66集&#xff09;【超高清版】_嗶哩嗶哩_bilibili 深圳則秀教育官方賬號的個人空間-深圳則秀教育官方賬號個人主頁-嗶哩嗶哩視頻 Excel技巧零基礎入門公開課小白&#xff08;Excel表格制作|Exc…

【2025/06/30】GitHub 今日熱門項目

GitHub 今日熱門項目 &#x1f680; 每日精選優質開源項目 | 發現優質開源項目&#xff0c;跟上技術發展趨勢 &#x1f4cb; 報告概覽 &#x1f4ca; 統計項&#x1f4c8; 數值&#x1f4dd; 說明&#x1f4c5; 報告日期2025-06-30 (周一)GitHub Trending 每日快照&#x1f55…

Oracle 進階語法實戰:從多維分析到數據清洗的深度應用?(第四課)

在《Oracle 樹形統計再進階》(第三課)基礎上&#xff0c;我們跳出傳統 SQL 聚合框架&#xff0c;探索Oracle 特有的高級語法特性&#xff0c;包括多維分析神器MODEL子句、數據清洗利器正則表達式、PL/SQL 存儲過程優化&#xff0c;以及基于執行計劃的查詢調優技巧。這些技術能解…

SpringBoot -- 自動配置原理

SpringBoot 自動配置原理 基礎知識 Bean掃描 我們在學習 Spring 的時候&#xff0c;如果要把標注一下注解的類掃描進 IOC 容器 Controller&#xff0c;Service&#xff0c;Mapper&#xff0c;是需要通過一下兩種方式實現的&#xff0c;但是我們在 SpringBoot 工程中并沒有編寫…

Kubernetes從入門到精通-服務發現Service

一、為什么需要 Service&#xff1f; Pod 的動態性&#xff1a; Pod 是 Kubernetes 調度的基本單位。它們可能因為故障、滾動更新、擴縮容等原因隨時被創建或銷毀。 Pod IP 的不穩定性&#xff1a; 每個 Pod 都有自己的 IP 地址&#xff0c;但當 Pod 重建時&#xff0c;IP 地址…

Milvus 資源調度系統的核心部分:「查詢節點」「資源組」「數據庫」

Milvus 的資源管理分為三層&#xff1a;查詢節點、資源組和 數據庫。 查詢節點&#xff1a;處理查詢任務的組件。它在物理機或容器&#xff08;如 Kubernetes 中的 pod&#xff09;上運行。 資源組&#xff1a;查詢節點的集合&#xff0c;充當邏輯組件&#xff08;數據庫和 C…

我的第一個開源項目:用Python搭建輕量級靜態網頁服務器—— 零基礎也能實現的Web開發初體驗

一、為什么選擇靜態服務器&#xff1f; 極簡高效&#xff1a;無需數據庫或復雜后端邏輯&#xff0c;適合展示簡歷、作品集等靜態內容 學習曲線平緩&#xff1a;是理解HTTP協議和Web服務原理的最佳入門方式 資源消耗低&#xff1a;單文件Python腳本即可運行&#xff0c;內存占…

github 圖床使用免費CDN加速(jsdelivr)

github做圖床大部分人都知道&#xff0c;但是國內訪問速度不穩定&#xff0c;所以使用jsdelivr加速。 jsdelivr是什么呢&#xff1f;它是一個免費、快速和可信賴的CDN加速服務&#xff0c;直接集成在github中的&#xff0c;無需額外操作即可使用。 本文分兩部份&#xff0c;最…