gpt4 book ai didi

recovery - 抗电源/硬件/操作系统故障的程序

转载 作者:行者123 更新时间:2023-12-04 15:59:00 29 4
gpt4 key购买 nike

我需要编写一个程序,在可能状态的大空间中执行并行搜索,在此过程中发现了新区域(并开始了他们的探索),并且由于在其他地方获得的中间结果消除了可能性,因此提前终止了对某些区域的探索在其中发现新的有用结果。搜索是使用彼此大量协作运行的多个线程来执行的,以避免重新计算中间数据。

一个复杂的内部状态(包括几个线程的调用栈和它们使用的状态同步原语)必须在整个过程中维护和更新,并且没有明显的方法将计算拆分成可以顺序执行的隔离块,每个块都节省了并将一个小的中间结果传递给下一个。此外,无法将计算拆分为不相互通信的独立并行线程,而不会因重新计算大量中间数据而产生过高的开销。

由于搜索域很大,该程序可能会运行数月才能产生最终结果。因此,在程序执行期间存在电源、硬件或操作系统故障的重大风险,这可能导致目前已完成的所有工作完全丢失。在这种情况下,程序需要从头开始重新启动所有计算。

在这种情况下,我需要一个可以防止数据完全丢失的解决方案。我想到了一个执行引擎/平台,它可以不断地将进程的当前状态保存到像冗余磁盘阵列或数据库这样的抗故障存储中。但我知道这种方法会显着减慢进程,甚至在与预期的计算时间(包括由于可能的故障而重新启动)相比没有任何好处的情况下也会减慢进程的速度。

事实上,我不需要一个理想的解决方案来持续保存程序状态,我可以轻松承受数小时甚至数天的工作损失。我想到的一个可能的重量级解决方案是在虚拟机内运行该程序,不时保存其快照,并在可能的主机故障后从最近的快照恢复机器。这种方法还有助于在随机或可预防的 guest 操作系统故障后恢复程序状态。

是否有类似但更轻量级的解决方案仅限于保留单个进程的状态?或者你能提出任何其他可以解决我的问题的方法吗?

最佳答案

您可能需要考虑使用 Erlang,它允许以相对较低的成本运行大量线程。因为线程成本低,所以可以使用冗余来提高可靠性。

对于您提出的问题,三重冗余方案可能是可行的方法,其中定期检查三个(或更多)系统之间的同步将通过投票确定谁失败。

关于recovery - 抗电源/硬件/操作系统故障的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18067787/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com