2010-03-08 19 views
14

Me gusta el artículo LWN "Crash-only software" y me gustaría obtener más información sobre la programación segura contra fallas y tolerante a fallas.Recursos sobre programación segura contra fallas y tolerancia a fallos

Es sorprendentemente difícil asegurar que el estado persistente sea consistente en situaciones de falla. Aquí ni siquiera hablo sobre operaciones distribuidas: eso también es difícil en un solo nodo: incluso el DB normal de Berkeley (BDB Data Store o BDB Concurrent Data Store) podría tener una base de datos destruida si el sistema se bloquea. No solo se rompen las restricciones de la aplicación de alto nivel, es posible que la base de datos no se abra correctamente si el sistema se bloquea.

¿Qué son buenos recursos sobre diseños, enfoques y programación seguros contra fallas y tolerantes a fallas?

Si los recursos se centran en entornos C++ y POSIX, lo agradecería.

+1

Nota al margen: en el último Mac OS X (Leopard) el sistema operativo simplemente manda un SIGKILL a todas las aplicaciones que se encuentran en un estado supuestamente "limpio". Impresionante cómo esto realmente resulta en un cierre de 1 segundo (en una máquina más nueva, debo admitir). Referencia: http://developer.apple.com/mac/library/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_6.html#//apple_ref/doc/uid/TP40008898-SW22 – ChristopheD

Respuesta

2

El modelo Aktor en los idiomas Erlang y Scala el modelo let it crash. Vea esto article.

5

Akka es un framework para Java y Scala que está escrito teniendo en cuenta el let-it-crash. Consulte esta presentación article y this para obtener una introducción a Actors y Let-it-crash. También se llama Fail-Fast y worker/supervisor style.

Dos buenas presentaciones en Erlang es Systems that Never Stop (and Erlang) y Message Passing Concurrency in Erlang

Theron es una biblioteca actor por C++, también creo que hay algo en Boost también.

También Erlang puede llamar a C o C++ code, vea esto para una discusión. Java/Scala/Akka también puede llamar al código C++.

(Si te gusta C++ le sugiero que tenga una mirada en Scala, un lenguaje muy agradable y mejor que la de Java si viene de C++.)

También Jonas Boners presentación Scalability, Availability & Stability Patterns es una buena presentación sobre el tema.

+3

Si deja que Java (o Scala) llame a un C++ DLL mediante el uso de JNI, entonces la estabilidad de la JVM está en peligro. Como el código C++ se ejecuta en el mismo proceso que la JVM, la JVM morirá si se produce un bloqueo en el código C++. JNI no funciona muy bien, no lo use. –

+0

JNI/JNA funciona muy bien si comprende las complejidades involucradas.Bloquear su JVM porque el código C que llamó seg falló no es culpa de JNI. –

0

Para agregar al conjunto de respuestas anterior, hay Groovy y GPars, que se han perdido. Por supuesto, esto no es C++.

Hay otra biblioteca experimental en C++ llamada libcppa. Theron es más maduro que esto.

De cualquier manera la mejor opción es utilizar ya sea:

  1. Erlang
  2. Scala/Akka
+0

¿Sabes si Theron admite actores remotos similares a Scala? – Giorgio

+0

Theron no admite actores remotos, pero [libcppa sí] (http://neverlord.github.com/libcppa/manual/index_0_3_3.html#htoc47). – neverlord

Cuestiones relacionadas