我目前喜欢将 redis 与 akka 一起使用,因为我可以通过查询 redis 来监控已处理的消息。Redis 也持久化到磁盘。
akka 持久性与仅使用 redis 相比如何?
我目前喜欢将 redis 与 akka 一起使用,因为我可以通过查询 redis 来监控已处理的消息。Redis 也持久化到磁盘。
akka 持久性与仅使用 redis 相比如何?
我会说这两种选择都不比另一种更好,尽管提供的东西不同。Akka 持久性是关于持久化您的 Actor 处理的每个事件,以便可以重放这些事件以重建您的 Actor 的状态。它是事件溯源http://martinfowler.com/eaaDev/EventSourcing.html的实现。您还可以查询存储的事件以用于其他目的,例如分析系统行为。由于记录了每个历史事件,因此可以进行详细分析。http://www.cakesolutions.net/teamblogs/using-spark-to-analysis-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,因为您的应用程序需要随着时间的推移而变化)而无需更改您的应用程序代码。