В прошлом интервью меня спросили, как мне написать критически важную службу Windows, которая должна поддерживать 100% -ное время безотказной работы, быть очень отзывчивым, а также быть обновляемым. Служба была описана как удаленное приложение, которое принимает запросы, выполняет вычисления и отправляет ответ.
Мое решение состояло в том, чтобы иметь очень общий сервис, который просто выступает в качестве шлюза. Эта услуга никогда не будет остановлена. Он будет помещать запросы в очередь и перенаправлять их на другую службу в отдельном домене приложения, который фактически обрабатывал бы запрос. Там должно быть по крайней мере две из этих служб обработки, поэтому можно было бы сбрасывать их, чтобы их обновлять, а другая ответила на входящие запросы. Интерфейсы между службами будут включать в себя возможность рукопожатия, чтобы проверить, работает ли служба. Очень небольшой тайм-аут будет существовать, поэтому, если служба будет полностью завершена, она не будет содержать запрос. Я также подчеркнул, что это решение может значительно ослабевать, так как вы можете добавить больше этих сервисов в разные коробки.
Интервьюер не был слишком сумасшедшим в этой идее из-за проблем с задержкой между общением между доменами приложений и даже по сети. Я заявлял, что для критически важного приложения вы должны создать надежную инфраструктуру, поскольку только программное обеспечение не может быть ответом. Он также сказал, что в настоящее время у них есть система, использующая функцию ресекции. Я думал о загрузке ассемблий в домен приложения и просмотре каталога для изменений сборки, но это кажется слишком склонным к ошибкам.
Кто-нибудь строит что-либо с аналогичными требованиями? Какие решения вы использовали? Что не работает? Является ли отражение полезным вариантом?