摘要:
????????本人于2016年1月參與浙江省某市公交集團(tuán)“公交車聯(lián)網(wǎng)一體化“項(xiàng)目,該系統(tǒng)為新能源營運(yùn)車輛補(bǔ)貼監(jiān)管、安全監(jiān)控等方面提供全方位的軟件支撐,在該項(xiàng)目組中我擔(dān)任系統(tǒng)架構(gòu)師崗位,主要負(fù)責(zé)整體架構(gòu)設(shè)計(jì)與中間件選型.本文以該車聯(lián)網(wǎng)項(xiàng)目為例,主要討論了軟件架構(gòu)風(fēng)格在該項(xiàng)目中的具體應(yīng)用。底層架構(gòu)風(fēng)格我們采用了虛擬機(jī)風(fēng)格中的解釋器,因該公交共有幾十種不同的數(shù)據(jù)協(xié)議,使用解釋器風(fēng)格可以滿足整車數(shù)據(jù)協(xié)議兼容性需求;中間層關(guān)于應(yīng)用層的數(shù)據(jù)流轉(zhuǎn)我們采用了獨(dú)立構(gòu)件風(fēng)格中的隱式調(diào)用,這種風(fēng)格主要用于減低系統(tǒng)間耦合度、簡化軟件架構(gòu),提高可修改性方面的架構(gòu)屬性;應(yīng)用系統(tǒng)層我們采用了B/S的架構(gòu)風(fēng)格,統(tǒng)一解決公交行業(yè)性難題“實(shí)施推廣難、維護(hù)難問題。最終項(xiàng)目成功上線,獲得用戶一致好評(píng)。
正文:
????????隨著國家十三五計(jì)劃中-能源戰(zhàn)略的深入和推廣,該市公交集團(tuán)自2016年1月起全面停止采購燃油機(jī)公交車,規(guī)劃到2020年純電公交車采購占比必須在70%以上,同時(shí)配套將車聯(lián)網(wǎng)方面的系統(tǒng)建設(shè)被列為工作重點(diǎn)。不管從新能源營運(yùn)車輛補(bǔ)貼監(jiān)管、安全監(jiān)控或者公交公司自身的營運(yùn)和機(jī)護(hù)需求,都要求有新的車聯(lián)網(wǎng)系統(tǒng)對(duì)他們進(jìn)行全方位的支持,而我司是該公交的主要儀表與can模塊產(chǎn)品的主要供應(yīng)商,全市4000多臺(tái)車中有3000多輛是我司的產(chǎn)品,我司不僅掌握熟悉該公交整車數(shù)據(jù)而且在車聯(lián)網(wǎng)底層can數(shù)據(jù)有非常明顯的領(lǐng)域知識(shí)優(yōu)勢,因此2016年1月我司被該市公交集團(tuán)委托建設(shè)公交集團(tuán)車聯(lián)網(wǎng)一體化項(xiàng)目。本項(xiàng)目組全體成員共有27人(不含業(yè)主方),我在項(xiàng)目中為擔(dān)任系統(tǒng)架構(gòu)師職務(wù),架構(gòu)小組共4人,我主要職責(zé)負(fù)責(zé)整體架構(gòu)設(shè)計(jì)與中間件選型,4月份完成架構(gòu)工作,整個(gè)項(xiàng)目共耗時(shí)了7個(gè)月,2016年8月順利通過驗(yàn)收。
????????在架構(gòu)工作開始階段,我們便意識(shí)到,架構(gòu)風(fēng)格是一組設(shè)計(jì)原則,是能夠提供抽象框架模式,可以為我們的項(xiàng)目提供通用解決方案的,這種能夠極大提高軟件設(shè)計(jì)的重用的方法加快我們的建設(shè)進(jìn)程,因此在我司總工程師的建議下,我們使用了虛擬機(jī)風(fēng)格、獨(dú)立構(gòu)件風(fēng)格以及B/S架構(gòu)風(fēng)格這三種較常用風(fēng)格。虛擬機(jī)風(fēng)格中的解釋器架構(gòu)風(fēng)格能夠提供靈活的解析引擎,這類風(fēng)格非常適用于復(fù)雜流程的處理。獨(dú)立構(gòu)件風(fēng)格包括進(jìn)程通訊風(fēng)格與隱式調(diào)用風(fēng)格,我們?yōu)榱撕喕軜?gòu)復(fù)雜度采用了隱式調(diào)用風(fēng)格,通過消息訂閱和發(fā)布控制系統(tǒng)間信息交互,不僅能減低系統(tǒng)耦合度,而且還提高架構(gòu)的可修改性。B/S架構(gòu)風(fēng)格是基于瀏覽器和服務(wù)器的軟件架構(gòu),它主要使用http協(xié)議進(jìn)行通信和交互,簡化客戶端的工作,最終減低了系統(tǒng)推廣和維護(hù)的難度,以下正文將重點(diǎn)描述架構(gòu)風(fēng)格的實(shí)施過程和效果。
????????底層架構(gòu)我們使用解釋器風(fēng)格來滿足整車數(shù)據(jù)協(xié)議兼容性需求。解釋器風(fēng)格是虛擬機(jī)風(fēng)格中的一種,具備良好的靈活性在本項(xiàng)目中我們的架構(gòu)設(shè)計(jì)需要兼容好86種不同can數(shù)據(jù)協(xié)議,一般來說這種軟件編寫難度非常高,代碼維護(hù)難度壓力也很大因此這個(gè)解釋器的設(shè)計(jì)任務(wù)便很明確了,軟件設(shè)計(jì)需要高度抽象、協(xié)議的適配由配置文件來承擔(dān)。具體的做法如下,我們對(duì)各個(gè)車廠的can數(shù)據(jù)結(jié)構(gòu)進(jìn)行了高度抽象,由于can數(shù)據(jù)由很多數(shù)據(jù)幀組成,每個(gè)數(shù)據(jù)幀容量固定并且標(biāo)識(shí)和數(shù)據(jù)有明確規(guī)定因此我們將can協(xié)議中的ID和數(shù)據(jù)進(jìn)行關(guān)系建模,將整體協(xié)議標(biāo)識(shí)做為一個(gè)根節(jié)點(diǎn),以canid作為根節(jié)點(diǎn)下的葉子節(jié)點(diǎn),使用XML的數(shù)據(jù)結(jié)構(gòu)映射成了有整車協(xié)議鏈-數(shù)據(jù)幀-數(shù)據(jù)字節(jié)-數(shù)據(jù)位這4層的數(shù)據(jù)結(jié)構(gòu),核心的代碼采用jdomjar與java的反射機(jī)制動(dòng)態(tài)生成java對(duì)象,搭建一套可以基于可變模板的解釋器,協(xié)議模板的產(chǎn)生可以由公交公司提供的excel協(xié)議文檔進(jìn)行轉(zhuǎn)換得到,解釋器支持協(xié)議模板熱部署,這種可以將透傳二進(jìn)制數(shù)據(jù)直接映射成java的可序列化對(duì)象,將數(shù)據(jù)協(xié)議的復(fù)雜度簡化后期數(shù)據(jù)協(xié)議更改不會(huì)對(duì)軟件產(chǎn)生影響,僅僅更改協(xié)議模板文件即可,最終我們使用了86個(gè)協(xié)議描述文件便兼容了這些復(fù)雜的can數(shù)據(jù)協(xié)議,規(guī)避了can數(shù)據(jù)巨大差異帶來的技術(shù)風(fēng)險(xiǎn)。
????????中間層我們使用獨(dú)立構(gòu)件風(fēng)格中的隱式調(diào)用來簡化構(gòu)件間的交互復(fù)雜度,降低系統(tǒng)耦合度。主要的實(shí)現(xiàn)手段是我們采用了一個(gè)開源的消息中間件作為連接構(gòu)件,這個(gè)構(gòu)件是apache基金會(huì)下的核心開源項(xiàng)目activemq,它是一款消息服務(wù)器,其性能和穩(wěn)定性久經(jīng)考驗(yàn)。由上文提到的解釋器解析出對(duì)象化數(shù)據(jù)經(jīng)過activemq分發(fā)到各個(gè)訂閱此消息的應(yīng)用系統(tǒng),這些應(yīng)用系統(tǒng)包括運(yùn)營指揮調(diào)度、自動(dòng)化機(jī)護(hù)、新能源電池安全監(jiān)控等,這種多web應(yīng)用的情況非常適合采用消息發(fā)布與消息訂閱的機(jī)制,能夠有效解決耦合問題,我們在編碼的過程中發(fā)現(xiàn)只要采用這種風(fēng)格的web應(yīng)用,整個(gè)迭代過程效率極高,錯(cuò)誤率降低,而且我們使用的spring框架,消息隊(duì)列的管理完全基于配置,清晰簡單,維護(hù)性良好,例如整車安全主題、運(yùn)營調(diào)度主題、機(jī)護(hù)維修主題等消息隊(duì)列分類清晰,可以隨時(shí)修改其結(jié)構(gòu)也能夠隨時(shí)增其他主題的消息隊(duì)列,不同的web系統(tǒng)監(jiān)聽的隊(duì)列也可以隨時(shí)變換組合,基于消息中間件的架構(gòu)設(shè)計(jì)能夠讓系統(tǒng)的構(gòu)件化思路得到良好實(shí)施,總體來說這種架構(gòu)風(fēng)格帶來了非常清晰的數(shù)據(jù)流轉(zhuǎn)架構(gòu),簡化了編碼難度,減低本項(xiàng)目的二次開發(fā)的難度。
????????應(yīng)用系統(tǒng)層我們主要采用B/S的架構(gòu)風(fēng)格,主要用于解決公交推廣難、維護(hù)難得問題。公交行業(yè)有一個(gè)明顯的特點(diǎn),公交子公司分布在全市各個(gè)地區(qū),路途很遠(yuǎn),且都是內(nèi)網(wǎng)通訊,車聯(lián)網(wǎng)絡(luò)也是走的APN專網(wǎng),一般是無法遠(yuǎn)程支持的,這給我們的系統(tǒng)推廣以及后期維護(hù)帶來了很大難題,我們可以想象如果使用C/S架構(gòu),更新客戶端一旦遇到問題很可能需要全市各個(gè)站點(diǎn)跑一遍。這讓我們在系統(tǒng)推廣和維護(hù)方面面臨較大壓力。我們采用的B/5架構(gòu)風(fēng)格能夠解決這個(gè)難題,并充分考量可現(xiàn)在的相關(guān)技術(shù)成熟度,例如現(xiàn)在的html5完全能夠?qū)崿F(xiàn)以前客戶端的功能,項(xiàng)目中我們使用了大量的前端緩存技術(shù)與websocket技術(shù),能夠滿足公交用戶實(shí)時(shí)性交互等需求。這種風(fēng)格中頁面和邏輯處理存儲(chǔ)在web服務(wù)器上,維護(hù)和軟件升級(jí)只要更新服務(wù)器端即可,及時(shí)生效,用戶體驗(yàn)較好,例如界面上需要優(yōu)化,改一下Javascript腳本或者CSS文件就可以馬上看到效果了。
????????項(xiàng)目于2016年8月完成驗(yàn)收,這1年內(nèi)共經(jīng)歷了2次大批量新購公交車輛接入,這幾次接入過程平穩(wěn)順利,其中協(xié)議解釋器軟件性能沒有出現(xiàn)過問題,消息中間件的性能經(jīng)過多次調(diào)優(yōu)吞吐量也接近了硬盤IO極限,滿足當(dāng)前的消息交互總量,另外由于我們的項(xiàng)目多次緊急狀態(tài)下能夠快速適應(yīng)can協(xié)議變動(dòng),得到過業(yè)主的郵件表揚(yáng)。除了業(yè)主機(jī)房幾次突發(fā)性的網(wǎng)絡(luò)故障外,項(xiàng)目至今還未有重大的生產(chǎn)事故,項(xiàng)目組現(xiàn)在留1個(gè)開發(fā)人員和1個(gè)售后在維護(hù),系統(tǒng)的維護(hù)量是可控的,系統(tǒng)運(yùn)行也比較穩(wěn)定。文章來源:http://www.zghlxwxcb.cn/news/detail-602120.html
????????不足之處有兩個(gè)方面,第一在架構(gòu)設(shè)計(jì)的過程中我們忽略PC配置,個(gè)別PC因?yàn)樾枰嫒堇系膽?yīng)用軟件不允許系統(tǒng)升級(jí),這些電腦系統(tǒng)老舊,其瀏覽器不支持html5,導(dǎo)致了系統(tǒng)推廣黯礙。第二在系統(tǒng)容災(zāi)方面還有待改善。針對(duì)第一種問題,我們通過技術(shù)研討會(huì)說服可業(yè)主新購PC,采用兩臺(tái)機(jī)器同時(shí)使用方式解決。針對(duì)第二種問題我方采用了服務(wù)器冗余和心跳監(jiān)測等策略,在一臺(tái)服務(wù)暫停的情況下,另外一臺(tái)服務(wù)接管,以增加可用性.文章來源地址http://www.zghlxwxcb.cn/news/detail-602120.html
到了這里,關(guān)于軟考-系統(tǒng)架構(gòu)設(shè)計(jì)師論文范文《論軟件系統(tǒng)架構(gòu)風(fēng)格》的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!