Мастер / работник масштабируется? - PullRequest
2 голосов
/ 25 октября 2010

У меня есть модель master / worker, реализованная с отдельными процессами Python.Главный процесс содержит списки заданий / результатов, которые защищены мьютексами.Многие рабочие работают на многих машинах (около 200 рабочих процессов).

Я заметил, что на каждой машине рабочие, как правило, выполняют на 0-20% больше или меньше работы, чем другие рабочие процессы, и что машины выполняют 0-На 20% больше или меньше работы, чем у других.Самые быстрые / самые медленные рабочие и машины каждый день разные.

Это концептуальная проблема модели мастер / работник, намекает ли она на проблемную реализацию или все нормально?

1 Ответ

3 голосов
/ 25 октября 2010

Самое простое объяснение +/- 20% состоит в том, что вы видите проблему с балансировкой нагрузки;Некоторые рабочие получают на 20% больше работы, чем некоторые из их сверстников.Это может представлять проблему реализации, или это может быть просто дискретность;если у вас есть 200 рабочих процессов, но 1040 примерно одинаковых заданий, то у 1/5 рабочих процессов будет 20% дополнительной работы, и с этим ничего не поделаешь, если вы не можете поделить работуболее точно.

Мастер / рабочий масштабируется (и обрабатывает эти проблемы балансировки нагрузки примерно так же легко, как и все остальное) до момента, когда конкуренция за общие ресурсы в главном процессе начинает становиться нетривиальной.Вы можете немного увеличить масштабирование, уменьшив критические секции (защищенные мьютексами) до абсолютного минимума;путем объединения рабочих единиц таким образом, чтобы было меньше запросов (но обратите внимание, что это работает в противоположном направлении улучшения балансировки нагрузки);или имея несколько мастеров (потенциально иерархию мастеров).Если это не сработает, вы должны начать рассматривать больше одноранговых алгоритмов планирования работы, где больше нет единого узкого места.Одноранговый аналог мастера / работника называется кража работы , что является одной из тех вещей, которые (IMHO), похоже, не должны работать, пока кто-то не покажет вам, что работает;это было недавно популяризировано Cilk .Идея состоит в том, что каждый получает список задач, и если коллегам требуется больше работы, они крадут его друг у друга случайным образом и продолжают пыхтеть, пока не выполнят.Это сложнее реализовать, чем мастер / рабочий, но позволяет избежать узкого места с одним мастером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...