之前,我開始與我的問題,讓我簡要介紹一下該架構,我們需要使用:通信和高性能高可用性的Java EE數據的同步分佈式應用
我們將有一箇中央應用實例。
- 這個應用程序實例部署與業務管理Web應用 - 它是用來改變「內部」數據(我會談談這一刻)
- 這個應用程序實例實際上是服務器 集羣
我們將有n個(n> 0 & &ñ< = 3000)本地應用程序實例 - 1對每個 「位置」
-
種
- 這種情況下,作爲數據處理器用於其位置
- 這種情況下不使用全套中央數據 - 僅子集限於所需要的數據處理
- 每個位置可以(並且可以期待它)脫機時的長時間(假設2周頂部)
每個位置都會有幾百個「客戶」(讓我們說多達300) - 之外的應用,將處理提供數據
現在將所有內容放在一起: 如果位置在線,則客戶端可能會與Local實例或Central進行通話。但是,如果位置處於脫機狀態,則中央不可用,客戶端只能與本地實例通話。在這種情況下,本地實例應該像處理中央一樣處理數據(所以根據中央定義的規則 - 我之前談過的「內部」數據),緩存結果,當位置變爲在線時,將其同步到中央(只是結果,中央沒有重新計算)。 與此同時,本地實例應始終保持與Central的「內部」數據同步(當它們處於聯機狀態時,如果它們處於脫機狀態,只要脫機時間未超過2周閾值,我們就認爲數據是「新鮮的」) 。或者,從另一側看 - 只要中央環境發生變化,就需要將其推送到所有可用的本地實例。因此,總結(並最終提出我的問題),我們需要一種方法將數據從中央實例同步到數千個本地實例,我們還需要一種將本地更改發送到中央的方法。考慮到本地實例的數量,可能的高流量(每個本地可能有多達300個客戶端,每個客戶端可以每分鐘產生幾個請求,每個請求的計算可能花費很多時間,結果可能會很大))和所有其他限制(例如中央實例將是Weblogic服務器的集羣,但每個本地將是單一的WildFly,對於中央和本地數據庫也將是不同的 - 包括不同的架構,這對於這個最好的方法是什麼?通信和同步問題