Я хочу разработать приложение, которое подключается к некоторым источникам ввода и обрабатывает сообщения, которые оно читает (подумайте о BizTalk в принципе, но не так тяжело). Для производительности и надежности я хотел бы включить горизонтальное масштабирование службы, очевидно, за счет использования общего хранилища (например, БД) в качестве механизма очереди сообщений.
Однако потоки, которые обращаются к таким ресурсам, как электронная почта или папка на диске, нельзя масштабировать по горизонтали. Только один экземпляр должен быть запущен одновременно с чтением из этого источника ввода. (Дальнейшая бизнес-логика обработки сообщений, конечно, может находиться на нескольких узлах).
Это идеальный кандидат для активной / пассивной кластеризации. Один узел считается «активным» и активно подключается к «одноэкземплярным» ресурсам (например, почтовому ящику), а другие - «пассивным». Если «Активный» узел умирает, тогда другие «Пассивные» узлы выбирают новый «Активный» узел между собой.
Теперь вопрос: есть ли где-нибудь .NET-библиотека, которая помогает реализовать обычную логику отказоустойчивой кластеризации? (то есть реализация необходимой отправки / обнаружения пульса и процесса выбора «активного» узла). Поскольку я не хочу изобретать велосипед.
Что я вижу из уже проведенного исследования:
- BizTalk Server изначально поддерживает эту функциональность, но я не использую BizTalk, поскольку он слишком тяжелый и дорогой (но я хочу имитировать эту функциональность)
- Windows Server поддерживает отказоустойчивую кластеризацию (в некоторых высокопроизводительных версиях, таких как Windows Server 2008 Enterprise или Datacenter), но, опять же, это дорогое решение (поскольку для каждого узла потребуется дорогая лицензия)
- Существует много информации о том, как должен работать алгоритм аварийного переключения, но я нигде не вижу реализации с открытым исходным кодом ... (только в коммерческих продуктах, продаваемых с премией)
Я понимаю, что это может считаться продвинутой и желательной функциональностью, и поэтому коммерческие решения для нее дороги. Это нормально - если нет реализации или библиотеки с открытым исходным кодом, я разработаю ее самостоятельно. Я просто не хочу тратить усилия на то, что он уже существует.
ОБНОВЛЕНИЕ 02.12.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.