Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
898
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
951
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
941
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1725
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4398
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как создать экземпляр рабочего процесса, надежно основанный на внешнем событии?
немного новичок в работе windows, так что идите легко :)
Я хочу создать среду хоста рабочего процесса, которая имеет высокую доступность-минимум 2 WF хостов времени выполнения на отдельном оборудовании, указывающих на одну и ту же базу данных Persistence или tracking SQL.
Я ищу шаблон, с помощью которого я могу асинхронно создавать новые экземпляры рабочего процесса на основе некоторого внешнего события (т. е. некоторая часть данных обновляется в DB другим приложением). Для каждого события мне нужно создать ровно один экземпляр рабочего процесса и не имеет значения, на каком хосте этот экземпляр создан. Существует также некоторая гибкость в отношении продолжительности времени между событием и фактическим созданием экземпляра рабочего процесса.
Одним из решений, которое я рассматриваю, является наличие интерфейса WCF на хостах WF и размещение их за каким-то балансировщиком нагрузки. Это было бы тогда до любой части системы, которая запускает "event", чтобы сделать вызов WCF.
Я не очень доволен этим, потому что если хосты both\all WF не работают или иным образом недоступны, событие может быть "lost". Кроме того, я не смогу управлять нагрузкой так, как мне бы хотелось. Я представляю себе ситуацию, когда за небольшой промежуток времени может произойти много событий, но совершенно допустимо обрабатывать эти события некоторое время спустя.
Поэтому я считаю, что мне нужно каким-то образом сохранить события и отделить создание событий от обработки событий.
Помещает ли эти события в MSMQ или простую таблицу событий на сервере SQL, а хост WF просто периодически опрашивает очередь, является жизнеспособным решением? Опрос, кажется, такое грязное слово, хотя...
Будет ли полезен NServiceBus и прочный обмен сообщениями здесь?
Любые идеи будут высоко оценены.
Дополнение
База данных будет кластеризована с общим хранилищем оптоволоконных каналов. Сеть также будет избыточной. Для того, чтобы экземпляры среды выполнения WF имели отказоустойчивость, они должны указывать на общую службу персистентности, которая в данном случае является серверной частью SQL. Это высокая доступность, а не полная доступность :)
MSDN статья о надежности и высокой доступности WF
Кроме того, каждый экземпляр среды выполнения WF должен иметь точно такие же биты, поэтому для обновления потребуется удалить их все одновременно. Мне нравится идея сделать это, если потребуется, не разрушая всю систему.
Если вы используете службу WCF с netMsmqBinding, вы можете получать сообщения в очереди без необходимости опроса. Сообщения будут ждать, если нет службы, работающей, чтобы забрать их. Вы хотели бы убедиться, что используете кластерную очередь для надежности в случае, если основная машина очереди выходит из строя.
Также помните при обновлении, что вы не можете реанимировать экземпляры из старой версии Службы. Таким образом, чтобы обновить длительно работающие рабочие процессы, вам нужно остановить их от получения новых запросов и подождать, пока все экземпляры не будут завершены, прежде чем изменять биты, или старые экземпляры будут застрять в вашем хранилище сохраняемости навсегда.
Я бы пошел с таблицей событий MSMQ/. Опрос только грязный, если вы делаете это неправильно.
Одна вещь, которую нужно иметь в виду: вы говорите, что хотите несколько серверов WF для высокой доступности, но оба они используют один и тот же сервер SQL ? Высокая доступность работает только в том случае, если вы удаляете все отдельные точки сбоя, а не только некоторые из них.
Вот как я ее решил.
Я использую NServiceBus и с каждым хостом среды выполнения WF, указывающим на тот же messagebus (используя MSMQ в качестве транспорта). NServiceBus поддерживает транзакционное считывание с шины сообщений и откат. Если сообщение снято с шины, но процесс завершается до того, как сообщение будет полностью обработано, оно остается в очереди, и другой хост среды выполнения заберет его.
Чтобы узлы среды выполнения WF работали на отдельных машинах, messagebus\queue должен находиться на сервере Windows 2008 (MSMQ 4.0) или более поздней версии, так как более ранние версии MSMQ не поддерживают удаленное чтение транзакций. Примечание также, чтобы выполнить удаленное транзакционное чтение, машине, выполняющей чтение, также потребуется установить MSMQ 4.0 (т. е. Windows Server 2008)