我喜欢 LWN 文章“仅崩溃软件”,我想了解更多关于崩溃安全和容错编程的知识。
很难确保持久状态在故障情况下是一致的。在这里我什至不讨论分布式操作:这在单个节点上也很困难:如果系统崩溃,即使是普通的 Berkeley DB(BDB 数据存储或 BDB 并发数据存储)也可能会损坏数据库。不仅高级应用程序约束被破坏,如果系统崩溃,数据库可能无法正确打开。
有哪些关于崩溃安全和容错设计、方法和编程的好资源。
如果资源专注于 C++ 和 POSIX 环境,我将不胜感激。
我喜欢 LWN 文章“仅崩溃软件”,我想了解更多关于崩溃安全和容错编程的知识。
很难确保持久状态在故障情况下是一致的。在这里我什至不讨论分布式操作:这在单个节点上也很困难:如果系统崩溃,即使是普通的 Berkeley DB(BDB 数据存储或 BDB 并发数据存储)也可能会损坏数据库。不仅高级应用程序约束被破坏,如果系统崩溃,数据库可能无法正确打开。
有哪些关于崩溃安全和容错设计、方法和编程的好资源。
如果资源专注于 C++ 和 POSIX 环境,我将不胜感激。
Akka 是一个 Java 和 Scala 框架,在编写时考虑了 let-it-crash。有关 Actors 和 let-it-crash 的介绍,请参阅本文和此演示文稿。它也被称为快速失败和工人/主管风格。
关于 erlang 的两个很好的演示文稿是永不停止的系统(和 Erlang)和Erlang中的消息传递并发
Theron是 C++ 的演员库,我也认为 Boost 中也有一些东西。
Erlang 也可以调用 C 或 C++代码,请参阅此讨论。Java / Scala / Akka 也可以调用 C++ 代码。
(如果你喜欢 C++,我建议你看看 Scala,非常好的语言,如果你来自 C++,它比 Java 更好。)
Jonas Boners 的演讲Scalability, Availability & Stability Patterns也是关于这个主题的一个很好的演讲。
Erlang 和 Scala 语言中的 Aktor 模型是让它崩溃的模型。见这篇文章。
如果你想在 C++ 中实现容错特性,基本上你会重写 Erlang。不要重新发明轮子,Erlang OTP 已经存在并且经过了 35 年以上的实战考验。用它!。