2010-03-08 84 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