在LMAX Disruptor模式中,使用複製器將輸入事件從主節點複製到從節點。因此,設置可能會看起來如下:干擾模式 - 主節點和從節點如何保持同步?
主節點的複製事件寫入到數據庫(所有雖然我們能想到更好的機制比寫入到DB-它不是很重要問題陳述)。從節點的接收器從DB讀取並將事件放到從節點的環形緩衝區中。
忽略從節點的輸出事件。
現在有可能主節點的業務邏輯處理器比從節點的業務邏輯處理器慢。例如,主節點的示例BL可以位於槽102,其中從屬節點可以位於106.(這可能是因爲複製器在業務邏輯處理器之前從環形緩衝區讀取事件)。
在這種情況下,如果主節點發生故障並且從節點現在成爲主節點,那麼外部系統可能會漏掉一些關鍵事件。這可能發生,因爲節點2當它充當從屬節點時忽略了其輸出。
Martin Fowler確實聲稱複製器的工作是保持節點同步: 「早些時候,我提到LMAX在集羣中運行多個系統副本以支持快速故障切換,複製器使這些節點保持在同步「
但我不確定它如何讓業務邏輯處理器保持同步?有任何想法嗎?
感謝Martin的回覆。如果主設備的複製器「關閉」從設備的ACK,那麼在從設備關閉的情況下,主設備的業務邏輯處理器無法繼續?這種情況如何處理? – Ngm
Disruptor是一種線程間消息傳遞模式。您的問題是關於在事件源系統中如何實現高可用性,因此超出了Disruptor的範圍。 Martin Folwer的文章只是Disruptor如何應用的一個例子。 –
複製的一致性算法的一個例子可以在這裏找到https://ramcloud.stanford.edu/wiki/download/attachments/11370504/raft.pdf –