簡體   English   中英

阻止電源/硬件/操作系統故障的程序

[英]A program resistent to power/hardware/OS failures

我需要編寫一個程序,在可能的狀態的大空間中執行並行搜索,在此過程中發現新區域(並開始探索),並且在其他地方獲得的中間結果的早期終止的某些區域的探索消除了可能性在其中發現新的有用結果。 使用彼此密切協作運行的多個線程來執行搜索,以避免重新計算中間數據。

在整個過程中必須維護和更新復雜的內部狀態(包括它們使用的多個線程和狀態同步原語的調用堆棧),並且沒有明顯的方法將計算分成可以順序執行的隔離塊,每個節省並將一個小的中間結果傳遞給下一個。 而且,沒有辦法將計算分成不相互通信的獨立並行線程,而不會由於重新計算大量中間數據而施加過高的開銷。

由於搜索域較大,該程序可能會在產生最終結果之前運行數月。 因此,在程序執行期間存在電源,硬件或操作系統故障的重大風險,這可能導致完成當前已完成的所有工作的丟失。 在這種情況下,程序將需要從頭開始重新啟動所有計算。

我需要一種能夠防止在這種情況下完全丟失數據的解決方案。 我想到了一個執行引擎/平台,它可以將進程的當前狀態持續保存到像冗余磁盤陣列或數據庫這樣的防故障存儲中。 但是我理解這種方法可以顯着減慢過程,甚至可以達到與預期的計算時間相比沒有任何好處的程度,包括由於可能的故障導致的重啟。

事實上,我不需要一個能夠持續保存程序狀態的理想解決方案,而且我可以輕松承擔數小時甚至數天的工作損失。 我想到的一個可能的重量級解決方案是在虛擬機內運行程序,不時保存其快照,並在最近的快照可能發生主機故障后恢復計算機。 此方法還可以幫助在隨機或可預防的客戶操作系統故障后恢復程序狀態。

是否有類似但更輕量級的解決方案僅限於保留單個進程的狀態? 或者你能建議任何其他可以解決我問題的方法嗎?

您可能希望使用Erlang,它允許大量線程以相對較低的成本運行。 由於線程成本低,可以使用冗余來提高可靠性。

對於您提出的問題,可以采用三重冗余方案,其中三個(或更多)系統的同步定期檢查將通過投票確定失敗的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM