2010-03-08 85 views
14

我喜欢LWN文章"Crash-only software",我想了解更多关于碰撞安全和容错编程的内容。关于碰撞安全和容错编程的资源

令人惊讶的是很难确保持续状态在故障情况下是一致的。在这里,我甚至不谈论分布式操作:这在单个节点上也很难:即使正常的Berkeley DB(BDB数据存储或BDB并发数据存储)在系统崩溃的情况下也可能会销毁数据库。不仅高级应用程序约束被破坏,如果系统崩溃,数据库可能无法正确打开。

什么是关于碰撞安全和容错设计,方法和编程的优秀资源。

如果资源专注于C++和POSIX环境,我将不胜感激。

+1

边注:在最新的Mac OSX(雪豹)操作系统只是发送SIGKILL到所有处于“干净”状态的应用程序。令人印象深刻的是,这真的会导致1秒关机(在一台新机器上,我必须承认)。参考:http://developer.apple.com/mac/library/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_6.html#//apple_ref/doc/uid/TP40008898-SW22 – ChristopheD 2010-03-08 22:18:00

回答

2

在语言Erlang和Scala的Aktor模型让它崩溃模型。请参阅article

5

Akka是一个Java和Scala的框架,它是在考虑到让它崩溃的情况下编写的。请参阅articlethis演示文稿,了解演员和让它崩溃的介绍。它也被称为Fail-Fastworker/supervisor风格。在二郎

两个很好的演示是Systems that Never Stop (and Erlang)Message Passing Concurrency in Erlang

Theron是C++的一个演员库,我也觉得有东西在升压也。

另外Erlang可以调用C或C++ code查看这个讨论。 Java/Scala/Akka也可以调用C++代码。

(如果你喜欢C++,我建议你看看Scala的,非常漂亮的语言,比Java的,如果你来自C++)

而且乔纳斯Boners呈现Scalability, Availability & Stability Patterns是就这个话题很好的介绍。

+3

如果让Java(或Scala)调用C++ DLL通过使用JNI,那么JVM的稳定性就会受到威胁。由于C++代码在与JVM相同的进程中运行,因此如果在C++代码中发生崩溃,JVM将会死亡。 JNI工作不好,不要使用它。 – 2010-07-27 09:43:15

+0

如果您了解所涉及的复杂性,JNI/JNA将非常出色。因为您调用seg的C代码出错而导致您的JVM崩溃,这不是JNI的错误。 – 2011-09-30 16:36:55

0

要添加到上面的答案集,有GroovyGPars,这已被遗漏。当然,这不是C++。

C++中有另一个名为libcppa的实验库。 Theron比这更成熟。

任何方式最好的办法是为使用:

  1. 二郎
  2. 斯卡拉/阿卡
+0

你知道Theron是否支持类似Scala的远程演员? – Giorgio 2012-04-18 05:27:04

+0

Theron不支持远程参与者,但[libcppa确实](http://neverlord.github.com/libcppa/manual/index_0_3_3.html#htoc47)。 – neverlord 2012-08-18 14:35:10