【问题标题】:Are AKKA actors a good solution for optimizing my setup?AKKA 演员是优化我的设置的好解决方案吗?
【发布时间】:2015-02-08 13:22:00
【问题描述】:

我从事一个项目,在该项目中,对数据库的大量并发读写会降低性能。想象一下,我需要不时地重新索引整个数据库,因此,最简单的方法是将“脏”标志设置为 true,并让多台机器抓取“脏”项目,进行一些处理,然后然后再次将它们的状态设置为“干净”。可以想象,这里是死锁的天堂。

我想对此进行优化,将 DB IO 操作留给一台协调机器,将其余可能的并发计算留给其他机器。我认为 Akka 及其分布式 Actor 模型可能是实现这一目标的理想选择。我的想法是让协调参与者从数据库中读取成批的“脏”项目,启动众多处理参与者,将一个项目传递给每个参与者。这个想法是处理参与者将驻留在不同的机器上,但协调器和处理器都不应该意识到这一点。这似乎是由于使用 Akka 的巨大优势而成为可能的。我想让这成为一个部署配置问题,以便随意扩展。

处理参与者完成处理后,他们可以将结果作为消息发送给协调参与者,协调参与者将使用相同的连接来保存其状态。

我的方向正确吗?

【问题讨论】:

    标签: database concurrency akka scalability actor


    【解决方案1】:

    您可以使用Cluster Singleton 作为协调员。请注意,协调参与者将按顺序接收所有请求,因此它应该非常轻量级。至少您可能希望将批量读取和回写分开。也许(如果你没有触发器)也可以读取带有分页的脏块,以便长时间不阻塞actor。我使用了在 ResultSet 上定义的迭代器(Oracle JDBC 驱动程序自动进行分页) - 和类似case ScheduledBulk if previousBulkFinished => future {getIterator(...).foreach(coordinator ! _)}} 的smthng。

    如果您想要快速写入数据库 - 您可以使用 Fixed Size Router 在多个参与者之间分配写入(计数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      相关资源
      最近更新 更多