Вопросы по проектированию распределенных систем — Scala

#java #scala #distributed-system

#java #scala #распределенная система

Вопрос:

Я собираюсь реализовать сортировку с использованием многих машин (распределенная сортировка). Я буду кодировать его с помощью Scala. Поскольку у меня нет большого опыта в сетевом программировании, мне нужно, чтобы вы, ребята, помогли мне выбрать, какая библиотека и метод обеспечивают связь между машинами:

1 / Сколько машин может обмениваться данными с помощью Message (это будет реализовано как класс case в Scala)? Могу ли я использовать ServerSocketChannel? Или я должен создать TCP-сервер для каждой машины? Нужно ли мне сериализовать и десериализовать мое объектное сообщение? Если необходимо, могу ли я использовать protobuf для этого?

2 / Как я могу отправлять данные по сети? Должен ли я использовать java.io или java.nio?

Мне нужно создать свой проект, используя как можно меньше зависимостей. Большое спасибо.

Комментарии:

1. Ответ на большинство из них — «это зависит» — от того, что вы сортируете, где хранятся данные, объемы по сравнению с количеством машин и так далее.

Ответ №1:

Я бы начал с простейшей библиотеки обмена сообщениями высокого уровня, и, поскольку вы выбрали Scala, я бы начал с Akka, которая была разработана с учетом Scala.

Сколько машин может обмениваться данными с помощью Message

Вы можете взаимодействовать с каждой машиной, к которой вы можете подключиться, например, со всем Интернетом.

Если необходимо, могу ли я использовать protobuf для этого?

Я подозреваю, что вам это не нужно, но да.

Как я могу отправлять данные по сети?

Я бы использовал библиотеку обмена сообщениями

Должен ли я использовать java.io или java.nio?

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

Я собираюсь реализовать сортировку с использованием многих машин (распределенная сортировка).

Существуют библиотеки, разработанные для Scala, которые уже делают это. Я бы использовал один из них, например, Spark или Hadoop.

Комментарии:

1. Мне не рекомендуется использовать Hadoop, Spark, Akka. Любая стандартная библиотека?