討論關于SOA注冊(Registry)的聲音還沒有退去,人們又更多地意識到SOA中另一個關鍵的組件存儲庫(Repository)。注冊和存儲庫之間究竟有什么區別呢?在ZapThink網站最近舉辦的一次關于注冊與存儲庫的網絡廣播中,大多數人認為注冊存放的是對事物的引用,而存儲庫中則存放事物本身。
很多人認為注冊保存元數據信息而存儲庫則用來存放數據。這個區別似乎不是很明顯,但是事實上情況要復雜得多。元數據就是關于數據的數據,對嗎?如果是這樣的話,那么文檔是什么呢?比如,現在有一個微軟的Word格式文檔,那么我們可以把它看作是數據本身對嗎?先別急,因為文檔是描述服務的,所以我們可以把它當作是元數據。然而,微軟又承諾,Microsoft Office系列文檔的基本格式是XML,那么XML是否應該被看作是Word文檔的元數據呢?其實,要區別數據和元數據的關鍵是它們之間的關系,很有可能一個人的數據是另一個人的元數據。而在現實生活中,某種數據極有可能剛開始扮演數據的角色,然后變更為元數據的角色,最后又回到數據的角色,不停的變換。
可以說,這就是為什么數據和元數據界限的模糊性是一個成熟的市場越來越趨向于提供集成的注冊/存儲庫解決方案的原因。
有很多的區別可以幫助人們找出數據和元數據的界限。一個很有效的方法是找出設計時間和運行時間的不同。注冊和存儲庫兩者都包含了設計時間和運行時間兩個特性。設計時間元數據絕大多數情況下專注于描述和發現,而運行時間元數據則專注于分發合約和策略信息。設計時間通常反映出人工時間,例如代碼的編寫,所以通常設計時間存儲庫使用一些類似CVS(協同版本系統)的標準。而運行時間的存儲庫則通常存儲消息并提供查詢、審核、登錄或一些歸檔的能力。
|
設計時間 |
運行時間 |
注冊 |
探索
描述 |
合約
策略
版本 |
存儲庫 |
代碼版本
文檔 |
可查詢式信息存儲
登錄
審核
|
很明顯,除此之外,在這方面的產品還會附帶很多其他的功能,例如管制、聯合、發布與提醒、安全性、驗證、報告、以及管理等。Infravio自從其第一個產品(被稱作X-Registry)開始就提供了對一個集成的注冊/存儲庫模型的支持。X-Registry使用了JAXR進行開發,JAXR是用于在標準注冊頂層開發應用程序的Java編程API,它包含了統一描述、發現和集成(UDDI)、ebXML RIM以及注冊信息模型。
Sun 微系統公司最近發布了一款輕量級的注冊(Registry)產品,該舉動證明這種解決方案的認可程度。這款產品是基于FreebXML代碼基礎的,并集成了注冊和存儲庫的功能,同時支持JAXR。
此外,Systinet公司最初的產品只基于UDDI注冊,現在也改變了策略。該公司代號為Blizzard的產品的下個版本將集成基于XQuery接口的運行時間存儲庫。
如此繁雜的產品和技術也許會給我們帶來一個疑問,和存儲庫相關的標準究竟是什么呢?
要回答這個問題,我們需要關注一下SOA生命周期以及相關的功能。在設計時間里,類似CVS這樣的標準用于存儲人工數據,例如代碼,這就是一種存儲庫。而當你進入SOA運行時間,你可能需要存儲信息數據。比如你希望獲得信息查詢的能力,那么你就需要使用XQuery作為邏輯接口。XQuery允許用戶對分布式XML數據進行查詢,整個過程看起來就像是對一個數據庫進行操作一樣。除此之外,如果你期望獲得更豐富的信息模型和類似可審核信息日志這樣的東西,那么你可能會需要ebXML注冊技術。
最后,人們越來越多地把注冊和存儲器作為SOA“平臺”的一個整合部分來看待了。而當你需要在注冊技術和存儲器之間做出選擇時,可以根據你所關注的內容是設計時間還是運行時間來考慮。只要你理解了在SOA服務生命周期中需要什么樣的功能,你就能夠做出一個更好的選擇。