【问题标题】:Understanding Akka Fault Tolerance了解 Akka 容错
【发布时间】:2013-12-09 18:01:22
【问题描述】:

我正在研究Akka,只是查看他们的fault tolerance example,并试图理解它。

  1. 为什么我不能在“纯 Java”(没有 Akka)中实现所有这些相同的类型(WorkerListenerCounterService 等)。 Akka 开箱即用地添加了哪些基础设施?
  2. 在该图中,Storage 代表什么?关系数据库管理系统?监控 RDBMS 的 Java 应用程序? JDBC 驱动程序?
  3. 如果Storage 是一个Java 应用程序并且可以将StorageException 返回给请求者,那就太好了,但是如果StorageCounterService 之间的网络被切断或存在传输级问题怎么办?整个图表是否仍然有效(如果是,如何?!?)还是 Akka 仅提供“应用层”容错?在后一种情况下,Java/Akka 如何处理硬件或网络级别的故障?

【问题讨论】:

  • 您当然可以用普通的旧 Java 实现 Akka 的大部分功能。您获得的是简洁的表达方式和构建块的大量可重用性。对于问题 3,网络编程技术将捕获断开的连接,通常通过看门狗计时器。
  • 感谢@BobDalgleish (+1) - 2 次跟进:(a) 你能衡量一下Storage 在该图中代表什么吗?了解它是 Java 应用程序/类/服务器还是本机 RDBMS 将有助于我理解 Akka 的容错性。 (b) 当你说“看门狗定时器”是this 你在说什么?再次感谢!
  • 在示例中,它被实现为一个Java类,该类持久化存储在其中的项目;坚持到程序结束。只要适配器代码实现了模型所期望的接口,它就没有理由不能成为重量级的 RDBMS。 b) 是的,这是看门狗定时器的一个例子。这是一种常见的设计模式。

标签: java akka fault-tolerance


【解决方案1】:
  1. Akka 基于 Actor 的设计模式,您可以自己实现该模式,就像使用 MVC 一样。我想说的是,akka 为您做的最好的事情就是所有能够最小化参与者所需资源数量的反应性东西。

  2. 您可以将存储视为只是一种状态或保持应用程序的某些状态。

  3. 我认为人们在谈论容错时主要指的是因为您可以轻松地拥有分布式参与者,并使用诸如可靠代理模式http://doc.akka.io/docs/akka/snapshot/contrib/reliable-proxy.html 之类的东西,您可以让您的应用程序以它的方式将继续运行,直到最后一个节点死亡,如果您始终实施该模式,您将不会丢失任何消息。所以它指的是消息丢失。一切都是在akka中的消息方面,你通常不会有不是一个好主意的请求,因为它是阻塞的,如果需要的话你可以使用Futures。如果您的硬件停止运行,您将无法在您指定的时间内检索到未来的值,您可以自己处理故障。

【讨论】:

    猜你喜欢
    • 2017-04-29
    • 2019-05-10
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多