论软件架构风格及应用(改)
摘要:
? ? ? ?本人于2018年初參與了某跨境電子商務(wù)公司的一個在線商城系統(tǒng)項目,該項目為公司進一步發(fā)展跨境電商業(yè)務(wù)和推廣品牌提供了全方位的軟件支撐。在該項目組中,我擔任系統(tǒng)架構(gòu)師,主要負責整體架構(gòu)設(shè)計與中間件的選型。本文以該在線商城系統(tǒng)為例,主要討論軟件架構(gòu)風格在該項目中的具體應(yīng)用。整個系統(tǒng)采用具有三層的層次式軟件架構(gòu)設(shè)計思想,分別是應(yīng)用層,服務(wù)層,數(shù)據(jù)層。在應(yīng)用層的設(shè)計中,業(yè)務(wù)邏輯層采用了spring框架,將整個業(yè)務(wù)系統(tǒng)劃分為十余個子系統(tǒng),視圖層采用了structs框架。服務(wù)層以 dubbo 服務(wù)框架為核心,數(shù)據(jù)層采用了 Mybatis 框架。層與層之間通過接口通信。整個系統(tǒng)開發(fā)工作歷時10個月。目前,該系統(tǒng)已經(jīng)穩(wěn)定運行近一年的時間,獲得用戶一致好評。
正文:
? ? ? ?當前我國跨境電子商務(wù)正處于高速發(fā)展階段。在發(fā)展初期,中小跨境電商企業(yè)通過入駐平臺能夠以較低的成本快速起步、推動商品銷售以及學習平臺的運營規(guī)范。但是從長遠角度看,企業(yè)只通過平臺進行經(jīng)營會受到多方面的限制。一方面平臺規(guī)則發(fā)生變化時,企業(yè)必須在平臺規(guī)則范圍內(nèi)做出改變。另一方面市場環(huán)境變幻莫測,單一運營方式無法獨立支撐企業(yè)生態(tài)。因此,某跨境電子商務(wù)公司為進一步發(fā)展跨境電商業(yè)務(wù)和推廣品牌,決定建立自營在線商城系統(tǒng)。本項目組全體成員共12人,我擔任系統(tǒng)架構(gòu)設(shè)計師,主要負責整體架構(gòu)設(shè)計,中間件選型和底層設(shè)計。該項目的架構(gòu)工作于當年4月完成,整個項目耗時10個月,于2018年11月完成。
? ? ? ?在架構(gòu)工作的開始階段,我們便意識到,架構(gòu)風格定義了用于描述系統(tǒng)的術(shù)語表和一組指導(dǎo)構(gòu)建系統(tǒng)的規(guī)則,是系統(tǒng)組織方式的慣用模式,可以為我們的項目提供架構(gòu)級的通用解決方案,這種架構(gòu)級的軟件重用可以極大提高我們的系統(tǒng)建設(shè)進程。軟件系統(tǒng)開發(fā)中常用的軟件架構(gòu)風格有數(shù)據(jù)流風格,調(diào)用/返回風格,獨立構(gòu)件風格,虛擬機風格,倉庫風格。數(shù)據(jù)流風格包括批處理序列與管道-過濾器,其每一步處理都是獨立,順序執(zhí)行的,適用于簡單的線性流程。調(diào)用/返回風格包括主程序/子程序風格,面向?qū)ο箫L格,層次結(jié)構(gòu)風格,其進一步降低系統(tǒng)耦合度,明確系統(tǒng)層次。獨立構(gòu)件風格包括進程通信,事件驅(qū)動系統(tǒng),其構(gòu)件特點為軟件重用提供了支持。虛擬機風格包括解釋器風格,基于規(guī)則的系統(tǒng)風格,其具有良好靈活性,可自定義規(guī)則。倉庫風格包括數(shù)據(jù)庫系統(tǒng)風格,超文本系統(tǒng)風格,黑板系統(tǒng)風格,其以數(shù)據(jù)為中心。除此之外,還有 dssa,soa 等架構(gòu)風格。
? ? ? ?在了解需求及架構(gòu)評估后,我們決定在公司技術(shù)顧問的建議下,采用層次架構(gòu)風格。為了解決公司原電商系統(tǒng)代碼冗余問題,我們進行了系統(tǒng)服務(wù)化,中間層不同的子系統(tǒng)提供不同的業(yè)務(wù)服務(wù)。最終,我們將系統(tǒng)分為應(yīng)用層,服務(wù)層,數(shù)據(jù)層。應(yīng)用層負責具體業(yè)務(wù)和視圖展示,如網(wǎng)站首頁,搜索輸入與結(jié)果展示等,其又分為視圖層與業(yè)務(wù)邏輯層。服務(wù)層負責為應(yīng)用層提供通用服務(wù)支持,如賬戶管理服務(wù),session管理服務(wù)等,其又細分為邏輯處理層與數(shù)據(jù)接口層。而數(shù)據(jù)層負責提供數(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)、物流系統(tǒng)、財務(wù)系統(tǒng)、即時通訊系統(tǒng)等十余個子系統(tǒng),這里以后臺管理系統(tǒng)為例。后臺管理系統(tǒng)作為系統(tǒng)管理員的操作平臺,通過商品管理、會員管理、新聞管理、系統(tǒng)管理等核心模塊對整個電商平臺系統(tǒng)進行流程化統(tǒng)一管理。核心模塊需要調(diào)用服務(wù)層的服務(wù)作為支撐,如會員管理模塊需要調(diào)用服務(wù)層的會員信息服務(wù)接口。在應(yīng)用層的設(shè)計中,視圖層采用structs這一基于J2EE平臺的MVC框架,主要通過Servlet與JSP技術(shù)實現(xiàn),業(yè)務(wù)邏輯層采用spring這一基于IoC和AOP技術(shù)的框架,面向接口開發(fā)。另還用到了vue框架配合ssh實現(xiàn)前后臺的分離和交互,使得前臺和后臺可并行開發(fā),提高開發(fā)效率。
? ? ? ?其次是服務(wù)層。隨著服務(wù)器規(guī)模的擴大,開發(fā)人員的增多,每個系統(tǒng)都變得復(fù)雜,存在大量的重復(fù)代碼。為解決這個問題,我們將代碼冗余的系統(tǒng)服務(wù)化,即系統(tǒng)之間增加一個服務(wù)層。首先從結(jié)構(gòu)上來看,系統(tǒng)結(jié)構(gòu)更為清晰,立體。穩(wěn)定性上來看,許多散落的代碼成為了通用服務(wù),并交付專門的團隊負責運維。出于對成本與技術(shù)成熟度的考慮,我們采用了阿里研發(fā)的dubbo服務(wù)框架。在服務(wù)框架實際操作時有兩個問題:服務(wù)框架自身的部署方式問題與實現(xiàn)服務(wù)框架所依賴的一些外部jar包與系統(tǒng)自身依賴的jar包之間的沖突。前者,我們通過Tomcat作為Web容器,而服務(wù)框架作為容器的一部分。后者,我們通過Java的ClassLoader將服務(wù)框架自身用的類與系統(tǒng)用的類進行隔離。
? ? ? ?最后是數(shù)據(jù)層。數(shù)據(jù)層涉及緩存,文件系統(tǒng),數(shù)據(jù)庫,搜索系統(tǒng)等模塊。由于用戶對數(shù)據(jù)的訪問具有集中性,所以我們基于SpringCache與Redis實現(xiàn)了緩存機制。由于系統(tǒng)的業(yè)務(wù)特性,數(shù)據(jù)庫往往是讀操作遠多于寫操作,所以我們對數(shù)據(jù)庫進行了讀寫分離。數(shù)據(jù)訪問方面,我們采用基于ORM或類ORM接口的方式,數(shù)據(jù)庫使用基于ORM的Mybatis框架,再將框架包裝一層,用于實現(xiàn)數(shù)據(jù)層功能,對外暴露的仍然是Mybatis的接口。該方法開發(fā)高效,敏捷,成本較低,而且兼容性不錯。此外,我們采用solr作為數(shù)據(jù)層搜索引擎,數(shù)據(jù)訪問層物理部署采用Proxy方式等。
? ? ? ?最終項目成功上線,正常運行了近一年的時間,獲得用戶一致好評。但是在系統(tǒng)運行過程中,我也發(fā)現(xiàn)了這種架構(gòu)存在的一些不足。首先是層次架構(gòu)的多層調(diào)用降低了系統(tǒng)的性能,可以在層與層之間設(shè)立緩存機制來解決。還有我們采用的負載均衡算法是加權(quán)輪轉(zhuǎn)算法,過于簡單,常常出現(xiàn)資源分配不合理的現(xiàn)象,可以將算法改為加權(quán)最小連接數(shù)算法來解決。這些都是我在今后的系統(tǒng)設(shè)計和開發(fā)中需要注意與改進的地方,也警示我在以后的工作實踐中需要不斷地學習,提高自身素質(zhì)和能力。
總結(jié)
以上是生活随笔為你收集整理的论软件架构风格及应用(改)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tp6
- 下一篇: 机器学习-有监督学习-分类算法:k-近邻