幾年前有個(gè)客戶請(qǐng)我?guī)椭麄兏玫氖褂盟麄兊募蓪?integration layer)。自那以后我和我的團(tuán)隊(duì)一直在開發(fā)對(duì)其支持的框架。這是關(guān)于我們框架開發(fā)系列博客的第四篇,討論它所提供的特性。上一次聲明的,關(guān)于創(chuàng)建blocks,暫時(shí)延期。
目前為止,我已經(jīng)討論了關(guān)于開發(fā)活動(dòng)的目標(biāo)與挑戰(zhàn),但現(xiàn)在我想更多的關(guān)注于框架本身,以及它給那些使用它的程序帶來了什么。
一旦一個(gè)參與方(可能是服務(wù)消費(fèi)者或者服務(wù)提供方)連接到我們的框架,它能直接從我們提供的豐富的開箱即用的函數(shù)中獲得好處。這些“通用特性”正是我們期待從一個(gè)(邏輯的)ESB獲得的東西,它們部分的基于擴(kuò)展的企業(yè)服務(wù)總線模式。
由于我們的項(xiàng)目是敏捷驅(qū)動(dòng)的,特性僅在它們被需要的時(shí)候開發(fā)。有時(shí)候,經(jīng)過設(shè)計(jì)和開發(fā)階段,我們發(fā)現(xiàn)了一個(gè)更好的處理方法,有時(shí)候猜想到一個(gè)特性可能會(huì)發(fā)生的問題,會(huì)被以一種完全不同的,超越我們處理范圍的方法解決。但最終我們成功的實(shí)現(xiàn)了大約20個(gè)特性,可以粗略的被分為五種類型:路由,健壯性,安全性,轉(zhuǎn)換和數(shù)據(jù)存儲(chǔ)。
路由
我們一個(gè)主要的目標(biāo)是將消息從A傳送到B,但不需要A知道現(xiàn)在B存在于哪里。為了做到這一點(diǎn),我們對(duì)WEB服務(wù)地址(WS-Addressing)標(biāo)準(zhǔn)做了擴(kuò)展使用。我們框架中的一個(gè)組件,路由服務(wù),使用消息頭部的信息去決定下一跳(hop)是什么(在這個(gè)案例中hop是另一個(gè)框架組件)。大多數(shù)時(shí)間里,一個(gè)消息在它進(jìn)入集成層的時(shí)候被交付到后方,我們稱之為簡(jiǎn)單路由。
然而,一旦需要執(zhí)行一些特殊的動(dòng)作時(shí)(比如像數(shù)據(jù)模型轉(zhuǎn)換),消息會(huì)繞道到達(dá)某個(gè)不與外部世界聯(lián)系的框架組件。我們將其歸類為中間服務(wù),它們對(duì)周圍情況不知——這意味著它們沒有任何線索,任何關(guān)于它們被調(diào)用的這個(gè)上下文的線索。消息繼續(xù)它的路徑所必須用到的信息,同樣也是地址頭部的一部分,這使之成為高級(jí)路由。
一種特殊類型的高級(jí)路由是分發(fā),它通過以最基礎(chǔ)的形式使用WEB服務(wù)通知(WS-Notification), 使得將一個(gè)消息在同一時(shí)間發(fā)送給數(shù)個(gè)訂閱者成為可能。最后優(yōu)先級(jí)路由是一個(gè)確保一個(gè)消息在其它消息之前的特性,這么說吧——當(dāng)處理一個(gè)柜臺(tái)邊客戶等待的服務(wù),同時(shí)又有大量的負(fù)載正在處理,這個(gè)時(shí)候它是非常有用的。
健壯性
在投遞消息的時(shí)候沒有錯(cuò)誤,或者至少能在它發(fā)生的時(shí)候處理那個(gè)情況(異常管理),顯然這是極其重要的。當(dāng)我們接收到一個(gè)消息時(shí)的第一件事情就是檢查它是否符合我們實(shí)施的工業(yè)的和設(shè)計(jì)的標(biāo)準(zhǔn)(技術(shù)驗(yàn)證)。有時(shí)候消費(fèi)者/發(fā)布者不想等待(函數(shù)式的)回答,但仍然想獲得消息是否在技術(shù)上有效的信息,那種情形下我們給他發(fā)送一個(gè)說明那一點(diǎn)的響應(yīng)(技術(shù)驗(yàn)收)。
我們有兩個(gè)特性處理最大負(fù)載:限流保證了集成層只接收它可以處理的那些,而緩存保證了我們不會(huì)淹沒于連接的應(yīng)用。與第二個(gè)類似的是延遲交付,用在我們預(yù)先知道后臺(tái)不可及的時(shí)候。
但目前這些類型特性中最重要的是擔(dān)保交付。我們?cè)囼?yàn)了雙向的變化(使用服務(wù)可靠消息傳遞WS-RM)但最終選定了單向的實(shí)現(xiàn),這意味著在我們發(fā)送消息之前我們首先是存儲(chǔ)它,如果我們收到一個(gè)HTTP錯(cuò)誤代碼我們會(huì)再次發(fā)送它。
最后(實(shí)際上至少因?yàn)樗茈y被使用)具有對(duì)發(fā)送消息的句法校驗(yàn)是可能的。但正如我們喜歡遵循的波斯托定律(Postel’s law也稱作健壯性法則),我們感到消費(fèi)者有責(zé)任確保消息首先是有效的(你能夠想象從我們的觀點(diǎn)來說這需要一些推銷)。唯一的例外就是載荷被框架改變的時(shí)候。
安全
每個(gè)想要連接到集成層的應(yīng)用需要聲明自己,通過使用WEB服務(wù)安全用戶名令牌(WS-Security UsernameToken) (身份認(rèn)證)的方式。 對(duì)我們暴露出來的大多數(shù)服務(wù)那已經(jīng)足夠,在極少數(shù)案例中,這種應(yīng)用必須具有明確的許可(授權(quán))。
不是說內(nèi)部使用(只有在我們收到某個(gè)外部客戶的請(qǐng)求時(shí))就是可信的,我們要求消息頭部和載荷的某個(gè)部分具有署名。
轉(zhuǎn)換
假設(shè)不是所有的應(yīng)用都連接到框架'說同樣的語言'(如以前的博客中所提到的),明顯有數(shù)據(jù)模型轉(zhuǎn)換的需求——我們最常被使用的特性之一。一個(gè)不太普通的是分裂特性,它使得一個(gè)大的消息被劃分成為一些小的部分成為可能。
數(shù)據(jù)存儲(chǔ)
最后一些特性對(duì)已經(jīng)提到的那些更具有支持的作用。我們提供使用于測(cè)試和bug查找會(huì)話中的日志功能,以及在需要存儲(chǔ)整個(gè)消息時(shí)的持久化功能。后者經(jīng)常與再發(fā)送結(jié)合起來使用(這對(duì)上面描述的有保證的交付特性而言是必須的),但也在審計(jì)的需求中使用。
結(jié)論
這些特性的大多數(shù)從我們框架的第一個(gè)版本就一直伴隨著,并且經(jīng)歷時(shí)間考驗(yàn)證明了它們的通用性質(zhì)。在一些案例中我們不得不做一些改動(dòng),即使現(xiàn)在也有一兩個(gè)特性我們可能在未來用不同的方式實(shí)現(xiàn)。還有一系列的額外的特性,但已經(jīng)非常少,這被我看作是在這里我們已經(jīng)有了完美結(jié)束的標(biāo)記。
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:企業(yè)應(yīng)如何開發(fā)一個(gè)基于SOA的集成框架
本文網(wǎng)址:http://www.ezxoed.cn/html/support/1112189111.html