需要帮助以了解Akka

时间:2018-10-10 20:16:59

标签: scala akka distributed distributed-database

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

我创建一个主节点和2个工作节点(现在说)。在数据库中创建了一个关系(表)之后,我向主控发送了一条消息以分发此关系,该关系应将该关系分为2个(工作人员数)块,并在工作人员节点中创建子关系。

<template>
  <v-carousel cycle>
    <v-carousel-item
      v-for="(item,i) in items"
      :key="i"
      :src="item.url"
      >
    </v-carousel-item>
  </v-carousel>

</template>

<script>
import { db } from "../firebase/firestore";


export default {
  name: 'Carousel',
  props: {
    msg: String
  },
  data(){
    return{
      items: []
    }
  },
  firestore(){
    return{
      items: db.collection('Carousel')
    }
    console.log(this.items);
  },
  created(){
    console.log(this.items);
  }
}
</script>

现在,对于从用户对象发出的对DB的任何查询,都将被发送到master,然后进一步发送到worker节点,并在这些节点上的子关系(较小的表)上执行并将结果发送到master。根据查询,master将对这些结果执行任何其他任务,并将最终结果发送给用户对象。

我对分布式数据库的工作方式是否正确?

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)); } } } 的实现是否正确?

是否可以对所有工作程序节点进行分组并发送消息,以便它们在其中分布?我想避免为单个工作节点编写任务。例如:distributeTable代替worker1 ! msg1。有没有一种方法worker2 ! msg1,它将被发送到所有工作节点。
如果是这样,在这种情况下,如何从主服务器上的所有工人那里收集返回值。

2 个答案:

答案 0 :(得分:0)

听起来像您想要Router。您可以使用一个参与者,并且基本上可以全部复制一个ActorSystem或在整个网络中分布在不同的ActorSystem上,其中每个参与者系统可以在一个数据库中具有一个局部性。

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

答案 1 :(得分:0)

从您的问题来看,您似乎想使用akka远程处理

https://doc.akka.io/docs/akka/2.5/remoting.html和akka工作负载模式http://letitcrash.com/post/29044669086/balancing-workload-across-nodes-with-akka-2