接口定義和SOA規範

不在這裏重複SOA的定義。SOA從設計思想的角度強調將系統劃分爲高可複用性的服務;從技術的角度,解決的是異構接口的互通互聯問題。不同技術實現的服務有着不同的接口,怎樣方便地在一個服務內部調用另一個服務的接口,或者調用已有多個服務的接口實現一個新的服務? 一個自然的想法就是定義一個統一的接口規範,新開發服務的接口遵循這個接口標準,或者服務開發運行平臺提供新接口到已有各種接口的轉換。事實上,SOA就提供了這些功能,SOA的若干規範:SDO (Service Data Object), SCA (Service Component Architecture),BPEL (Business Process Execution Language) 都包含了接口定義的內容。
在本文中所說的接口,並不特指程序API,這裏的接口獨立於編程語言和操作系統。我們把一個服務系統和外界的數據交互定義爲服務的接口,那麼完整的接口定義要包含哪些內容呢?

(1) 數據。首先需要對在一個服務系統和外界之間交互的數據做定義。
[table]
|內容|描述|
|數據類型定義|每個編程語言都有自己的數據類型定義,XML Schema也有數據類型定義。數據類型包括基本類型和複雜類型。|
|數據格式|指在內存,文件或者線上的各種數據類型的數據如何排列存放,特別的是複雜類型的數據如何存放。C語言中的Struct對象在內存裏有其自己的數據格式,Java語言的Object對象在內存裏按即定的數據格式存放,XML是一個典型的使用字符描述複雜類型數據的數據格式規範。很多C/S系統定義報文格式,在線上收發二進制流。8583即是銀行也常用的一種報文格式。|
|數據內容|數據內容一般劃分爲技術和業務兩個層次。技術層面的內容一般是在服務和外界之間交互的數據報文頭信息;業務層面的內容就是數據報文體信息。在業務層面,現在有越來越多的行業業務數據內容規範,例如電子商務的ebXML, 金融交易的FIX協議等。|
[/table]

(2)交互。數據有了,還需要定義服務和外界交互的方式。數據在兩個系統之間交互收發,有多種的模式和規範。
[table]
|內容|描述|
|接口交互方式|a.請求應答方式。即外界客戶端向服務系統先發送一條數據作爲請求,服務給外界客戶端返回另一條數據作爲應答。b.推送方式。即服務向客戶端先發送數據,沒有反向的數據。|
|請求應答數據內容|請求即輸入數據的內容定義,應答即輸出數據的內容定義。輸出包括正常和異常輸出。|
|有/無狀態接口調用|接口調用是有狀態接口,還是無狀態接口。使用同樣的輸入多次調用同一個接口,輸出不變的是無狀態接口,否則是有狀態接口。|
|同步,異步方式接口調用|對於客戶端來說,同步方式指調用一個服務接口即可得到結果;異步方式調用可細分爲兩種實現方式:a. 客戶端先調用服務的一個接口,若干時間後再調用服務的另一個接口獲取前一個接口調用的結果數據;b. 客戶端先調用服務的一個接口,服務執行完處理後,調用客戶端提供的一個接口把結果數據發給客戶端。|
|接口調用規範|接口調用的會話(Session)機制,多個接口之間的調用順序和規則。包括同一個服務的多個接口之間的調用規則,多個服務的多個接口之間的調用規則。例如Web Service的動態綁定調用技術就是按一定的規則調用UDDI服務, 和SOAP服務的多個接口。|
|通信方式和通信協議|一般來說客戶端和服務不在一個節點上,服務接口是遠程接口,需要基於一定的通信方式和通信協議。例如TCP, HTTP,SOAP,MQ消息中間件等。|
[/table]

(3)其他
[table]
|內容|描述|
|接口調用安全策略|客戶端和服務之間彼此需要授權和認證。|
|事務|多個服務接口調用需要包含在一個事務內,具備執行原子性。|
|日誌|接口調用操作需要記錄在日誌中,以便管理和監控服務。|
[/table]

下面我們來看,SCA,SDO,BPEL三個SOA領域的規範做了哪些接口內容的定義工作。
[table]
|內容|描述|
|數據類型定義|SDO規範中的SDO Data Type定義了基本類型和Object類型|
|數據格式|SDO沒有固定的數據格式,但是提供統一的數據訪問接口。SDO服務支持各種格式的數據對象。|
|數據內容|SCA服務定義中的Interface定義了服務和外界交互的業務層面數據內容。SCA Interface目前支持Java Interface和WSDL兩種描述方式。|
|接口交互方式|服務接口都是請求應答方式。|
|請求應答數據內容|SCA Interface定義了服務請求應答的數據內容。|
|有/無狀態接口調用|SCA Conversational Interface定義了有狀態的接口。|
|同步,異步方式接口調用|SCA Bidirectional Interface 定義了異步調用方式的接口。BPEL 中的partnerLinkType 也可以描述異步調用服務接口和與之相對應的Callback接口。|
|接口調用規範|SCA Conversational Interface定義了多個接口之間的調用順序和規範|
|通信方式和通信協議|SCA Binding定義了服務接口的通信方式和通信協議。通信協議可以理解爲技術層面的數據內容。SCA支持多種通信方式,如Web service binding, JMS binding 等。|
|接口調用安全策略|SCA Policy 中的Security定義了接口訪問安全策略。|
|事務|SCA Policy 中的Transactionality 定義了接口調用的事務模式|
|日誌|日誌功能由服務平臺內部實現|
[/table]
從上面可以看到,三個規範都涉及到給服務定義統一的接口規範,有了統一的接口規範,就可以方便地調用不同技術實現的服務,這就是SOA解決異構接口互聯互通的中心指導思想。從技術角度上講,這也是SOA最主要的工作。
在做SOA項目實施的時候,經常有客戶問我SOA和EAI(Enterprise Application Integration)的聯繫和區別。如果不考慮SOA在設計思想上倡導基於分佈的可複用的服務集合來構建企業信息化系統,單從技術的角度,SOA與EAI在提供統一的數據和接口定義,連接已有異構系統方面,他們的設計思想和實現方式是很相似的,甚至可以說是相同的。只是SOA使用開放的規範標準,EAI廠商都是使用自己私有的標準。 於是乎我給SOA賦予一個新的名稱:企業接口集成(Enterprise Interface Integration), 或者是企業組件接口集成(Enterprise Component Interface Integration)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章