2014-11-26 2 views
2

У меня есть веб-роль, выполняющая некоторую фоновую обработку в фоновом потоке.Как реализовать активный/пассивный шаблон с облачными сервисами (веб-роль)?

Я хочу запустить несколько экземпляров веб-роли, но я хочу, чтобы одна из них обрабатывала фоновые задания. Если назначенный экземпляр, выполняющий фоновый процесс, перестает работать по какой-то причине, я хочу, чтобы другой экземпляр занял его место.

Какой самый простой способ реализовать это в Azure?

я подумал о периодически проверять Instances коллекцию Role объекта в RoleEnvironment.Roles, и запустить фоновый поток, только если текущий экземпляр имеет наименьший Id (или решить, с некоторыми другими эвристики), таким образом, только один экземпляр будет обрабатывать фон рабочие места.
Должен ли этот подход работать? Влияют ли экземпляры ролей друг на друга, и соответственно ли обновляется коллекция Instances?

+0

Почему бы не использовать уборщица роль для запуска ваших фоновых задач? –

+0

Да, это было бы прямолинейно, но наш клиент явно просил иметь только веб-роль, поэтому дополнительные экземпляры не нужны из-за дополнительной роли рабочего. –

+0

Как долго будут выполняться ваши фоновые задачи? Веб-роль (размещение фоновой задачи в IIS) может быть проблематичной - IIS может отменить поток, пул приложений может быть переработан и т. Д. [См. Здесь] (http://haacked.com/archive/2011/10/16/the- опасность-of-implementation-recurring-background-tasks-in-asp-net.aspx /) – b2zw2a

ответ

1

Вы можете использовать blob lease mechanism для управления своими экземплярами.

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

Если вы положитесь на Instance с наименьшим идентификатором, вы можете оказаться в ситуации, когда ваш экземпляр запущен и работает, но фоновый поток обработки висит/убит.

Have выглядеть here и здесь here

Update: Leader Election Pattern

+0

Я реализовал это и, похоже, отлично работает. Благодаря! –

+1

Я знаю, что немного поздно, так как вы уже реализовали его, но шаблоны и методы описывали весь шаблон [здесь - шаблон выбора лидера] (http://msdn.microsoft.com/en-us/library/dn568104.aspx) – b2zw2a

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