Разделение данных и рабочей нагрузки между узлами в распределенной настройке - PullRequest
0 голосов
/ 31 августа 2018

Я разрабатываю решение, которое требует совершения сетевых вызовов для каждого моего пользователя каждую 1 секунду. Я только что понял, что это не будет масштабироваться, когда я скажу более 60 000 пользователей из-за вычислительных и сетевых ограничений одной машины. (В настоящее время у меня 20 пользователей :()

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

Если у меня фиксированное количество узлов, то я могу, вероятно, разделить на основе некоторой простой жестко заданной формулы - например, для двух узлов, узел № 1 получает все нечетные данные, узел № 2 получает все четные данные. Но это не приведет к самовосстановлению / восстановлению после сбоя узла, и мне придется менять метод жесткого кода каждый раз, когда я хочу добавить / удалить узлы.

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

Это правильный подход для рассмотрения в будущем масштабируемости? Существуют ли модели, в которых это может быть достигнуто по-настоящему динамичным и распределенным способом - без необходимости мастера?

Существуют ли какие-либо платформы Python / узлов и / или какие-либо облачные службы, которые могли бы помочь в таком случае использования?

PS. Я не ожидаю, что увеличу его до 60 000 в ближайшее время. Просто хочу разработать его с учетом будущего масштаба.

...