将akka持久性用作本地数据库是一个好主意吗?我需要在服务器不可访问的情况下本地存储数据,并且我的应用程序构建在akka之上,因此使用akka-persistence听起来就像最简单的方法。
数据以平均每10秒的记录速率填充。仍然认为akka-persistence是针对不同的东西设计的,听起来像是误用。我应该注意哪些问题?
答案 0 :(得分:1)
首先让我们看一下akka-persistence的目的是什么:
Akka持久性使有状态的演员能够坚持他们的内部 状态,以便在一个actor启动,重新启动时可以恢复它 在JVM崩溃后或由主管进行,或在群集中迁移。该 Akka持久性背后的关键概念是只改变一个演员的 内部状态是持久的,但从不直接当前状态[...]
如果存储的数据是演员内部状态的一部分,那么它是否会被误用?从帖子中看,这并不完全明显,只是简单地存储传入的消息,这可能是一个合适的消息队列。
至于应该存储数据的原因? Akka-persistence需要一个底层数据存储,它可能相同或依赖于最初不可用的数据库。但是,只要该数据库一次不可用于长时间,每10秒1条消息听起来并不可怕。
值得注意的是,简单地引入本地缓冲区可能不足以应对不可靠的资源(请查看circuit breaker pattern)。总是值得考虑建立一种提供背压的机制,以便通知“流动”状态的生产者。然后它可以做出明智的选择(放下,存储......)。
在无法处理数据时在本地存储数据,但在执行此操作时应考虑上述问题,因为可能存在更合适的解决方案。