喜欢持久性滥用?

Akka persistence misuse?

将 akka 持久性用作本地数据库是个好主意吗?我需要在服务器无法访问的情况下在本地存储数据,并且我的应用程序构建在 akka 之上,因此使用 akka-persistence 听起来是最简单的方法。

数据平均每 10 秒填充一条记录。仍然考虑到 akka-persistence 是为一些不同的东西而设计的,这听起来像是一种误用。我应该注意什么问题?

先来看看akka-persistence的目的是什么:

Akka persistence enables stateful actors to persist their internal state so that it can be recovered when an actor is started, restarted after a JVM crash or by a supervisor, or migrated in a cluster. The key concept behind Akka persistence is that only changes to an actor's internal state are persisted but never its current state directly [...]

问题 'misuse' 如果存储的数据是 actors 内部状态的一部分?从 post 来看,这并不完全明显,只是简单地存储传入的消息,这可能是一个适当的消息队列做得更好。

至于为什么要存储数据? Akka-persistence 需要一个底层数据存储,它可能与最初不可用的数据库相同或依赖于该数据库。但是,只要该数据库一次不能长时间使用,每 10 秒 1 条消息听起来并不可怕。

还值得注意的是,简单地引入本地缓冲区可能不足以应对不可靠的资源(请查看 circuit breaker pattern)。总是值得考虑有一种机制,它提供背压来通知生产者 'flow' 的状态。然后它可以就做什么做出明智的选择(丢弃,存储..)。

在无法处理的情况下将数据存储在本地,但在这样做时应考虑上述问题,因为可能会有更合适的解决方案。