Вопрос

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

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

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

Спасибо

Джон

Это было полезно?

Решение

Вот что сработало для меня.

Из пункта инфраструктуры вам нужно будет иметь 2 сервера Windows, которые сгруппированы. (2 стандартных поля Windows Server могут быть установлены и настроены, большинство администраторов SYS должны знать, как это сделать.) Затем установите свой сервис на обоих узлах кластера и выключите их оба и установить на ручное руководство. запускать. Затем добавьте кластерный ресурс в администратор кластера Windows для вашего сервиса, который будет управлять включением и выключением вашего сервиса на любом узле. Пусть кластер Windows управляет при запуске вашей службы и на каком узле. Это легкая часть кластеризации вашего сервиса.

С точки зрения обслуживания, вы захотите спроектировать свой сервис, чтобы он мог быть максимально без гражданства. Это своего рода хромой совет, но это действительно зависит от того, что делает ваш сервис. В дизайне просто предположим, что на некоторой точке во время жизни кода он остановится в самое наиболее возможное время. Как служба на Node2 узнает, где забрать, где остановился Node1? Это самая сложная часть, для которой вам нужно спроектировать. В зависимости от того, что выполняет ваша служба, вы можете оставить последнюю выполненную задачу в таблице БД или в файле общих данных. Вы также могли бы начать с самого начала и дважды проверить, была ли эта задача выполнена или нет, прежде чем действовать.

Опять же, это действительно будет зависеть от того, что необходимо выполнить услугу. Надеюсь это поможет.

Другие советы

Оба работают все время, вероятно, является самым простым решением, но вам необходимо убедиться, что вы никогда не превышаете 50% нагрузку, в противном случае, когда один сбой, другой станет перегруженным и, возможно, тоже потерпел неудачу.

Для синхронизации используйте транзакционную базу данных. Попытка написать свою собственную синхронизацию обычно приводит к ошибкам.

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

Я полагаю, что лучший способ справиться с отламся находится на уровне сети, где это возможно. Виртуальные IPS Fronting Load-сбалансированные или первичные/аварийные среды-это хороший способ избежать необходимости писать код для сценариев аварийного переключения.

В тех случаях, когда вы должны обрабатывать отказоустойчивость в коде:

  1. Тестирование подключения/сервисного вызова
  2. Если тест не удается, отправьте оповещения
  3. Не удалось в следующую «зарегистрированную» конечную точку службы

Есть два основных подхода.

  1. Клиенты знают о различном адресе конечной точки и переключаются по мере необходимости или по указанию другого механизма службы или конфигурации. (В качестве примера Демонстрационное приложение Stocktrader Является ли это.)

  2. Клиенты не знают, и вы используете стандартный подход балансировки сетевой нагрузки, который также может обеспечить отказоустойчивость. F5 - один из продуктов. Есть много других. Это в основном как NAT для услуг, все запросы проходят через ваш NLB и отправляют их на сервер и направляет ответ обратно в абонента. Эти продукты контролируют услуги и используют только те, которые встают. Также вы часто можете настроить его с помощью правил, чтобы он назначал новые запросы на серверы на основе рабочих нагрузок сервера. Windows Server имеет это Функциональность встроена в некоторой степени.

В любом случае, вы это делаете, намного проще, если ваши сервисные звонки "без сохранения состояния".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top