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

Is akka persistance better than me storing a messages status in redis?

我目前喜欢将redis 与akka 一起使用,因为这样我就可以通过查询redis 来监控处理了哪些消息。 Redis 也持久化到磁盘。

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

我会说这两种选择都不比另一种更好,尽管提供的东西不同。 Akka 持久化是关于持久化您的 actor 处理的每个事件,以便可以重播这些事件以重建您的 actor 的状态。它是事件溯源的实现 http://martinfowler.com/eaaDev/EventSourcing.html. You can also interrogate the stored events for other purposes such as analytics about the behaviour of the system. Since every historical event is recorded, analytics can be detailed. http://www.cakesolutions.net/teamblogs/using-spark-to-analyse-akka-persistence-events-in-cassandra

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

事件溯源可能不适合所有应用程序,引用 Martin Fowler 文章:

Packaging up every change to an application as an event is an interface style that not everyone is comfortable with, and many find to be awkward. As a result it's not a natural choice and to use it means that you expect to get some form of return.

通过直接使用 Redis(或任何其他数据库),您可以更完全地控制持久化方法。使用 Akka Persistence,您需要使用它的做事方式,但一些细节是从您那里抽象出来的。它在某种程度上是灵活性(编写自己的持久层,例如使用 Redis)与易用性(使用 Akka Persistence 库)之间的权衡。

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

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