需要帮助来理解 Akka

Need help in understanding Akka

我正在使用 Akka 创建分布式数据库系统。我有一个数据库系统的代码,它可以在单台机器上运行,但想使其分布式。但是我在理解和创作方法上有困难。这是我对创建一个简单的 dist-DB 系统的想法,最后我有几个问题。

我创建了一个主节点和 2 个工作节点(暂时说)。在 DB 中创建关系 (Table) 后,我向 master 发送一条消息以分发此关系,该关系应将关系分为 2 个(工作人员数量)块并在工作节点中创建子关系。

def receive: Receive = {
    case distributeTable(r: Relation) => {
        worker1 ! createNewRelation(r1)
        worker2 ! createNewRelation(r1)
        for (i <- 0 until r.rows/2) {
            worker1 ! add(r1, r(i));
        }
        for (i <- r.rows/2 until r.rows) {
            worker2 ! add(r1, r(i));
        }
    }
}

现在,对于从用户对象给出的数据库的任何查询,都将被发送到主节点,并进一步发送到工作节点,并在这些节点上的子关系(较小的表)上执行,并将结果发送到主节点。根据查询,master 对这些结果执行任何附加任务并将最终结果发送给用户对象。

我对分布式数据库应该如何工作的想法正确吗?

distributeTable的执行是否正确?

有没有办法将所有工作节点分组并发送消息,以便它们在它们之间分发?我想避免为单个工作节点编写任务。例如:而不是 worker1 ! msg1worker2 ! msg1。有没有一种方法可以让我 workers ! msg1 将它发送到所有工作节点。
如果是这样,在这种情况下如何从主人的所有工人那里收集 return 值。

听起来你想要 Router。您可以使用一个 actor 并基本上复制全部在一个 ActorSystem 中,或者分布在网络中的不同 ActorSystem 中,其中每个 actor 系统可以在数据库的一个分片中有一个位置。

https://doc.akka.io/docs/akka/2.5/routing.html

从你的问题来看,你似乎想使用 akka remoting

https://doc.akka.io/docs/akka/2.5/remoting.html and akka workload pattern http://letitcrash.com/post/29044669086/balancing-workload-across-nodes-with-akka-2