我的軟考歷程
摘要
2023年2月,我所在的公司做了開發紗線MES系統的決定,該系統為國內紗線工廠提供SAAS服務,旨在提高紗線工廠的智能化和數字化水平。我在該項目中被任命為系統架構設計師,全面掌管該項目的架構設計工作。該項目涉及參與者眾多,邏輯復雜,需求變化快,要求具有高性能、高可用、高可靠性以及靈活發布等特點。基于此,我們采用云原生技術,把系統中的非功能性特性剝離出來,具體而言,我們用到了彈性、可觀測性、微服務等特性,如此,開發人員就可以專注業務功能的開發,從繁重的底層搭建中解放出來。借助云原生技術的加持,最終在2023年10月,該系統正式上線并運行至今,目前已經有879家工廠接入了我們的系統,系統運行穩定,表現優異,得到了客戶工廠和公司領導的一致贊揚。
項目背景
隨著我國從制造業大國升級為制造業強國以及工廠數字化和智能化的持續推進,我所在的某地某科技公司基于自研的物聯網平臺相繼開發了染整一體化和織布一體化等系統,這些系統上線后,得到了工廠的追捧,也為公司帶來了豐厚的經濟回報。基于此,我司于2023年2月開始研發紗線MES系統,該系統總投資730萬,開發周期10個月,涵蓋紗線工廠從清花、梳棉、并條、精梳、粗紗、細紗到絡筒的全流程工序,將為紗線工廠提供全面的生產管理解決方案以及基于數據的智能決策分析能力。該項目采用物聯網層次架構,整體分為感知層、網絡層和應用層。其中網絡層為公司已有的物聯網平臺,這次重點建設內容為感知層和應用層,感知層使用Golang語言開發,作為聯網網關部署在工廠側,負責工廠數據的采集和云端指令的下發。應用層為紗線MES系統主體,采用Java語言開發,使用Spring Cloud微服務架構,數據庫使用Mysql,緩存使用Redis,前端框架使用vue.js,日志、監控和鏈路追蹤采用skywalking、prometheus、grafana和ELK,最終通過devops的方式部署在kubernetes集群中。系統上線后,將提供以下:基礎管理、數據接入、工單排產、數字孿生、工資計算、智控中心和數據分析等等功能,通過以上功能,可以全面提升紗線工廠的數字化和智能化水平,使其運營水平和生產效率得到質的提升。
論述內容
由于該系統涉及參與者眾多,功能復雜,需求變化快,接入工廠設備達到483萬多臺,這就要求該系統必須具備快速部署、迭代速度快、高可用、高并發、高可靠性、高性能、高伸縮性等特性,基于此,我們團隊一致同意采用云原生技術。目前云原生有多種架構模式,比如微服務、無服務、mesh化架構、事件驅動等等架構模式,每一種架構模式都有自己的應用場景。像無服務架構模式,它就適合消息驅動的處理任務,像事件驅動架構模式,它適合需要解耦的系統,具有良好的擴展性和可維護性。在本項目中,我們采用了微服務架構模式,微服務架構模式把系統按照領域分為一個個具體的模塊,每一個模塊作為微服務可以單獨部署、開發、運行在獨立的進程中,它具有獨立管理、獨立部署、技術異構、高容錯性、高可靠性等特點。所以,為了實現我們的項目目標,我們使用了云原生中的微服務架構,通過領域驅動,把系統分解成領域獨立的多個微服務,并在微服務架構中采用了云原生的彈性、可觀測性、自動化等原則,幫助紗線MES系統實現快速部署、高迭代速度以及滿足高并發、高可用、高性能的非功能質量目標,保證了紗線MES系統按時上線。
一、彈性原則
我們采用了云原生中的微服務架構模式,其中就用到了云原生中的的一個很重要的特性:云原生的彈性原則。我們項目針對紗線工廠,而紗線工廠的生產具有很強的季節性,每年的10月到來年的2月是一個旺季,這時候,紗線MES系統就需要應對海量生產數據的上報,而到了紗線工廠的淡季,就不需要應對海量并發請求,也就不需要那么多服務器資源。基于此,采用了云原生技術架構之后,就可以利用kubernetes中的機制,通過對容器的資源占用率做閾值設置,當資源利用率很低時,達到了閾值下限,就可以關閉一些容器,釋放掉一些服務器資源,讓服務器資源得到充分的利用,避免資源的浪費,提高系統的效益。當到了旺季后,大量生產數據的上報就會占用服務器的資源,此時,服務器的資源利用率就會上升,當達到閾值上限時,kubernetes就會自動分配新資源,啟動新的容器。來應用海量的請求。我們的系統就是借助了云原生的彈性原則,有效了提高了系統的效益,降低了系統資源的浪費,以最小的代價,保障了系統的運行。
二、可觀測性原則
由于本項目業務復雜,涉及參與者眾多,同時需求變化快,迭代速度也快。這就要求當系統出現問題,或者在出現問題之前,就需要能夠快速發現并處理掉問題,此外,由于需求變化快的緣故,這就要求我們的系統必須具備良好的測試性。這些特點就決定了我們的系統要具備可觀測性,能夠實時看到系統的狀態,對于具體請求而言,要能夠觀察到這個請求從進入到結束的全流程鏈路。基于此,我們就用到了云原生中的又一個特性:可觀測性。為了實現可觀測性,我們使用了Skywalking、grafana、elk以及prometheus。通過它們,我們系統可以做到,每一個請求都能夠清晰地看到它的完整鏈路,同時這些信息可以在頁面上通過圖形化展示出來,同時,系統的各項系統參數,比如cpu利用率、內部使用率、磁盤io等等都能在頁面上清楚地看到。不僅如此,我們還可以實現實現自定義的報警,在設置一些閾值后,當系統的參數達到閾值之后,就可以通過電話、短信、釘釘、微信等方式直接通知到相應關系人,做到問題的快速響應。可以看到,借助云原生的可觀測性,有效地提高了我們系統的可用性和可靠性。
三、自動化原則
在以前,項目的測試和部署都是通過手動的方式或者是腳本的方式執行的,但是,在本項目中,系統被分為了很多微服務,每一個微服務又是集群運行的。如果采用手動或者是腳本的方式去部署和運行,這是難以想象也是難以實施的。而云原生中的自動化原則就可以幫助我們項目解決這個問題。在項目代碼開發過程中,每一次開發人員的代碼提交都會觸發自動的代碼編譯和代碼檢查任務,當代碼有問題時,就會提示相關開發人員去修改代碼,之后,CI/CD會自動地運行單元測試,但出現失敗后,也會生成報告提示相關開發人員。當都沒有問題后,就可以對代碼生成版本號,生成對應的項目鏡像,然后一鍵發布到對應的環境之中。不僅如此,發布還支持藍綠發布和灰度發布,這有效提升了系統地連續運行能力。也正是接住了云原生的自動化原則,我們實現了四天一迭代,兩周一個大版本的開發速度,有效保證了項目的順利上線。
總結
通過采用云原生架構技術,我們的項目進展順利,最終在2023年12月,該項目正式投產并對外提供服務,至今穩定運行,各項功能和性能指標均遠遠超過了客戶的預期,得到了客戶工廠和公司領導的一致贊揚。雖然項目取得了成功,但是也遇到過一些問題,在項目初期,由于產品經理對紗線業務的不熟悉,導致很多功能的調整和返工,這打擊了開發人員的士氣,基于此,我提出兩個解決方式:1、派產品進入工廠一線,與工人交流,熟悉操作流程,徹底摸清紗線業務,保證需求質量;2、開發人員也要學習紗線業務,遇到問題反饋給產品,同時在做設計時,采用靈活的設計模式,為需求的變動留下可操作的空間。我們通過這兩個方法解決了這個問題,保證了項目的進展。通過這次實踐,我不僅學習到了云原生的相關技術,也鍛煉了自己的架構和管理能力,我意識到只有不斷地學習和實踐才能讓知識融匯于自己的技術體系之中,才能在未來的工作中游刃有余、勇擔大任,為祖國的信息化建設貢獻自己的力量。