我們有兩個用於控制關鍵系統的工業控制器。這個想法是,一個控制器發生故障時,另一個控制器會自動接管。爲確保交換是無縫的,每個備用控制器必須始終鏡像在線控制器的狀態。維護兩臺機器之間的狀態
我們有一個解決方案,這是一個很差的編碼和記錄。問題是,是否有一種通用的設計模式實現了這樣一個系統或開源軟件,它實現了類似的功能,可以用來創建一個可以用於控制器或PC的通用解決方案,並且可以擴展到允許任意數量的控制器充當待機例程。
我們有兩個用於控制關鍵系統的工業控制器。這個想法是,一個控制器發生故障時,另一個控制器會自動接管。爲確保交換是無縫的,每個備用控制器必須始終鏡像在線控制器的狀態。維護兩臺機器之間的狀態
我們有一個解決方案,這是一個很差的編碼和記錄。問題是,是否有一種通用的設計模式實現了這樣一個系統或開源軟件,它實現了類似的功能,可以用來創建一個可以用於控制器或PC的通用解決方案,並且可以擴展到允許任意數量的控制器充當待機例程。
也許共享SQLite數據庫或類似的東西?
有幾乎所有的DBMS都支持集羣,分佈式體系結構和複製(http://en.wikipedia.org/wiki/Database_replication)的標準主 - 從模式。
所以,基本上在你的情況下,你可以讓主機維持狀態,而且坐在那裏的奴隸除了從主人的狀態更新自己的狀態外什麼都不做。如果主設備停機,則從設備看到主設備不再存在,並且可以接管狀態控制,一旦主設備從自己的狀態更新爲自己的狀態(保持狀態同時保持狀態主人沒有被激活)。
故障轉移和透明故障轉移有區別。你真的對透明故障轉移有要求嗎?如果是這樣,你最終會付出代價(無論是成本和複雜性)。
這就是說,看看這個帖子在Buddy Replication爲優雅的解決方案的問題。
控制實時關鍵系統的傳統方法是運行lockstep中的兩個單元。多年來,Tandem一直在使用這種技術構建一些非常令人印象深刻的容錯機器。
然而,鎖步是非常多的硬件級解決方案;我不認爲你可以純粹在軟件層面上實現經典的鎖步。或者至少,不是直截了當的。也許使用通過交換矢量時鐘同步的狀態機或類似螺旋槳引導的東西?
航天飛機電腦有類似的情況。在這種情況下,他們使用了5臺電腦,如果一臺機器遲到或與其他機器不同,它實際上(本質上)被拒之島外。
在你的情況下,你如何確定哪個控制器壞了?決定機器是否也考慮過單點故障?
兩個控制器之間有什麼級別的通信可用?共享內存,以太網,甚至更慢?
狀態信息在兩者之間變化有多快?
是否有可能向兩個控制器提供相同的信息,並且兩個控制器是否會計算相同的狀態轉換?