Нужна помощь в понимании Акка - PullRequest
0 голосов
/ 10 октября 2018

Я работаю над созданием системы распределенных баз данных с использованием Akka.У меня есть код для системы баз данных, которая работает на одной машине, но хочет сделать ее распределенной.Но у меня есть трудности в понимании и подходе к созданию.Вот что я подумываю о создании простой системы dist-DB, и в конце у меня есть несколько вопросов.

Я создаю мастер-узел и 2 рабочих узла (скажем, пока).После создания отношения (таблицы) в БД я посылаю мастеру сообщение, чтобы распределить это отношение, которое должно разделить отношение на 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));
        }
    }
}

Теперь любой запрос к БД, полученный от пользовательского объекта, будет отправлен мастеру, который затем отправляется рабочим узлам, выполняется на подотношениях (меньшие таблицы) на этих узлах и отправляет результаты мастеру.В зависимости от запроса мастер выполняет любую дополнительную задачу с этими результатами и отправляет конечный результат объекту пользователя.

Правильно ли я думаю о том, как должна работать распределенная БД?

Является ли реализацияиз distributeTable правильно?

Есть ли способ сгруппировать все рабочие узлы и отправить сообщения, чтобы они были распределены между ними?Я хочу избежать написания задач для отдельного рабочего узла.Например: вместо worker1 ! msg1, worker2 ! msg1.Есть ли способ, которым я делаю workers ! msg1, и он будет отправлен на все рабочие узлы.
Если это так, как в этом случае собрать возвращаемые значения от всех рабочих на мастере.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

из вашего вопроса похоже, что вы хотите использовать akka remoting

https://doc.akka.io/docs/akka/2.5/remoting.html и шаблон рабочей нагрузки akka http://letitcrash.com/post/29044669086/balancing-workload-across-nodes-with-akka-2

0 голосов
/ 11 октября 2018

Звучит так, как вы хотите Router.Вы можете использовать одного действующего лица и дублировать его по существу либо в одном ActorSystem, либо распределять по разным ActorSystem по сети, где каждая система акторов может иметь местоположение для одного сегмента базы данных.

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

...