шаблон дизайна с просьбой о совете вытащить модель - PullRequest
6 голосов
/ 01 декабря 2009

Мое приложение имеет несколько рабочих (работающих над разными вещами как разные процессы) и некоторые ресурсы (рабочий блок). Разные работники должны обрабатывать все рабочие объединения. Например, у меня есть такие работники, как W1, W2 и W3, рабочий блок U1 и U2. Затем W1 необходимо обработать U1 и U2, так же, как W2 и W3. Ограничение: разные работники не могут работать на одном и том же рабочем месте в одно и то же время.

У меня есть два дизайна, и я хочу спросить совета, какой из них лучше.

  1. Push-модель: использование центрального планировщика заданий для назначения рабочих единиц разным работникам, чтобы гарантировать, что разные работники не работают на одном и том же рабочем месте;
  2. Модель извлечения: каждый работник запрашивает центральный планировщик заданий для обработки рабочих единиц, а планировщик заданий выбирает подходящую рабочую единицу, которая не обрабатывается другим работником для запрашивающего работника.

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

спасибо заранее, George

Ответы [ 2 ]

3 голосов
/ 01 декабря 2009

Преимущество модели «тянуть» состоит в том, что каждый работник знает, сколько он загружен, и, следовательно, может управлять своей нагрузкой.

Кроме того, модель «pull» может быть более «разъединенной», поскольку переменная «load» хранится локально для работника, тогда как в модели «push» для передачи этого состояния необходим протокол связи (и служебные данные). .


Подумайте об успехе модели «тяги» в автомобильной промышленности: она пошла от традиционной модели «толчка», где запасы было трудно отследить, и требовала большого количества обратной связи к теперь успешной и вездесущей модели «тяги».


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


Обратите внимание, что в любой модели требуется протокол координации связи: характер протокола координации отличается. В «модели проталкивания» существует дополнительный цикл управления, необходимый для сообщения / опроса «коэффициента нагрузки» каждого работника. При масштабировании системы требуется больше пропускной способности, больше состояния на стороне планировщика, больше задержек и т. Д.

2 голосов
/ 01 декабря 2009

Я бы, конечно, использовал модель Pull, поскольку ее проще реализовать.

Я могу только представить 2 реализации:

  1. Модель извлечения = 1 служба с набором задач плюс множество рабочих клиентов.

  2. Push-модель = 1 услуга с набором задач и списком активных подписчиков плюс множество активных подписчиков (работников).

Поскольку модель Pull не должна реализовывать полнодуплексные сервисные вызовы или список абонентов, это проще.

...