akka持久性比我在redis中存储消息状态更好吗?

时间:2015-11-09 20:22:30

标签: akka akka-persistence

我目前喜欢将redis与akka一起使用,因为我可以通过查询redis来监控已处理的消息。 Redis也坚持使用磁盘。

与仅使用redis相比,akka持久性如何?

1 个答案:

答案 0 :(得分:4)

我会说,虽然提供了不同的东西,但两种选择都不比另一种更好。 Akka持久性是关于持久化你的actor处理的每个事件,以便可以重放这些事件来重建你的actor的状态。它是Event Sourcing http://martinfowler.com/eaaDev/EventSourcing.html的实现。您还可以查询存储的事件以用于其他目的,例如有关系统行为的分析。由于记录了每个历史事件,因此可以详细分析分析。 http://www.cakesolutions.net/teamblogs/using-spark-to-analyse-akka-persistence-events-in-cassandra

另一种持久性机制可能只包含系统的当前状态,因此无法对历史记录进行分析。

事件采购可能不适合所有应用,引用Martin Fowler的文章:

  

将每个更改打包为应用程序作为事件   不是每个人都习惯的界面风格,很多人都觉得   很尴尬因此,它不是一个自然的选择和使用它   意味着你希望获得某种形式的回报。

通过直接使用Redis(或任何其他数据库),您可以更完全地控制持久性方法。使用Akka Persistence,您需要使用其处理方式,但有些细节是从您身上抽象出来的。它在某种程度上是灵活性的折衷(编写你自己的持久层,例如使用Redis)与易用性(使用Akka Persistence库)。

Akka Persistence在哪个系统用于持久性方面是可插拔的。有许多存储系统的插件,包括Redis:https://github.com/hootsuite/akka-persistence-redis

因此,Akka Persistence的一个优点是您可以更改持久层(例如,在测试和生产之间,或者在应用程序需要随时间变化时从RDBMS到NoSQL),而无需更改应用程序代码。