2013-12-09 23 views
2

我正在挖掘Akka,只是看着他们的fault tolerance example,并试图理解它。了解Akka容错

  1. 为什么我不能只是实现所有这些相同的类型(WorkerListenerCounterService等)中的 “纯Java”(无阿卡)。什么基础设施是Akka在这里加入的?
  2. 在该图中,Storage代表什么?一个RDBMS?一个Java应用程序监视RDBMS?一个JDBC驱动程序?
  3. 这很好,如果Storage是一个Java应用程序,并且可以将StorageException返回给请求者,但如果StorageCounterService之间的网络被切断或者存在传输级别问题会怎样?这整个图表是否仍然有效(如果是这样,怎么样?!??)还是Akka只提供“应用层”容错?在后一种情况下,Java/Akka如何处理硬件或网络级别的故障?

在此先感谢!

+2

您当然可以在普通的旧Java中实现Akka的大部分功能。您获得的是简洁的表达和基本的构建块的可重用性。对于问题3,网络编程技术通常会通过看门狗定时器捕捉断开的连接。 –

+0

感谢@BobDalgleish(+1) - 2个跟进:(a)您可以权衡“存储”在该图表中的含义吗?了解它是否是Java应用程序/类/服务器或本地RDBMS将帮助我理解Akka的容错性。和(b)当你说“看门狗定时器”是[this](http://docs.oracle.com/javame/config/cldc/rel/3.4/core/da/html/device_access/watchdog.htm)你在说什么?再次感谢! – IAmYourFaja

+0

在该示例中,它被实现为一个Java类,该类持久存储在其中的项目;坚持到节目结束。只要适配器代码实现了模型预期的接口,就没有理由不可能是一个重量级的RDBMS。 b)是的,这是看门狗定时器的一个例子。这是一种常见的设计模式。 –

回答

0
  1. 阿卡是基于角色的设计模式,可以实现自己的这个模式,就像你可以用MVC。我会说,AKKA为你做的最好的事情是所有反应性的东西,这些东西可以减少演员需要的资源量。

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

  3. 我认为最主要的人是指当他们谈论容错是因为你可以很容易地distrubuted演员,并使用类似可靠的代理模式http://doc.akka.io/docs/akka/snapshot/contrib/reliable-proxy.html你做的方式,它会继续运行你的应用程序直到最后一个节点死亡,并且如果您始终实现该模式,则不会丢失任何消息。所以它指的是消息丢失。一切都以阿卡的信息为依据,你通常不会有要求,因为它是封锁,而是在需要时使用期货。如果您的硬件停止运行,您不会在指定的时间内检索未来的价值,并且您可以自己处理失败。