2012-06-21 6 views
1
  1. Предположим, что у нас есть N одинаковых служб Windows (разработанных на C# /. NET), работающих одновременно на N серверах приложений. «К сожалению», у каждой службы есть свои собственные состояния в памяти (скажем, «в 22:00 мне нужно выполнить задание»).Синхронизация состояний службы между серверами приложений

  2. Через пользовательский интерфейс пользовательского интерфейса может изменить состояние (например, изменить время начала работы от 10 до 12) одной из этих служб.

Мой вопрос: что лучше всего синхронизировать состояния между этими службами после состояния пользовательских изменений? (Желательно на платформе .NET).

p.s. вы можете задаться вопросом, почему мы пытаемся запустить один и тот же сервис на разных серверах. Это потому, что менеджеры считают, что избыточное предотвращает отказ одной точки. Но это также вызывает проблему выше, когда экземпляр службы содержит свои собственные состояния в памяти, которые могут быть изменены пользователем через пользовательский интерфейс.

Любое предложение здесь оценивается!

ответ

0

Похоже, что вы используете локальное состояние службы в качестве основной конфигурации/настроек/etc. для каждого экземпляра службы. Поскольку вы хотите, чтобы они синхронизировались, это означает обновление каждого рабочего экземпляра.

Я могу думать о нескольких подходах, как решить эту проблему, но, основываясь на информации предоставленной Вами я бы с централизованной конфигурации с обновления опроса:

  • Центральная БД для конфигурации/таких как время работы.
  • Все сервисы при инициализации считывают из центрального db, чтобы получить настройки/config и применить их в состоянии к экземпляру службы.
  • Пользовательский интерфейс администратора просто сохраняет данные в БД конфигурации/настроек.
  • Все службы периодически запрашивают обновления из БД и применяют соответственно.

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

+0

Спасибо! (после стольких лет :)) –

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