Балансировка нагрузки консольного приложения или службы - PullRequest
3 голосов
/ 29 марта 2010

Таким образом, легко сбалансировать нагрузку веб-приложения ASP.NET. Вы устанавливаете балансировщик нагрузки между двумя серверами, и если веб-сервер не отвечает на порт 80, он не будет получать запросы.

Существуют ли проверенные методы, позволяющие сделать это для консольного приложения C # или службы Windows, которые выполняют действия по своему усмотрению? Существуют ли какие-либо структуры для того, чтобы знать, живы или нет процессы однорангового узла, делать биения и т. Д.?

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

1 Ответ

3 голосов
/ 29 марта 2010

NServiceBus действительно обрабатывает это для вас с помощью процесса Distributor (описанного здесь: http://docs.particular.net/nservicebus/scalability-and-ha/distributor/). Общий хост, который поставляется с NServiceBus, позволяет вам запускать точно такой же код и конфигурацию как в виде приложения консоли, так и служба windows (описана здесь: http://docs.particular.net/nservicebus/hosting/nservicebus-host/).

Это может быть как для событий, так и для обычных командных сообщений.

Если вы хотите, чтобы «главный» процесс решал, что делать после завершения всей работы с балансировкой нагрузки, он предоставляется вам в форме инфраструктуры саги (описанной здесь: http://docs.particular.net/nservicebus/sagas/ и продемонстрирован в производственный образец, который поставляется с NServiceBus).

Короче, вы должны быть в значительной степени покрыты.

...