немного нового в Windows Workflow, так что будьте проще:)
Я хочу спроектировать среду хоста рабочего процесса с высокой доступностью - минимум 2 хоста WF времени выполнения на отдельном оборудовании, которые указывают на одно и то же постоянство или отслеживают базу данных SQL.
Я ищу шаблон, с помощью которого я могу асинхронно создавать новые экземпляры рабочего процесса на основе некоторого внешнего события (то есть некоторый фрагмент данных обновляется в БД другим приложением). Для каждого события мне нужно создать ровно один экземпляр рабочего процесса, и не имеет значения, на каком хосте создается этот экземпляр. Существует также некоторая гибкость в отношении продолжительности времени между событием и фактическим созданием экземпляра рабочего процесса.
Одним из решений, которое я рассматриваю, является наличие интерфейса WCF на хостах WF и размещение их за неким балансировщиком нагрузки. После этого все компоненты системы, запускающие «событие», будут выполнять вызов WCF.
Я не очень доволен этим, потому что, если оба \ все хосты WF не работают или недоступны по другим причинам, событие может быть "потеряно". Кроме того, я не смогу управлять загрузкой так, как мне хотелось бы. Я предполагаю ситуацию, когда за небольшой промежуток времени может быть много событий, но вполне приемлемо обрабатывать эти события через некоторое время.
Поэтому я считаю, что мне нужно как-то сохранить события и отделить создание события от обработки события.
Является ли помещение этих событий в MSMQ или в простую таблицу событий в SQL Server, и если хост WF периодически опрашивает очередь, является жизнеспособным решением? Хотя опрос кажется таким грязным словом ...
Будет ли здесь полезен NServiceBus и надежный обмен сообщениями?
Любое понимание будет высоко ценится.
Добавление
База данных будет кластеризована с общим хранилищем Fibre Channel. Сеть также будет избыточной. Чтобы экземпляры среды выполнения WF имели аварийное переключение, они должны указывать на общую службу персистентности, которая в данном случае является бэкэндом SQL. Это высокая доступность, а не полная доступность:)
Статья MSDN о надежности и высокой доступности WF
Кроме того, каждый экземпляр среды выполнения WF должен запускаться с одинаковыми битами, поэтому для обновления потребуется их сброс одновременно. Мне нравится идея сделать это, если потребуется, без разрушения всей системы.