媒體人和CIO能看懂的SOA

面向服務的組件架構。這就是字面直譯。這恰恰是理解SOA最好的方法。

首先是

1 組件。組件是什麼?這個概念大家得知道。權威的OMG定義過。但不好理解,我給通俗一點,但決不個人演繹。接口標準化、契約化,功能模塊化、封裝化,可被組裝組合重複使用。估計這個解釋和大家心中想的差不多。(不過不像大家想的那樣是屬性、方法、事件)

2 面向服務。啥是面向服務?我們先說說現實中我們常見的服務。就拿最容易理解的餐飲服務員來說,點菜、上菜、換碟、拿餐巾紙、結賬這是他提供的服務。咱們吃飯的時候從來不會注意他們是怎麼提供這些服務的。這就是現實中的服務。而在軟件中的服務,也是一樣,有人提供了若干個服務,我們只想調用完成我們的事,而不想知道他們內部怎麼做的。也就是說,暴露給我們的接口方法,就是我們要做的事。其他的,不要暴露給作爲用戶的我們。所以在SOA一般說服務說是粗粒度的。這就是粗粒度。很多人不明白粗粒度到底要多粗,大家可以看看taobao的開放平臺和豆瓣的Open API,比如taobao.items.get,就是把取商品類目的函數,把參數傳入,出來就是我們想要的結果。淘寶是怎麼取到的,那是淘寶的事。

3 架構。要的是架構,橫豎立體搭建的。而不是一盤散沙。要有點、線、面、層。如果組件是一個個的點,那麼如何安置這些組件的生死、緩衝、併發、安全,如何讓組件之間通訊,通訊的接口如何定義,通訊的協議是如何的,通訊的數據結構是怎樣的,數據信息是如何保證不丟失的,數據信息是如何保證在各個組件之間流轉到指定的組件?這就是架構。

我說了這麼多,把SOA的關鍵都講了。但這都是思想層面。首先你的思想對不對。如果你的設計是符合這個思想的,你就是SOA架構。

這樣你就會說,過去我們做的EJB、COM+都是面向服務的組件啊,也有架構啊。我們十多年前就做了SOA了。

對,從設計思想來說,SOA一點都不新。

新的是從技術方面。

過去我們有EJB、COM+、CORBA三種主流的組件體系。然後我們要互操作,我們要跨互聯網,這三種架構都有缺陷了。

於是讓這個基於HTTP+XML本質的webservice來達到跨互聯網互操作。

是的,有人理解webservice就等於SOA。

但是,組件與組件之間如何信息通訊?有人說我自己定義好接口,我自己定義好結構,一方傳出,一方接收處理,就OK了。

但我要說的是異構系統的互操作,你剛纔說的都是自己內部怎麼做怎麼做。

如果是異構系統異構應用去互操作,必須要遵守,你自己自定義一套規則和結構算什麼,你老是自己玩,誰還和你玩?想大家一起玩,一起獲利,就要有一套標準來遵守。這套標準,一般都是國際大巨頭領導的協會組織制定的,只有他們有話語權。你自己制定一個算什麼?

所以一整套規則都出來了。組件如何做組件具備什麼特徵才符合標準的組件容器管理,組件之間如何數據結構和消息通信才能互操作,這都是規則。這個規則就是架構。於是,在架構之下就有了企業服務總線來管理組件,有組件之間通信的數據結構(組件數據對象)和應用通信協議(這不是HTTP協議,也比SOAP這類應用協議還要高,是組件之間應用通信的協議)。

有了這些技術基礎,但是大家搭建應用,還是很迷惑,於是,應用如何搭建可以符合組件特性,可以符合SOA數據特性,可以符合SOA流程特性。應該有個可以參考的完備規範讓大家學習和借鑑。於是,應用架構設計規範又有出臺。

我們總是在搭建應用軟件的架構,這樣的架構對不對,這樣的架構完備不完備,我們過去只是靠經驗來定義,現在我們終於有了一個規範。但這個規範參考可能太面向國外思路,所以不符合,但畢竟有我們思考的一方面。

在醫療行業,有HL7標準。是國外製定的。過去也很鄙夷不符合中國市場。但是仔細閱讀後發現人家設計的規範與完備非常值得參考,用人家這套標準規範來設計,比自己用多年經驗摸索設計的整齊的多。這纔像架構,這纔像系統。

不說了。爭論誰是SOA,誰不是SOA並沒有意義。因爲每個開放標準定義的實際者都是國際巨頭廠商,他們都會代表自己的利益而去爭取一席之地。而我們自己還無法提出自己的標準,我們用的標準我們用的產品都是人家制定和開發好的,我們只是做之上的應用而已,所以人家爲了自己利益而做的規範,這就是規範。IBM說IBM是SOA,微軟說我纔是SOA。對,這就是每個廠商的利益。你跟隨誰的利益都OK。

但,我們做SOA不是爲了跟隨他們的利益。他們賺錢又不會給我們分一半。所以我們是要拿他們塞給我們的工具和技術來解決我們的問題。

我們要拿SOA解決什麼問題?

如果我們要組件化(我們爲什麼要組件化,大家明白不?爲什麼要封裝大家明白不,爲什麼要接口大家明白不?)

如果我們要跨互聯網異構應用異構系統互操作,我們還希望這些應用都在一個盤中下這些不同的棋子,

那麼,那麼,我們需要SOA。

其實,簡單來說,SOA可以等於webservice接口的組件。這是一個媒體人,一個技術開發人能直白理解的,這就夠了,太多思想觀點反而混淆更多。對,對,SOA=webservice+粗粒度直接面向調用應用的接口+契約化的接口interface+可複用封裝的單元。

我們尋找適合解決我們自己的問題的技術就OK了。不適合自己就別用。何必呢?

 

本文來自CSDN博客,出處:http://blog.csdn.net/david_lv/archive/2009/11/09/4791755.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章