2016-02-27 4 views
-1

Первоначально это был небольшой проект, всего 150 учетных записей, которые я написал программу selenium на python, чтобы выполнить небольшую задачу с ними. Он использовал один компьютер и занял около 5 часов. Теперь, однако, я рассчитываю масштабировать до 1000 учетных записей. По очевидным причинам я не хочу делать это на одном компьютере, эту задачу нужно выполнять один раз в день, и для выполнения этой задачи на одной машине потребуется около 30-35 часов. Я хочу использовать несколько машин, но также хочу иметь возможность легко масштабировать до трех, четырех и более.Дизайн системы Python. Мастер-раб? Или несколько мастеров?

Я переместил данные всех учетных записей в базу данных облаков amazon и могу легко подключиться к ней из моей программы python. Однако, как я упоминал ранее, я хочу, чтобы этот проект был легко масштабируемым. Я не хочу жестко задавать значения, так как один компьютер делает учетные записи 1-500, а другой - 501-1000 (что, если я добавлю еще 500 учетных записей и 2 машины? Я бы хотел, чтобы каждая машина выполняла 1500/4). Я думаю о подходе мастера. Где на каждой машине у меня есть программа, которую можно вызвать с некоторым количеством учетных записей в виде массива. И главная программа, которая запускается на моей машине, которая однажды в течение 24 часов может отправить команду с учетными записями, каждая машина должна использовать.

Затем я хочу, чтобы программа вернула мне данные, и когда каждое подчиненное устройство завершено, основная программа объединит данные, отправленные каждым ведомым и соответствующим образом обновит таблицу. ИЛИ каждый подчиненный, чтобы обновить таблицу самостоятельно, но я не уверен, что это возможно из-за блокировок таблиц (если кто-то мог бы прокомментировать это, это также было бы полезно)

Спасибо за чтение!

Редактировать: Если вы считаете это слишком широким, я не ищу точного ответа. Просто пытаюсь найти кого-то, кто сделал что-то подобное раньше. Просто перечислить технологию или способ сделать это, что я могу исследовать, мне очень помогло бы

+0

Возможно, стоит проверить [CoreOS] (https://coreos.com/). Тривиально выделять еще один контейнер с помощью Fleet, а etcd можно использовать для хранения глобальной информации, например, где находится база данных, кто главный (если вы идете с подходом master/slave). Делает поддержку/управление распределенной системой намного проще. – willnx

+0

Большое спасибо! Я обязательно начну исследовать это сейчас – k9b

ответ

0

Я уже делал подобное и заканчивал тем, что использовал конструкцию master-slave.

У меня был мастер с базой данных «jobs», и рабы попросили его выполнить свои задачи.

В моем случае этот процесс, что-то вроде этого:

  1. рабовладельца запрос на работу
  2. Мастер отправить 50 рабочих мест и статус изменения в БД с именем подчиненного
  3. ведомых работу закончить и говорит мастер
  4. изменение статуса
  5. Master в БД, чтобы заполнить и отправить новые задачи
  6. Повторять до тех пор, пока очередь не будет завершена вся

Таким образом, я мог бы добавить больше подчиненных, поскольку очередь заданий увеличивалась, и они могли иметь разную производительность. Некоторые из моих рабов делали в 3 раза больше, чем самые медленные, в зависимости от интернет-соединения и времени загрузки страницы.

Смежные вопросы