架構(5),可擴展

所有的可擴展性架構設計憔购,背后的基本思想都可以總結為一個字 : 拆宫峦!

拆,就是將原本大一統(tǒng)的系統(tǒng)拆分成多個規(guī)模小的部分玫鸟, 擴展時只修改其中一部分即可导绷, 無須整個系統(tǒng)到處都改, 通過這種方式來減少改動范圍屎飘, 降低改動風險 妥曲。

常見的拆分思路有如下三種:

??面向流程拆分:將整個業(yè)務流程拆分為幾個階段贾费,每個階段作為一部分。

??面向服務拆分:將系統(tǒng)提供的服務拆分檐盟, 每個服務作為一部分褂萧。

? 面向功能拆分:將系統(tǒng)提供的功能拆分, 每個功能作為一部分 葵萎。

從范圍上來說导犹, 流程 > 服務 > 功能。以學生管理系統(tǒng)為例羡忘,面向流程拆分:展示層→業(yè)務層→數(shù)據(jù)層→存儲層谎痢。面向服務拆分:將系統(tǒng)拆分為注冊、登錄卷雕、信息管理 节猿、 安全設置等服務。面向功能拆分:登錄服務包括手機號登錄爽蝴、身份證登錄沐批、郵箱登錄三個功能。

不同的拆分方式蝎亚,將得到不同的系統(tǒng)架構,典型的可擴展系統(tǒng)架構如下:

面向流程拆分:分層架構先馆。

面向服務拆分:SOA发框、 微服務。

面向功能拆分:微內核架構煤墙。

這幾個系統(tǒng)架構并不是非此即彼的梅惯,而是可 以在系統(tǒng)架構設計中進行組合使用的。 例如仿野,以學生管理系統(tǒng)為例铣减,我們最終可以這樣設計架構:

( 1) 整體系統(tǒng)采用面向服務拆分中的“微服務”架構,拆分為“注冊服務”“登錄服務” “信息管理服務”“安全服務”脚作,每個服務是一個獨立運行的子系統(tǒng) 葫哗。

(2 )其中的“注冊服務”子系統(tǒng)本身又是采用面向流程拆分的分層架構。

(3 )“登錄服務”子系統(tǒng)采用的是面向功能拆分的“微內核”架構 球涛。


微內核架構

也稱為插件化架構劣针,一種面向功能進行拆分的可擴展架構,通常用于實現(xiàn)基于產品的應用亿扁。

微內核有兩類組件:核心系統(tǒng)和插件模塊捺典。核心系統(tǒng)負責業(yè)務無關的通用功能,插件模塊負責實現(xiàn)具體的業(yè)務邏輯从祝。

核心系統(tǒng)功能比較穩(wěn)定襟己,不會因為業(yè)務功能擴展而不斷修改引谜,插件模塊可以根據(jù)業(yè)務功能的需要不斷地擴展。微內核架構通過隔離變化到插件的方式提供了靈活性擎浴、可擴展性煌张。

微內核的核心系統(tǒng)設計的關鍵技術:

? 插件管理,核心系統(tǒng)需要知道插件的信息退客,常見的實現(xiàn)方式插件注冊表機制骏融。

? 插件連接,插件如何連接到核心系統(tǒng)萌狂。核心系統(tǒng)必須制定插件和核心系統(tǒng)的連接規(guī)范档玻。

??插件通信,插件通信指插件間的通信茫藏,插件間是完全解耦的误趴,但業(yè)務中插件是需要進行通信的,這個通信必須通過核心系統(tǒng)务傲,因此核心系統(tǒng)需要提供插件通信機制凉当。

1.OSGi 架構

OSGi 是一個插件化的標準,現(xiàn)在我們談到 OSGi 售葡,如果 沒有特別說明看杭, 一般都是指 OSGi 的規(guī)范。

Eclipse 從 3.0 版本開始挟伙,拋棄了原來自己實現(xiàn)的插件化框架楼雹,改用了 OSGi 框架 。

Eclips巳采用的 OSGi 框架稱為 Equinox 尖阔, 類似的實現(xiàn)還有 Apache 的 Felix贮缅、 Spring 的 SpringDM 。

OSGi 框架的邏輯架構:

( 1 )模塊層介却,模塊層完成插件管理功能 谴供。插件被稱為 Bundle ,每個 Bundle是一個Java的JAR 文件齿坷。

(2 )生命周期層桂肌,生命周期層完成插件連接功能,生命周期層精確地定義了 bundle 生命周期的操作(安裝胃夏、更新轴或、啟動、停止仰禀、卸載〕照雁, Bundle 必須按照規(guī)范實現(xiàn)各個操作。

(3 )服務層,服務層完成插件通信的功能饺蚊。 OSGi 提供了一個服務注冊的功能萍诱,用于各個插件將自己能提 供的服務注冊到 OSGi 核心的服務注冊中心,如果某個服務想用其他服務污呼,則直接在服務注冊中心搜索可用服務就可以了 裕坊。

2.規(guī)則引擎架構

規(guī)則引擎中的規(guī)則就是微內核架構的插件,引擎就是微內核架構的內核燕酷,規(guī)則可以被引擎加載和執(zhí)行 籍凝。執(zhí)行引擎解析配置好的業(yè)務流,執(zhí)行其中的條件和規(guī)則苗缩。

??通過引入規(guī)則引擎饵蒂,業(yè)務邏輯實現(xiàn)與業(yè)務系統(tǒng)分離,可以在不改動業(yè)務系統(tǒng)的情況下擴展新的業(yè)務功能 酱讶。

??規(guī)則通過自然語言描述退盯,業(yè)務人員易于理解和操作。

??規(guī)則引擎系統(tǒng)一般提供可視化的規(guī)則定制泻肯、審批渊迁、查詢及管理,方便業(yè)務人員快速配置新的業(yè)務灶挟。

規(guī)則引擎的基本架構:

(1 )開發(fā)人員將業(yè)務功能分解提煉為多個規(guī)則琉朽,將規(guī)則保存在規(guī)則庫中 。

(2 )業(yè)務人員根據(jù)業(yè)務需要膏萧,通過將規(guī)則排列組合漓骚,配置成業(yè)務流程,保存在業(yè)務庫中榛泛。

(3 )規(guī)則引 擎執(zhí)行業(yè)務流程,實現(xiàn)業(yè)務功能 噩斟。

對照微內核架構的設計關鍵點曹锨,看規(guī)則引擎如何實現(xiàn):

?插件管理,在規(guī)則引擎架構中剃允,規(guī)則一般保存在規(guī)則庫中沛简,通常使用數(shù)據(jù)庫來存儲。

?插件連接斥废,規(guī)則引 擎的插件連接實現(xiàn)機制其實就是規(guī)則語言椒楣。業(yè)務人員需要基于規(guī)則語言來編寫規(guī)則文件,然后由規(guī)則引 擎加載執(zhí)行規(guī)則文件來 完成業(yè)務功能牡肉。

?插件通信捧灰,規(guī)則引擎的規(guī)則之間進行通信的方式就是數(shù)據(jù)流和事件流。規(guī)則只需要輸出數(shù)據(jù)或事件统锤,由引擎將數(shù)據(jù)或事件傳遞到下一個規(guī)則 毛俏。

目前最常用的規(guī)則引 擎是開源的 JBoss Drools 炭庙,采用 Java 語言編寫 , 基于 Rete 算法 煌寇。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末焕蹄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子阀溶,更是在濱河造成了極大的恐慌腻脏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件银锻,死亡現(xiàn)場離奇詭異永品,居然都是意外死亡,警方通過查閱死者的電腦和手機徒仓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門腐碱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掉弛,你說我怎么就攤上這事症见。” “怎么了殃饿?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵谋作,是天一觀的道長。 經常有香客問我乎芳,道長遵蚜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任奈惑,我火速辦了婚禮吭净,結果婚禮上,老公的妹妹穿的比我還像新娘肴甸。我一直安慰自己寂殉,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布原在。 她就那樣靜靜地躺著友扰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庶柿。 梳的紋絲不亂的頭發(fā)上村怪,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音浮庐,去河邊找鬼甚负。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的腊敲。 我是一名探鬼主播击喂,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碰辅!你這毒婦竟也來了懂昂?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤没宾,失蹤者是張志新(化名)和其女友劉穎凌彬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體循衰,經...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡铲敛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了会钝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伐蒋。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖迁酸,靈堂內的尸體忽然破棺而出先鱼,到底是詐尸還是另有隱情,我是刑警寧澤奸鬓,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布焙畔,位于F島的核電站,受9級特大地震影響串远,放射性物質發(fā)生泄漏宏多。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一澡罚、第九天 我趴在偏房一處隱蔽的房頂上張望伸但。 院中可真熱鬧,春花似錦留搔、人聲如沸砌烁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至避归,卻和暖如春荣月,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梳毙。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工哺窄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓萌业,卻偏偏與公主長得像坷襟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子生年,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內容

  • 微內核架構(Microkernel Architecture)婴程,也被稱為插件化架構(Plug-in Archite...
    d_quan閱讀 194評論 0 1
  • 最近再看阮一峰的一篇博客提到了一本書《Software Architecture Patterns》(PDF),寫...
    卓_然閱讀 7,770評論 0 22
  • 一、生命周期 一個事物一旦出生抱婉,就必然會長大档叔,變異,一旦長大蒸绩,就面臨著衰老衙四,接下來就是消亡了,這個過程就稱為一個事...
    ZyBlog閱讀 2,664評論 1 11
  • 第85篇 極客時間《從0開始學架構》課程筆記患亿。 定義 微內核架構(Microkernel Architecture...
    短暫瞬間閱讀 4,865評論 1 3
  • 包括分層架構传蹈、SOA 架構、微服務和微內核等 優(yōu)點:部署成本低步藕、改動成本惦界、低成本擴容,彈性伸縮漱抓,適應云環(huán)境 二表锻、可...
    hedgehog1112閱讀 799評論 0 0