软考高级软件架构师论文——论软件架构风格
論軟件架構(gòu)風(fēng)格
軟件體系結(jié)構(gòu)風(fēng)格是描述某一特定應(yīng)用領(lǐng)域中系統(tǒng)組織方式的慣用模式。體系結(jié)構(gòu)風(fēng)格定義一個系統(tǒng)家族,即一個體系結(jié)構(gòu)定義一個詞匯表和一組約束。詞匯表中包含一些構(gòu)件和連接類型,而這組約束指出系統(tǒng)是如何將這些構(gòu)件和連接件組合起來的。體系結(jié)構(gòu)風(fēng)格反應(yīng)了領(lǐng)域中眾多系統(tǒng)所共有的結(jié)構(gòu)和語義特性,并指導(dǎo)如何將各個模塊和子系統(tǒng)有效地組織成一個完整的系統(tǒng)。
請圍繞“論軟件架構(gòu)風(fēng)格”論題,依次從以下三個方面進行論述。
1、概要敘述你參與分析和設(shè)計的軟件系統(tǒng)開發(fā)項目以及你所擔(dān)任的主要工作。
2、軟件系統(tǒng)開發(fā)中常用的軟件架構(gòu)風(fēng)格有哪些?詳細闡述每種風(fēng)格的具體含義。
3、詳細說明你參與分析和設(shè)計的軟件系統(tǒng)是采用什么軟件架構(gòu)風(fēng)格的,并分析采用該架構(gòu)風(fēng)格設(shè)計的原因。
摘要:
本人于2019年11月參與廣東省某在線教育平臺“外教一對一在線教育”項目,該項目為客戶提供了一對一歐美外教視頻教學(xué),社交圈,公眾直播等功能,提供全方位的軟件支撐,在該項目組中我擔(dān)任系統(tǒng)架構(gòu)師崗位,主要負責(zé)整體架構(gòu)設(shè)計與中間件選型。本文以該教育平臺為例,主要討論了軟件架構(gòu)風(fēng)格在該項目中的具體應(yīng)用。整個系統(tǒng)采用具有三層的層次式軟件架構(gòu)的設(shè)計思想,分別是應(yīng)用層,服務(wù)層,數(shù)據(jù)層。在應(yīng)用層中的業(yè)務(wù)邏輯層的設(shè)計中,將整個業(yè)務(wù)系統(tǒng)劃分為十余個子系統(tǒng)。服務(wù)層以SpringCloud Alibaba 服務(wù)框架為核心,數(shù)據(jù)層采用了Mybatis框架。整個系統(tǒng)開發(fā)工作歷時18個月。目前,該系統(tǒng)已經(jīng)穩(wěn)定運行近一年半時間。實踐證明,這種架構(gòu)設(shè)計有效地降低了維護成本,提高了系統(tǒng)地開放性,可拓展性,可復(fù)用性和可移植性。
正文:
隨著國家對教育越來越重視,英語教育地市場份額逐步上升,其中用戶口語提升地需求越來越大。為此,一些公司開始提供與外國人聊天地平臺。我公司決定從國際通訊領(lǐng)域進軍口語教育領(lǐng)域。為了這項戰(zhàn)略轉(zhuǎn)變,公司于2019年11月設(shè)計在線教育平臺系統(tǒng)(以下簡稱為“系統(tǒng)”)。該系統(tǒng)幫助人們與歐美外教進行面對面地口語交流與教學(xué)。其中隨意聊提供了一個類似QQ視頻通話,而正式課程還提供了H5互動課件以提高教學(xué)質(zhì)量。與此同時,還有公眾直播用于拉新,AI測試用于評測學(xué)員能力,降低成本。我參與了該項目地開發(fā)工作,擔(dān)任系統(tǒng)架構(gòu)設(shè)計師職務(wù),主要負責(zé)設(shè)計系統(tǒng)架構(gòu)。本項目組全體成員共9人,我主要負責(zé)項目計劃制定,需求分析,整體架構(gòu)設(shè)計與技術(shù)選型,以及底層設(shè)計。該項目地架構(gòu)工作于次年2月完成,整個項目耗時18個月,于2021年5月完成。
在架構(gòu)工作地開始階段,我們便意識到,架構(gòu)風(fēng)格定義了用于描述系統(tǒng)地術(shù)語表和一組指導(dǎo)構(gòu)建系統(tǒng)地規(guī)則,是系統(tǒng)組織方式地慣用模式,可以為我們地項目提供架構(gòu)級地通用解決方案。這種架構(gòu)級地軟件重用可以極大提高我們地系統(tǒng)建設(shè)進程。
軟件系統(tǒng)開發(fā)中常用地軟件架構(gòu)風(fēng)格有:數(shù)據(jù)流風(fēng)格,調(diào)用/返回風(fēng)格,獨立構(gòu)件風(fēng)格,虛擬機風(fēng)格,倉庫風(fēng)格。數(shù)據(jù)流風(fēng)格包括批處理序列與管道-過濾器,其每一步處理都是獨立,順序執(zhí)行地,適用于簡單地線性流程。調(diào)用/返回風(fēng)格包括主程序/子程序風(fēng)格,面向?qū)ο箫L(fēng)格,層次結(jié)構(gòu)風(fēng)格,其進一步降低系統(tǒng)耦合度,明確系統(tǒng)層次。獨立構(gòu)件風(fēng)格包括進程通信,事件驅(qū)動(隱式調(diào)用),其構(gòu)件特點為軟件重用提供了支持。虛擬機風(fēng)格包括解釋器風(fēng)格,基于規(guī)則地系統(tǒng)風(fēng)格,其具有良好地靈活性,可自定義規(guī)則。倉庫風(fēng)格包括數(shù)據(jù)庫系統(tǒng)風(fēng)格,超文本系統(tǒng)風(fēng)格,黑板系統(tǒng)風(fēng)格,其以數(shù)據(jù)為中心。除此之外,還有dssa,soa等架構(gòu)風(fēng)格。
在了解需求后,我們決定在公司技術(shù)顧問地建議下,采用層次架構(gòu)風(fēng)格。為了解決公司原通訊系統(tǒng)代碼冗余問題,我們進行了系統(tǒng)服務(wù)化,中間層不同地服務(wù)中心提供不同地業(yè)務(wù)服務(wù)。最終,我們將系統(tǒng)分為應(yīng)用層,服務(wù)層,數(shù)據(jù)層。應(yīng)用層負責(zé)具體業(yè)務(wù)和視圖展示,如網(wǎng)站首頁,app內(nèi)搜索輸入與結(jié)果展示等,其又分為視圖層與業(yè)務(wù)邏輯層。服務(wù)層負責(zé)為應(yīng)用層提供通用服務(wù)支持,如賬戶管理服務(wù),session管理服務(wù)等,其又細分為邏輯處理層與數(shù)據(jù)接口層。而數(shù)據(jù)層負責(zé)提供數(shù)據(jù)存儲訪問服務(wù),如數(shù)據(jù)庫服務(wù),緩存服務(wù),文件服務(wù),搜索服務(wù)等。下面,我將分層次詳細介紹三層層次體系結(jié)構(gòu)地設(shè)計過程。
首先是應(yīng)用層。在應(yīng)用層中,我們將系統(tǒng)根據(jù)應(yīng)用進行水平劃分,這有助于代碼管理與維護。我們將系統(tǒng)分為課件管理系統(tǒng),公眾直播系統(tǒng),學(xué)員測試系統(tǒng),課程管理系統(tǒng)等十余個子系統(tǒng),這里以課件管理系統(tǒng)為例。課件管理系統(tǒng)負責(zé)學(xué)員上課所用地課件,有課件編輯,課件預(yù)覽,課件交互,課件展示等多個功能模塊。功能模塊調(diào)用服務(wù)層地服務(wù)支撐,如課件交互需要調(diào)用服務(wù)層由RabbitMQ實現(xiàn)地AMQP通信服務(wù),通過該通信服務(wù),實現(xiàn)教師端與學(xué)生端地課件地同步,從而使得課件交互變得有趣,生動,具有互動性。另一方面為了區(qū)別教師端與學(xué)生端地交互權(quán)限,課件模塊還需要調(diào)用服務(wù)層地賬戶服務(wù),確定用戶身份,從而明確用戶在課件交互中地交互權(quán)限。與此同時,為了提高課件地可修改性,可互動性等,課件采用H5編寫。應(yīng)用層主要采用vue這一套用于構(gòu)建用戶界面的MVVM框架。其核心是提供對view和viewModel的雙向數(shù)據(jù)綁定,view和model之間并沒有直接的聯(lián)系,而是通過viewModel進行交互,view的變動,自動反應(yīng)在viewModel上,反之亦然,這樣就保證視圖和數(shù)據(jù)的一致性。此外還有動靜分離,動態(tài)資源靜態(tài)化等,這里不再贅述。
其次是服務(wù)層,服務(wù)層采用了SpringCloud Alibba服務(wù)框架等技術(shù)實現(xiàn)。隨著服務(wù)器規(guī)模的擴大,開發(fā)人員增多,每個應(yīng)用都變得復(fù)雜,臃腫,存在大量代碼重復(fù)。為解決這個問題,提出了兩個方案。一個是將應(yīng)用拆分得更小,確保每個應(yīng)用都保持在一個合適得大小。好處是設(shè)計能夠較快地完成,代碼也比較容易實現(xiàn)。這個方案存在一些問題,一方面數(shù)據(jù)庫的連接數(shù)壓力依舊存在,另一方面,代碼的冗余依舊存在。所以我們采用了第二個方案——服務(wù)化方案。服務(wù)化方案,即應(yīng)用層和數(shù)據(jù)層中增加一個服務(wù)層。首先從結(jié)構(gòu)上來看,系統(tǒng)結(jié)構(gòu)更為清晰明了,更為立體。穩(wěn)定性上來看,許多散落的代碼成為了通用服務(wù),并交付專門的團隊負責(zé)維護。處于對成本與技術(shù)成熟度的考慮,我們采用了阿里研發(fā)的SpringCloud Alibaba服務(wù)框架。SpringCloud Alibaba提供了微服務(wù)開發(fā)的一站式解決方案,其包含了開發(fā)分布式應(yīng)用微服務(wù)的必需組件,如:注冊中心組件Nacos,負載均衡組件Ribbon,遠程調(diào)用組件OpenFeign,網(wǎng)關(guān)組件Gateway,服務(wù)保護組件Sentinel,服務(wù)配置管理組件SpringCloudConfig,方便開發(fā)者通過SpringCloud編程模型輕松的開發(fā)分布式應(yīng)用服務(wù)。
最后是數(shù)據(jù)層,數(shù)據(jù)層涉及緩存,文件系統(tǒng),數(shù)據(jù)庫,數(shù)據(jù)通知服務(wù),搜索系統(tǒng)等模塊。由于用戶對數(shù)據(jù)的訪問具有集中性,所以我們基于SpringCache與Redis實現(xiàn)了緩存機制。由于系統(tǒng)的業(yè)務(wù)特性,數(shù)據(jù)庫往往是讀操作遠多于寫操作,所以我們對數(shù)據(jù)庫進行了讀寫分離。數(shù)據(jù)訪問方面,Java已經(jīng)有很多成熟技術(shù),大致分為三種。第一種是為用戶提供專有API,這種方法便于實現(xiàn)功能,但是通用性較差。第二種是通過JDBC方式訪問數(shù)據(jù)庫,數(shù)據(jù)層本身作為一個JDBC的實現(xiàn),也就是暴露出JDBC的接口給服務(wù)層。該方法成本很低,遷移成本也非常低,但是開發(fā)成本相對高一些。第三種方式是基于ORM或類ORM接口的方式。我們采用的就是這種方式,使用數(shù)據(jù)庫時使用ORM框架-Mybatis框架,再將框架包裝一層,用于實現(xiàn)數(shù)據(jù)層功能,對外暴露的仍然是Mybatis的接口。該方法開發(fā)高效,敏捷,成本較低,而且兼容性不錯。此外,我們采用ElasticSearch作為數(shù)據(jù)層搜索引擎,數(shù)據(jù)訪問層物理部署采用Proxy方式等。限于篇幅,不再贅述。
最終項目成功上線,正常運行了近一年半,收到了各方好評。尤其是H5課件的良好互動性,使得大量業(yè)界同行爭相模仿,改用H5制作課件。還有我們的服務(wù)化方案架構(gòu)被作為許多傳統(tǒng)互聯(lián)網(wǎng)企業(yè)系統(tǒng)重構(gòu)的經(jīng)典方案。在系統(tǒng)的架構(gòu)設(shè)計中,我們引入了層次架構(gòu)的設(shè)計思想,有效地降低了維護成本,提高了系統(tǒng)地開放性,可擴展性,可重用性以及可移植性。當然還是存在一些問題的。如H5課件采用Http協(xié)議,易被非法劫持,嵌入廣告,可以將協(xié)議修改為Https來解決。還有我們采用的負載均衡算法是加權(quán)輪詢算法,過于簡單,常常出現(xiàn)資源分配不合理的現(xiàn)象,可以將算法改為加權(quán)最小連接數(shù)算法來解決。這些都是我在今后的系統(tǒng)設(shè)計和開發(fā)中需要注意和改進的地方,也是日后我應(yīng)該努力的方向。
總結(jié)
以上是生活随笔為你收集整理的软考高级软件架构师论文——论软件架构风格的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Zotero——论文管理神器
 - 下一篇: 论文润色软件Stylewriter,wh