假設我們有一個SOA基礎結構,如下圖所示,並且每個服務都可以在不同的主機上運行(這對於兩個額外的網絡服務尤其有效)現場「和」支付系統「)。面向服務的體系結構和鬆散耦合與SQL連接
顯然,我們已經得到了一個數據(持久性)層。假設它通過EJB + JPA或類似的東西來實現。
如果我們想加入不同的服務,我看到至少有幾個選擇之間的數據(用戶界面):
-
我們想要做的高效
加入以RDBMS的水平,所以我們有一個包(即persistence.package),其中包含全部實體和會話正面(CRUD實現),它們以某種方式必須共享(如何?)或爲每個服務部署。也就是說,如果我改變順序模式中的某些東西,我必須重新部署這個包,在幾乎所有東西之間引入緊密耦合。而且數據庫必須是唯一的,共享的。爲了避免這些問題,我們爲每個不同的服務(即order.package)保留一個實體包,並讓服務通過一些協議(soap,rest,esb等)進行通信。所以我們可以在每臺主機上保存本地數據(無共享體系結構),我們不需要重新部署實體包。但是,這種方法是可怕的數據挖掘作爲必須搜索和返回多個服務之間的相關數據將非常低效的(因爲我們不能做SQL連接)
是否有更好的/標準方法查詢到上面指出的問題?
「這個[只]適用於應用程序的操作方面,因爲您只需要每個服務的幾個項目」。的確是這樣的問題:通常我們需要來自不同服務的大量數據,UI中的複雜查找和實時搜索。關於彙總報告我很少看到這種數據可以被認爲是不可變的情況(所以通常非規範化引入了同步問題)。 – gpilotino
那麼說阿蒙。我認爲最好的@gpilotino是閱讀關於DDD的一些信息;這是一本非常好的書:http://www.infoq.com/minibooks/domain-driven-design-quickly,並從那裏移動。 – Marco
沒有@gpilotino反規範化不會引入同步問題,不知道你從哪裏得到。使用不同的寫入和讀取模型確實會引入同步問題,但這與數據被非規範化無關。 – Marco