Я хочу разработать приложение, которое подключается к некоторым источникам ввода и обрабатывает сообщения, которые оно читает (подумайте о BizTalk в принципе, но не так сильно).Для повышения производительности и надежности я хотел бы включить горизонтальное масштабирование службы, очевидно, используя общее хранилище (например, БД), чтобы действовать в качестве механизма очереди сообщений.
Однако потоки, которые обращаются к таким ресурсам, как электронная почта илипапка на диске не может быть масштабирована по горизонтали.Только один экземпляр должен быть запущен за один раз, считывая данные из этого источника ввода.(Дальнейшая бизнес-логика обработки сообщений, конечно, может находиться на нескольких узлах).
Это идеальный кандидат для активной / пассивной кластеризации.Один узел считается «активным» и активно подключается к ресурсам «одного экземпляра» (например, к почтовому ящику), в то время как другие являются «пассивными».Если «активный» узел умирает, то другие «пассивные» узлы выбирают между собой новый «активный» узел.
Теперь вопрос: есть ли где-нибудь библиотека .NET, которая помогает реализовать обычнуюлогика отказоустойчивой кластеризации?(т. е. реализация необходимой отправки / обнаружения пульса и «выбора» активного узла).Поскольку я не хочу изобретать велосипед.
Что я вижу из уже проведенного исследования:
- BizTalk Server изначально поддерживает эту функциональность, но я не использую BizTalk какэто слишком тяжело и дорого (но я хочу эмулировать эту функциональность)
- Windows Server поддерживает отказоустойчивую кластеризацию (в некоторых высокопроизводительных версиях, таких как Windows Server 2008 Enterprise или Datacenter), но, опять же, это дорогое решение(поскольку каждому узлу потребуется дорогая лицензия)
- Существует много информации о том, как должен работать алгоритм восстановления после сбоя, но я нигде не вижу реализации с открытым исходным кодом ... (только в коммерческих продуктах, продаваемых по более высокой цене).)
Я понимаю, что это может считаться расширенной и желательной функциональностью, и, следовательно, почему коммерческие решения для нее дороги.Это хорошо - если не будет реализации или библиотеки с открытым исходным кодом, я разработаю ее самостоятельно.Я просто не хочу тратить усилия, поскольку он уже существует.
ОБНОВЛЕНИЕ 12/02/2011: Найден SAForum (http://www.saforum.org/link/linkshow.asp?link_id=214720),, который является веб-сайтом, который публикуется открытымспецификация для разработки концепций доступности сервисов. Существует также OpenSAF (http://www.opensaf.org/Welcome-to-OpenSAF%E2%84%A2~151213~14944.htm), и реализация с открытым исходным кодом C ++ спецификаций на SAForum. Выглядит комплексно, но очень тяжело. Мне потребуется много времени, чтобы пройтись по спецификациями документации. Он также охватывает гораздо больше, чем просто переключение при сбое, предлагая спецификации для полностью масштабируемой распределенной системы (уведомления, распределенные события, блокировки, управление кластерами и т. д.) ... По-прежнему никаких признаков реализации .NET нигде.