【发布时间】:2015-02-08 13:22:00
【问题描述】:
我从事一个项目,在该项目中,对数据库的大量并发读写会降低性能。想象一下,我需要不时地重新索引整个数据库,因此,最简单的方法是将“脏”标志设置为 true,并让多台机器抓取“脏”项目,进行一些处理,然后然后再次将它们的状态设置为“干净”。可以想象,这里是死锁的天堂。
我想对此进行优化,将 DB IO 操作留给一台协调机器,将其余可能的并发计算留给其他机器。我认为 Akka 及其分布式 Actor 模型可能是实现这一目标的理想选择。我的想法是让协调参与者从数据库中读取成批的“脏”项目,启动众多处理参与者,将一个项目传递给每个参与者。这个想法是处理参与者将驻留在不同的机器上,但协调器和处理器都不应该意识到这一点。这似乎是由于使用 Akka 的巨大优势而成为可能的。我想让这成为一个部署配置问题,以便随意扩展。
处理参与者完成处理后,他们可以将结果作为消息发送给协调参与者,协调参与者将使用相同的连接来保存其状态。
我的方向正确吗?
【问题讨论】:
标签: database concurrency akka scalability actor