福建富士通信息軟件有限公司 陳華光
基于微內(nèi)核架構(gòu)的業(yè)務(wù)基礎(chǔ)平臺(tái)設(shè)計(jì)
福建富士通信息軟件有限公司 陳華光
業(yè)務(wù)基礎(chǔ)平臺(tái)是一個(gè)以業(yè)務(wù)為導(dǎo)向的軟件架構(gòu)平臺(tái),是基礎(chǔ)架構(gòu)和業(yè)務(wù)應(yīng)用的一個(gè)中間產(chǎn)品,是應(yīng)用軟件開發(fā)的通用基礎(chǔ)框架。在企業(yè)的項(xiàng)目研發(fā)中,滿足不同的客戶需求是最基本的要求,利用平臺(tái)+插件的模式,將每個(gè)項(xiàng)目的的需求都可以做成單獨(dú)的插件,通過某種契約裝配及局部修改來迅速滿足客戶的需求,提高了軟件的重用性和可擴(kuò)展性,縮短產(chǎn)品和項(xiàng)目的研發(fā)周期。本文將會(huì)基于內(nèi)核及插件化的概念,介紹一種構(gòu)建插件化業(yè)務(wù)基礎(chǔ)平臺(tái)的思路。
微內(nèi)核;插件;基礎(chǔ)平臺(tái)
軟件企業(yè)研發(fā)的軟件產(chǎn)品,要想在市場上有足夠的競爭力,除了業(yè)務(wù)功能之外,還需要基于良好的技術(shù)架構(gòu),技術(shù)架構(gòu)往往是核心的競爭能力,關(guān)系到產(chǎn)品的長期發(fā)展和生存。業(yè)務(wù)基礎(chǔ)平臺(tái)是一個(gè)建立在良好技術(shù)架構(gòu)上的軟件業(yè)務(wù)平臺(tái),通過成熟的技術(shù)架構(gòu)及開發(fā)模式,為軟件企業(yè)打造理想的產(chǎn)品。本文提出一種在穩(wěn)定內(nèi)核的基礎(chǔ)上,通過插件來構(gòu)建可擴(kuò)展性的業(yè)務(wù)基礎(chǔ)平臺(tái)的方式。
軟件項(xiàng)目要實(shí)現(xiàn)能夠快速的復(fù)制實(shí)施,基于一個(gè)統(tǒng)一的平臺(tái)進(jìn)行擴(kuò)展的很好的思路。所以,平臺(tái)要具有良好的擴(kuò)展性,允許用戶或第三方參與進(jìn)來,進(jìn)行二次開發(fā),才能保持平臺(tái)的生命力。那么怎樣才能提高平臺(tái)的擴(kuò)展性,“微內(nèi)核+插件”是一個(gè)不錯(cuò)的選擇。
軟件架構(gòu)的本質(zhì)在于模塊的拆分,這些經(jīng)過拆分的模塊在實(shí)施時(shí)按照業(yè)務(wù)的需求進(jìn)行組裝,滿足應(yīng)用軟件的業(yè)務(wù)需求,最大限度的應(yīng)對(duì)軟件變更需要。微內(nèi)核架構(gòu)的拆分主要包含兩個(gè)部分:核心系統(tǒng)和插件模塊。
內(nèi)核是一個(gè)平臺(tái)的最小核心,它是平臺(tái)核心框架、公共類庫的最小集合,沒有任何業(yè)務(wù)邏輯,有一個(gè)負(fù)責(zé)插件組裝的管理引擎,能夠加載、卸載和運(yùn)行應(yīng)用所需的插件。內(nèi)核必須是健壯并穩(wěn)定的,用以保證平臺(tái)本身的可擴(kuò)展性、穩(wěn)定性及靈活性。
插件又分為技術(shù)插件和業(yè)務(wù)插件。每個(gè)業(yè)務(wù)插件均是是可獨(dú)立完成某個(gè)或一系列功能的模塊,是一個(gè)完整的業(yè)務(wù)描述,封裝了一個(gè)業(yè)務(wù)目標(biāo)所需的各種技術(shù),業(yè)務(wù)邏輯。插件之間存在依賴關(guān)系,但只能通過指定的接口進(jìn)行交互,從而實(shí)現(xiàn)插件間的松耦合性。通常插件由內(nèi)核的管理引擎進(jìn)行加載,它不能獨(dú)立運(yùn)行,需要在平臺(tái)內(nèi)核的支撐下才可以運(yùn)行。同時(shí),因?yàn)椴寮莫?dú)立性,因此也很適合分布式的服務(wù)架構(gòu)部署。
圖1 微內(nèi)核+插件的架構(gòu)模型
插件與平臺(tái)的交互是由內(nèi)核中的插件管理引擎提供的功能來實(shí)現(xiàn)的,主要是對(duì)插件的生命周期進(jìn)行管理,包括插件的注冊(cè),插件的運(yùn)行和插件的狀態(tài)變更。
插件注冊(cè):按照插件引擎提供的識(shí)別機(jī)制發(fā)現(xiàn)系統(tǒng)中的所有插件,加載到系統(tǒng)當(dāng)中。
插件的運(yùn)行:主要完成插件的業(yè)務(wù)功能,插件與插件、插件與平臺(tái)之間的交互。
插件的狀態(tài)變更:插件在運(yùn)行期間改變其在系統(tǒng)中的狀態(tài),主要包括禁用和激活、銷毀。
插件接口調(diào)用方式:在實(shí)際應(yīng)用中,隨著業(yè)務(wù)的積累,插件會(huì)越來越多。插件間的交互方式直接影響到平臺(tái)的性能。如何在解決業(yè)務(wù)松耦合的基礎(chǔ)上又不降低系統(tǒng)的整體性能,是平臺(tái)要考慮的一個(gè)很重要問題。因此需要提供多樣化的調(diào)用方式,以適應(yīng)不同的業(yè)務(wù)場景需要。
基于本地API的方式:業(yè)務(wù)插件與內(nèi)核,以及業(yè)務(wù)插件內(nèi)部的子模塊調(diào)用,均可以使用這種方式,以保證系統(tǒng)的事務(wù)處理和高效的性能。
WebService服務(wù):面向集成環(huán)境,特別是不同廠商之間的業(yè)務(wù)集成,通過基于SOAP的web服務(wù)調(diào)用,滿足不同環(huán)境下的插件集成需要。
RSET服務(wù):面向同一個(gè)平臺(tái),分布式部署,前后端分離的環(huán)境。不同的終端(PC、移動(dòng)端)通過輕量級(jí)的REST服務(wù)進(jìn)行調(diào)用,既簡化開發(fā),又保證了較好的性能。
基于微內(nèi)核架構(gòu)的業(yè)務(wù)基礎(chǔ)平臺(tái)主要包括兩個(gè)部分:運(yùn)行平臺(tái)和開發(fā)環(huán)境。
運(yùn)行平臺(tái)是一個(gè)包含基礎(chǔ)架構(gòu)的容器,包括關(guān)鍵性的、共用技術(shù)要素以及這些要素的組成框架和規(guī)則,以及數(shù)據(jù)中心、基礎(chǔ)資料、用戶和權(quán)限、自定義表單、工作流引擎等基本的業(yè)務(wù)基礎(chǔ)功能集合。
開發(fā)環(huán)境在開發(fā)階段使用,主要目的是為了提高開發(fā)效率。側(cè)重于插件的開發(fā):主要包括數(shù)據(jù)建模,自動(dòng)化的代碼生成工具,以及支持持續(xù)交付的部署環(huán)境。
圖2 業(yè)務(wù)基礎(chǔ)平臺(tái)整體架構(gòu)
隨著業(yè)務(wù)基礎(chǔ)平臺(tái)的不斷完善,提供了大量成熟的插件。當(dāng)用戶有實(shí)際的需求實(shí)現(xiàn)時(shí),首先在插件資產(chǎn)庫中尋求符合自身業(yè)務(wù)需求的插件,如果找到完全符合要求的插件,即可直接使用,如果部分符合需求,則可根據(jù)現(xiàn)有插件原型進(jìn)行擴(kuò)展開發(fā),為保證現(xiàn)有插件的穩(wěn)定性,擴(kuò)展后的插件需以不同版本的形式發(fā)布到資產(chǎn)庫中;如果沒有符合需求的,才需要進(jìn)行全新的插件開發(fā),開發(fā)完成后,也發(fā)布到公司的統(tǒng)一資產(chǎn)中,以便他人使用,形成一種良性的循環(huán)。
圖3 插件開發(fā)模式
這種模式可以方便的讓第三方團(tuán)隊(duì)加入到插件的研發(fā)當(dāng)中,不同的業(yè)務(wù)部門提供不同業(yè)務(wù)插件,在開發(fā)框架和基礎(chǔ)應(yīng)用的基礎(chǔ)上增加業(yè)務(wù)解決方案,最終會(huì)形成良好的產(chǎn)品生態(tài)環(huán)境。
本文簡單提出一種微內(nèi)核插件式的業(yè)務(wù)基礎(chǔ)平臺(tái)架構(gòu)方式,當(dāng)一個(gè)企業(yè)具備了這個(gè)平臺(tái),很多項(xiàng)目都可以基于統(tǒng)一的業(yè)務(wù)基礎(chǔ)平臺(tái)按照一致的基礎(chǔ)架構(gòu)、開發(fā)方式以及部署方式來協(xié)作完成,有助于企業(yè)形成可復(fù)用軟件的資產(chǎn)庫,不管是在開發(fā)規(guī)范、技術(shù)插件、業(yè)務(wù)解決方案等領(lǐng)域,都會(huì)給企業(yè)帶來較大的價(jià)值。當(dāng)積累的插件數(shù)量足夠時(shí),做新項(xiàng)目的時(shí)候只需要從資產(chǎn)庫中獲取相應(yīng)的插件進(jìn)行集成、以及定制化開發(fā),就能較快、較好完成項(xiàng)目的實(shí)施。