2008-12-15 71 views
4

我已經讓我們說2(但它們將會變得更多)完全去耦系統:系統A和系統B.解耦系統之間同步數據的最佳方式是什麼?

假設每個系統上的每條信息都有一個informationID。沒有什麼能夠阻止不同系統上的信息ID相同。在所有系統中唯一標識一條信息的是Source-informationID對。

假設我需要將一條信息從系統A導出到系統B.然後我想從系統B導出同一條信息並將其重新導入系統A,並且我需要能夠識別這是相同的信息。

是什麼在人們的經驗,這樣做的最佳方式?

這是我在想什麼做的事:

  1. 設置的 系統的消息隊列之間的消息總線。
  2. 設置端點爲每個系統 ,將監視更改和 產生纏繞到將被泵入 隊列 消息命令(例如 時的一條信息是 創建/刪除/更新)。
  3. 將職級到端點 相對於創建/刪除/更新,以便 命令沒有依靠 系統的名字,但僅在一般 層次 - 使每個系統 並不需要了解 他人。
  4. 分配treshold上 更新/刪除/建立命令到每個 端點使得不命令 會議treshold要求 將被過濾掉,而不是 處理

這將不會解決的事實是儘管如此,我仍然需要隨身攜帶originalSource + originalSourceID。

任何幫助表示讚賞。

+0

我想「相同」的信息可以改變,否則,你不需要重新導入它,你會嗎? – Svante 2008-12-15 21:28:09

+0

是的,它可以編輯創建到處刪除 - 但我需要跟蹤什麼是 – JohnIdol 2008-12-16 08:30:10

回答

2

這個問題已經通過EAI(企業應用集成)解決廠商,如TibcowebMethods(現爲軟件公司的一部分)。我以前從未使用過Tibco,但我已經使用webMethods來解決這些問題,所以我只關注webmethods。例如,在企業中,有關員工的數據可能位於Active Directory和PeopleSoft中。 webMethods可用於確保一個系統(應用程序)中的更改,添加和刪除將實時反映在另一個系統中。在其他一些組織中,有關員工的數據也可能位於Oracle或SQL Server數據庫中。再次,不是問題。像webMethods這樣的EAI工具可以與各種各樣的後端進行通信。 webMethods的並不侷限於單一來源和單一目標,而是因爲它有一個發佈 - 訂閱架構,從單一源數據可以流到誰訂閱特定信息感興趣的多個目標。保證交付和其他功能可以在這些產品中找到。回到員工示例,最終如果一個人做得對,在任何時候,企業中的所有系統和應用程序都可以包含關於員工的相同信息,而不會有任何差異。

因此,不是用C#或Java編程,而是做webMethods編程,它非常像4GL語言。我把它稱爲編程,因爲仍然涉及到邏輯,循環,如果其他的話,分支,變量,包等,但它是非常程序化的,即根本沒有OOP的概念。

這些EAI工具是爲有限的目的而構建的,其目的之一是輕鬆地同步企業中不同系統之間的數據。他們做得很好。

缺點是這些工具花了很多錢。在投資這些工具之前,公司往往有一個長期戰略。

1

除非有在系統設計防止這一些具體的限制,我建議分解出的共享/共享信息到一個單獨的DB其他兩個可以參考或僅在本地複製。然後,你不需要雙元件鍵也沒有任何複雜的ESB的玩意兒......

+0

這是大數據庫方法 - 這是我正在尋找的選項。 雖然它有一些缺點,但它很快就會變得麻煩。 – JohnIdol 2008-12-15 20:50:32

1

我們正在做的幾乎是A - > B - >你描述的東西。我們最初認爲試圖讓所有的A,B,C等都是同伴,但那太難了,所以我們現在指定一個爲主,其他人爲奴隸。從一個奴隸到另一個奴隸仍然很容易,但通過主人。

這些都是通過Web服務完成的 - 數據集從從站到主站,反之亦然,並且從站自行運行導出,並在主站上調用導入。然後它會通知主人執行導出,並自行運行導入。

因此,每個系統上的代碼都是相同的。只有奴隸回家了。

導出和導入過程告訴相關的業務對象做所有的上市和保存的東西,因爲他們已經知道如何實例化並堅持自己從DataRows。

這不是每秒多達數十次的事務處理架構,但它可以工作,並且可以實現近乎實時的同步。

我們沒有在源/編號的唯一性改善,順便說一下:)

+0

聽起來像一個很好的選擇 - 雖然我的主要擔心之一是源代碼唯一性! – JohnIdol 2008-12-15 21:11:55

4

正如有人已經寫了,這聽起來像一個典型的EAI問題。即使EAI工具過去非常昂貴,現在也有多種免費的開源工具可供選擇。以下提供的名單我最喜歡的

  1. OpenESB
  2. Mule
  3. Apache ServiceMix
  4. Apache Camel

我最喜歡的OpenESB,我最瞭解它,它有一個完整的IDE( Netbeans),大廠商的可選支持和huge amount of additional components。爲了簡單和有效,我喜歡Apache Camel,但你可以嘗試其中的一些,然後決定哪一個更適合你。那麼你甚至可以決定購買所有這些支持服務。

2

如果您將每條信息分配一個GUID,這將極大地簡化。如果您需要跟蹤源和其他ID,那很好,但信息總是隨其指定的GUID一起傳播。

當機器再次看到這條信息時,它會看到GUID並將其與現有數據相關聯,然後您可以決定要做什麼。但你已經知道它是同一個數據片 - 只是更好地旅行。

請記住,GUID是以這樣一種方式創建的,即每臺機器都將創建它自己的GUID,並且它們不會與在另一臺機器上創建的GUID衝突(針對所有實際意圖和目的)不同的時間。

這是GUID創建的一個更重要的原因。

-Adam

相關問題