我的分佈式事件來源的系統模擬房屋正在建造和購買過一段時間的邏輯。爲了簡單起見,我們將使用年份作爲分佈式時鐘值(現在忘記向量時鐘)。
房子服用1年就建立該系統的1.0版本,但只要兩次參加第2版。這是邏輯而非結構的變化。
爲了應對此更改,版本1中記錄的事件在重建狀態/快照時還必須由版本1重播。當達到版本2的日誌時,應用程序切換到版本2的邏輯並繼續重播殘餘事件。構建有效的快照。
問題
在我的分佈式系統中的節點將在不同的時間更新爲版本2,創建一個窗口,由此多個版本同時運行。我目前的理解是,這個窗口只能通過諸如功能切換等技術來減少,但不能完全刪除(除非通過將整個系統降爲升級來犧牲可用性)。
合併來自分佈式節點的事件日誌時會產生問題。事件版本互相滲透,無法在重放期間從版本1升級到2。例如:
Node Clock Event
... pre-merge ...
A 2000 HouseBuildStarted('Alpha')
A 2001 HousePurchased('Alpha') <- 'HouseBuilt' event is implicit (inferred through logic).
A 2002 NodeUpgradedTo('V2')
B 2002 HouseBuildStarted('Bravo')
B 2003 HousePurchased('Bravo')
B 2004 NodeUpgradedTo('V2')
... post-merge ...
A 2000 HouseBuildStarted('Alpha')
A 2001 HousePurchased('Alpha')
B 2002 HouseBuildStarted('Bravo')
A 2002 NodeUpgradedTo('V2')
B 2003 HousePurchased('Bravo') <- 'Bravo' does not exist yet (1 year early)
B 2004 NodeUpgradedTo('V2')
這是怎麼通常處理的系統中,所有的節點都不能接受?