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