2009-10-23 76 views
1

我正在將我的架構從耦合到SOA(WCF)鬆散耦合。 我有幾個相互溝通的服務。 您將如何同步服務之間的業務實例?業務對象WCF服務之間的同步

在這裏我看到兩種情況:

  1. 所有業務對象中只有一個服務的創建,讓我們把它MainService,它是誰擁有所有的對所做的更改訪問的唯一一個對象。該服務負責更新數據庫中的對象。對象的任何更新都會引發通知。其他服務註冊他們需要的事件並相應地收到通知。我稱之爲集中式的做法。很多服務之間的通話 -

    +作爲換做是
    儘快通知服務。
    -更多的耦合。

  2. 所有的服務只是加載他們需要的對象,並定期監視數據庫中是否有任何更改。我的想法是使用sql server 2008的更改跟蹤來檢測對對象所做的任何更改。

    +交通服務之間的通信可行的問題少。
    +較少耦合
    -由於定期監測導致的延遲。

那麼,你對此的回答是什麼? (如果你有3,4,等...這也將是不錯的)

回答

1

爲什麼您需要在服務之間同步業務實例?這聽起來像服務不夠鬆散耦合了。

+0

問題是某些服務需要以某種方式通知,以便知道哪些對象(業務實例)已被修改。 所以我有兩個解決方案。首先是當業務對象被修改時通知其他服務的組件。另一個是通過更改跟蹤來輪詢數據庫中的更改。 – Roubachof 2009-10-27 16:56:27

0

在第一個選項主要服務成爲故障和性能瓶頸的一個點。

在第二種情況下,您會冒很多不必要的信息輪詢風險。

第三sugestion是:

如果每個服務都有自己的數據庫,你可以使用數據庫複製數據從它創建服務移動,在其使用的其他服務。

編輯基於您的評論

。您可以嘗試使用數據庫後備存儲的企業庫緩存。這樣你就可以將數據存儲在內存中,但是如果數據庫中的值被更新,它會被更新。

+0

是的!你已經很好地描述了這兩種方法的缺點。 複製不會對我有幫助,我需要通知。 在一個「理想」的世界裏,我的WCF服務將訂閱一些數據庫事件,並相應地更新它們的業務對象... – Roubachof 2009-10-27 17:08:31

+0

Thx for this answer! 然而,高速緩存塊與我的解決方案n°2的做法一樣,不那麼聰明。 它定期刷新所有緩存(必須比較所有對象的版本)並相應地引發事件。礦井將定期輪詢緩存塊,但只會監視所需項目的更改跟蹤表中已更改的項目。 – Roubachof 2009-10-28 09:10:05