Проблемы с производительностью нескольких экземпляров - PullRequest
2 голосов
/ 16 декабря 2011

Я использую версию Windows Workflow 4.0 в своем проекте для управления рабочим процессом.В системе создается один проект, который имеет 100 документов, которые должны быть одобрены пользователями, и каждый документ должен следовать одному и тому же рабочему процессу.Обработка документов параллельна для 100 документов.Который когда-либо заканчивается, может перейти к следующему шагу рабочего процесса.[Например: документ создан - отправлен на проверку - проверен - утвержден].

Теперь я создаю 100 экземпляров для 100 документов.Но я не уверен в производительности, когда количество документов увеличивается феноменально (например, 10000 документов).Также в любой момент времени в системе может быть создано несколько проектов.

Есть ли лучший способ справиться с этим сценарием?

Приложение основано на ASP.Net и работает под управлением IIS.

Ответы [ 4 ]

1 голос
/ 20 декабря 2011

Ваши шаги рабочего процесса (документ создан - отправлен на проверку - рецензирован - утвержден) звучат так, как будто они связаны с человеческими взаимодействиями, то есть они будут выполняться в человеческом масштабе времени. Минуты как минимум, скорее всего часы или дни. Workflow 4.0 разработан с учетом этого варианта использования, поскольку экземпляры, которые не выполняются активно, будут сохранены в вашем хранилище базы данных. Масштабирование до десятков тысяч экземпляров не должно быть проблемой.

0 голосов
/ 02 апреля 2012

Если вы размещаете свой WF с помощью AppFabric (windows server) в IIS, то это не проблема.Шаги, которые вы описываете, означают, что ваши WF ожидают задержек или сообщений в результате какого-либо взаимодействия с человеком.Процесс будет простаивать до тех пор, пока эти события, то есть после небольшого простоя, они не будут выгружены из памяти.Вы можете обрабатывать миллионы одновременных процессов, подобных этому.

0 голосов
/ 13 марта 2012

Я не могу помочь вам оптимизировать ваш сценарий, но вы можете оптимизировать производительность, сначала кэшируя действия (вместо того, чтобы каждый раз загружать xaml и создавая экземпляр), а затем определяя, когда правильно выгружать экземпляры в память. *

0 голосов
/ 16 декабря 2011

Вы можете управлять элементами в пакетном режиме или в режиме реального времени.Необходимо рассмотреть вопрос о том, каким должен быть процесс в реальном времени.Может ли быть достаточно выполнять пакетный рабочий процесс каждую минуту ( около реального времени ), а не накладные расходы в 100-1000 WF в секунду?

Вам определенно нужно учитывать накладные расходы вашего проекта ( масштабируемость в реальном времени будет проблемой ), поэтому вы можете пересмотреть подход в реальном времени, который у вас есть, если объем значительно увеличится.Я бы нацелился на пакетный подход к опросу на предварительно настроенной частоте и использовал бы DelayActivity.

...