理解SOA概念的三個比喻

2021-04-17 11:44:35 字數 1869 閱讀 9533

從我第一次聽說soa到現在有幾年的時間了,其間和各種各樣的人士有了各式各樣的討論,越來越發覺這不是個可以用定義來說得明白的概念,以前軟體行業裡還沒有個詞容易引起如此多的非議與爭論,我有時覺得soa很想禪宗裡講的,「說是一物即不中」。其中最難的,就是把這樣乙個抽象的概念說給沒有技術背景的人去聽,建立概念唯一的辦法就是利用比喻。在我聽說過的幾十個關於soa的比喻之中,有幾個比喻得到更多人的認同。那些想把這個概念說給業務人員和管理者的技術人員,不要再冒險了,用這幾個比喻試一下。

樂高玩具—作為一種設計哲學的soa

這是最早的乙個成功的比喻,傳統的應用好比是普通的玩具,不可拆卸和拼接。基於soa的應用都是由更小的服務元件組成的,如同樂高玩具的模組。用樂高玩具可以搭建各種不同的形狀,好比可以實現不同的應用,樂高玩具的模組式基於標準的,而且可以重用。這個比喻的好處是很快給非技術人員建立乙個頭腦中的形象,在乙個研討會裡面,組織者發了一些樂高玩具的模組,讓客戶們自己做出一些東西來。由此很快讓聽眾明白,他們就是在做和軟體開發類似的事情。

也許有人會說,soa那麼複雜,用小孩玩具來比喻是否太淺顯了,這時,進入深層次**的機會來了。看上去,樂高玩具這麼簡單,似乎沒什麼深究的。這背後隱含了一種設計哲學,設計樂高玩具的團隊都是一群擁有博士的設計專家,他們必須解決的乙個矛盾是,如何把標準,松耦合,模組的功能,力學等要素在設計和規劃的時候統統解決,留給使用者的,只有玩樂的樂趣。乙個有趣的事實是,樂高玩具這樣乙個看上去如此簡單的東西一直沒有模仿者。軟體工程師都可以用十分鐘說他知道soa是怎樣一會事了,就像所有人看到樂高玩具時一樣。然而,當乙個人用設計者而不會玩家的角度來理解樂高和soa類似的設計哲學時就會發現,兩者的服務物件其實正是不需要關心技術的人,而且,他們都是為技術買單的人。工程師的位置,到底是個玩家,還是設計者?作為玩家,工程師懂得似乎多了一點,做為設計者,他還有太多東西要學,就像要成為樂高玩具的設計者一樣。

電視與電腦—乙個基於標準的結構

修電視比修電腦難多了,雖然電腦比電視複雜多了。因為電腦有乙個基於標準的結構,匯流排結構,即插即用的契約標準,這些it界的流行語塑造了pc行業。soa也擁有幾個標準的參考結構,匯流排,松耦合這些理念和pc行業的基本理念完全相同。這個比喻的好處是,電腦是乙個更為具體的例子。這個例子隱含了用比喻說技術的幾個規則。第一,被比喻的事物之間一定要有同構,這是比喻的乙個邏輯前提,就是說在基本結構上,兩者的設計理念是近似的。第二,用於比喻的事物最好是人們喜聞樂見的,通俗的,第三,至少可以舉出幾點證明兩者的相似之處。

城市規劃—soa的實施需要一種循序漸進的模式

技術總是跳躍的,應用系統永遠是中庸的。應用在這個例子裡面被比喻為普通的建築物,而作為企業架構的soa實施則被比喻成為一座城市。城市的演進必然是循序漸進的,這比喻了soa的實施是乙個旅程,比如,北京的交通總是難以解決擁堵的問題,幾個環路的辦法實際上等同於eai的辦法,結果是匯流排擁塞。如果把北京城區的許多大院打散成為更小的社群,類似於將應用的顆粒度變小,象舊金山那樣,很多地方至少不會堵死.然而這個改造需要循序漸進的實施方式,想想為了奧運會北京的地鐵花了多少時間來與地下的管道打交道就知道,企業應用架構的改造有多複雜。

正面的例子的是麗江古城,這座規劃於八百年前的城市,現在仍然生機勃勃,因此被稱為「活的古城」。用一條河流分成不同水道流經整個古城,每家門前都有流水聲,可以用水洗衣,做飯,所有的街道按照經絡學說布置,所有的街區都成為在同一基礎設施上的服務,最有意思的是,作為市場的四方街,採用了自動水沖洗設施。整個的地勢東高西低,四方街是中間高,邊緣低,因此每天人們用擋板把水累積高時,水就可以自動衝擊街面了。這種設計,據說,阿姆斯特丹也有乙個,只是不知道那乙個更早。我們可以說,麗江古城的設計是面向服務的,水就是他們的公共服務。他們還通過一些規則來,規範水的使用,比如在以前,清晨的水在同一時間,所有人可以用來做飯,下午的某個時間,所有人都可以洗衣服。soa裡面講的,服務契約,管控規則,基礎設施優化都可以看到。

三個重要概念的區分

計算機只能理解機器語言,不能理解高階語言,因此需要將高階語言轉化為計算機語言。依據語言轉化方式的不同,區分出了編譯型語言和解釋型語言。編譯型語言,指的是一次性的將高階語言轉化為計算機語言,此類程式執行前會將源 編譯為機器語言的檔案,如exe格式的檔案。如要執行,直接執行exe檔案即可,不需要再次編譯...

指標與引用的三個概念

1.對常量的引用 const int ci 1024 const int r ci r 42 錯誤,r 是對常量的引用 int r ci 錯誤,試圖讓乙個非常量引用指向乙個常量物件 注 1 引用並非物件,它只是為乙個已經存在的物件所起的另乙個名字。2 引用只能繫結在物件上,而不能與字面值或某個表示式...

渲染管線的三個概念階段

渲染流水線可以分為三個概念性階段 應用階段,幾何階段,光柵化階段。遊戲場景中的物體渲染都是基於可程式設計流水線實現的,其實就是把繪製的3d物體通過可程式設計流水線繪製在2d的螢幕上的過程。什麼是渲染 rendering 渲染簡單的理解可能可以是這樣 就是將三維物體或三維場景的描述轉化為一幅二維影象,...