Вопрос

Допустим, у меня есть автономная служба Windows, работающая в автомате Windows Server. Как убедиться, что это очень доступно?

1). Каковы рекомендации по уровню дизайна, которые вы можете предложить?

2). Как сделать его очень доступным, как первичный / вторичный, например, растворы кластеризации, которые в настоящее время доступны на рынке

3). Как бороться с сквозными проблемами в случае каких-либо неудачных сценариев

Если кто-то другой, вы можете подумать, пожалуйста, добавьте его здесь ..

Примечание:Вопрос связан только с Windows и Windows Services, пожалуйста, постарайтесь подчиняться этому правилу :)

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

Решение

Чтобы сохранить службу, по крайней мере, запустив, вы можете организовать для диспетчера службы Windows, чтобы автоматически перезапустить сервис, если он сбивает сбои (см. Вкладка «Восстановление» в свойствах сервиса.) Более подробные данные доступны здесь, включая пакетный скрипт для установки этих свойств - Перезапустите сервис Windows, если он сбивает

Высокая доступность - это больше, чем просто сохранение обслуживания снаружи - сама услуга должна быть построена с учетом высокой доступности (т. Е. Используйте хорошие практики программирования на протяжении всего, соответствующие факторы, пары-ресурсы Aquire и Release), а также весь стресс Проверено, чтобы убедиться, что он останется под нагрузками.

Для IdEmpotent-команд, переносимые прерывистые сбои (такие как заблокированные ресурсы), могут быть достигнуты путем повторного вызова команды определенное количество раз. Это позволяет услуге защищать клиента от сбоя (до точки.) Клиент также должен быть закодирован для ожидаемого отказа. Клиент может обрабатывать сбой службы несколькими способами - ведение журнала, подсказывая пользователю, повторную группу X раз, введя боевик фатальной ошибки и выходом, являются все возможные обработчики, которые подходят для вас, зависит от ваших требований. Если у сервиса есть «Государство разговоров», когда сервис не удается усердно (т. Е. Процесс перезапускается), клиент должен быть в курсе и обрабатывать ситуацию, поскольку она обычно означает текущее состояние разговора было потеряно.

Единственная машина будет уязвима для сбоя аппаратного обеспечения, поэтому, если вы собираетесь использовать одну машину, чтобы убедиться, что у него есть избыточные компоненты. HDDS особенно склонны к ошибкам, поэтому имеют по меньшей мере зеркальные диски или массив RAID. PSUS - это следующая слабая точка, поэтому убыточный PSU также стоит, как и ИБП.

Что касается кластеризации, Windows поддерживает кластеризацию службы, и управляет сервисами, используя имя сети, а не отдельных имен компьютеров. Это позволяет вашему клиенту подключаться к любой машине, запущенной службой, а не жестко закодированным именем. Но если вы не принимаете дополнительные меры, это отключение ресурсов - направляет запросы от одного экземпляра обслуживания другому. Состояние Confertaion обычно теряется. Если ваши услуги пишут в базе данных, то следует также кластеризоваться, чтобы также обеспечить надежность и обеспечения доступных изменений для всего кластера, а не только на локальном узле.

Это действительно только верхушка айсберга, но я надеюсь, что это даст вам идеи начать дальнейшее исследование.

Служба кластеризации Microsoft (MSCS)

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

Если вы сломаете проблемы, вы пытаетесь решить, я думаю, вы, вероятно, придумаете несколько ответов. Как упомянул Джастин в комментарии, нет одного ответа. Это полностью зависит от того, что делает ваш сервис и как его используют клиенты. Вы также не указываете какие-либо подробности о взаимодействии клиент-сервера. Http? TCP? UDP? Другой?

Вот некоторые вещи, которые нужно подумать, чтобы начать вас.

1) Что вы делаете, если сервис или сервер опустится?

  • Как насчет более одного экземпляра вашего сервиса на отдельных серверах?

2) Хорошо, но теперь как клиенты знают о нескольких услугах?

  • Вы можете жесткий код в списке в каждый клиент (не рекомендуется)
  • Вы можете использовать DNS Round-Robin, чтобы отскочить запросы во всех них.
  • Вы можете использовать устройство балансировки нагрузки.
  • Вы можете иметь отдельный сервис, который знает обо всех других услугах и может направлять клиентов на доступные услуги.

3) Так что, если одна услуга снизится?

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

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

Если служба не раскрывает какой-либо интерфейс для подключения клиента, вы можете:

  • Трансляция или выдержать сообщение «Я живу» или сигнализируйте на базу данных / реестра / TCP / что бы вы живы

  • Иметь вторую услугу (монитор), которые проверяют эти сигналы «Я живы» и пытаетесь перезапустить службу в случае его сокращения

Но если у вас есть клиент, подключающийся к этой услуге через namedPipes / tcp / etc, клиент должен будет проверить адрес аппарата со службой, работающей в базе данных, или иметь что-то любимое, как интеллектуальный переключатель для перенаправления трафика.

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