【问题标题】:Akka persistence misuse?Akka持久性滥用?
【发布时间】:2016-01-26 15:09:36
【问题描述】:

使用 akka 持久性作为本地数据库是个好主意吗?如果服务器无法访问,我需要在本地存储数据,而且我的应用程序是建立在 akka 之上的,所以使用 akka-persistence 听起来是最简单的方法。

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

【问题讨论】:

  • 我会说不,这听起来不像是滥用,但我认为你没有给我们足够的上下文来做出公平的判断,还要考虑到使用 akka 持久性不是就像你想象的那样简单。
  • @EndeNeu 我不确定。我对它不熟悉,刚开始,但我写了一个简单的实现,它已经可以工作了。这就像 10 行代码演员。您想知道什么信息才能回答这个问题?我的项目实际上是一个宠物项目,我在那里尝试不同的技术,所以我没有太大风险。但如果我在做一件完全疯狂的事情,我想知道
  • 那么不,对我来说听起来不像是滥用。

标签: scala akka akka-persistence


【解决方案1】:

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

Akka 持久化使有状态的 Actor 能够持久化其内部 状态,以便在启动、重新启动actor时可以恢复它 在 JVM 崩溃后或由主管,或在集群中迁移。这 Akka 持久化背后的关键概念是只改变一个演员的 内部状态会被持久化,但不会直接保持其当前状态 [...]

如果存储的数据是参与者内部状态的一部分,那么问题是否会成为“滥用”?从帖子来看,这并不完全明显,只是简单地存储传入的消息,这可能是一个适当的消息队列。

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

还值得注意的是,简单地引入本地缓冲区可能不足以应对不可靠的资源(查看circuit breaker pattern)。始终值得考虑采用一种机制,该机制提供背压以将状态的生产者通知“流”。然后它就可以做出明智的选择(丢弃、存储..)。

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

【讨论】:

    猜你喜欢
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2019-11-06
    • 2015-02-15
    • 2016-03-07
    相关资源
    最近更新 更多