将 akka 持久性用作本地数据库是个好主意吗?如果服务器无法访问,我需要在本地存储数据,而且我的应用程序是建立在 akka 之上的,所以使用 akka-persistence 听起来是最简单的方法。
数据以平均每 10 秒记录一条记录的速率填充。仍然考虑到 akka-persistence 是为一些不同的东西设计的,这听起来像是一种滥用。有什么我应该注意的问题吗?
将 akka 持久性用作本地数据库是个好主意吗?如果服务器无法访问,我需要在本地存储数据,而且我的应用程序是建立在 akka 之上的,所以使用 akka-persistence 听起来是最简单的方法。
数据以平均每 10 秒记录一条记录的速率填充。仍然考虑到 akka-persistence 是为一些不同的东西设计的,这听起来像是一种滥用。有什么我应该注意的问题吗?
首先我们来看看akka-persistence的目的是什么:
Akka 持久性使有状态的 Actor 能够持久化其内部状态,以便在 Actor 启动、JVM 崩溃或主管重新启动或在集群中迁移时可以恢复它。Akka 持久化背后的关键概念是,只有对参与者内部状态的更改才会被持久化,而不会直接保持其当前状态 [...]
如果存储的数据是参与者内部状态的一部分,那么问题是否是“滥用”?从帖子来看,这并不完全明显,只是简单地存储传入的消息,这可能是一个适当的消息队列更好的做法。
至于为什么要存储数据?Akka-persistence 需要一个底层数据存储,该数据存储可能相同或依赖于最初不可用的数据库。但是,只要该数据库一次不能长时间使用,每 10 秒 1 条消息听起来并不可怕。
还值得注意的是,简单地引入本地缓冲区可能不足以应对不可靠的资源(查看断路器模式)。始终值得考虑采用一种机制,该机制提供背压以将状态的生产者告知“流”。然后它可以做出明智的选择来做什么(drop,store..)。
在无法处理数据时将数据存储在本地,但在这样做时应考虑到上述问题,因为可能会有更合适的解决方案。