Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
В этом документе рассматриваются рекомендации по проектированию и настройке рабочих процессов, связанных с сохраняемостью рабочих процессов.
Проектирование и реализация устойчивых рабочих процессов
Как правило, рабочие процессы выполняют работу в короткие периоды, которые чередуются с временем, в течение которого рабочий процесс неактивен, так как ожидает события. Это событие может быть таким, как сообщение или таймер с истекающим сроком действия. Чтобы выгрузить экземпляр рабочего процесса, когда он находится в режиме простоя, узел службы должен сохранить состояние экземпляра рабочего процесса. Это возможно только в том случае, если экземпляр рабочего процесса не находится в зоне без сохранения (например, в ожидании завершения транзакции или в ожидании асинхронного обратного вызова). Чтобы разрешить разгрузку простого экземпляра рабочего процесса, автор рабочего процесса должен использовать области транзакций и асинхронные действия только для действий с коротким временем выполнения. В частности, автор должен держать задержки в этих зонах без сохранения как можно короче.
Рабочий процесс можно сохранить только в том случае, если все типы данных, используемые рабочим процессом, сериализуются. Кроме того, пользовательские типы, используемые в персистентных рабочих процессах, должны быть сериализуемыми с помощью NetDataContractSerializer, чтобы сохраняться через SqlWorkflowInstanceStore.
Экземпляр рабочего процесса не может быть восстановлен в случае сбоя узла или компьютера, если он не был сохранен. Как правило, рекомендуется сохранить экземпляр рабочего процесса в начале жизненного цикла рабочего процесса.
Если рабочий процесс интенсивно используется в течение длительного времени, рекомендуется регулярно сохранять экземпляр рабочего процесса на протяжении всего периода интенсивного использования. Это можно сделать, добавив Persist действия в последовательность действий, которые поддерживают активность экземпляра рабочего процесса. Таким образом, перезапуск домена приложения, сбои узла или сбои компьютера не приводят к восстановлению системы до начала периода высокой нагрузки. Помните, что добавление Persist действий в рабочий процесс может привести к снижению производительности.
Windows Server App Fabric значительно упрощает настройку и использование сохраняемости. Дополнительные сведения см. в разделе Сохраняемость в Windows Server App Fabric
Настройка параметров масштабируемости
Требования к масштабируемости и производительности определяют параметры следующих параметров:
Эти параметры должны быть заданы следующим образом, в соответствии с текущим сценарием.
Сценарий: небольшое количество экземпляров рабочих процессов, требующих оптимального времени отклика
В этом сценарии все экземпляры рабочих процессов должны оставаться загруженными при простое. Установите TimeToUnload на большое значение. Использование этого параметра предотвращает перемещение экземпляра рабочего процесса между компьютерами. Используйте этот параметр, только если одно или несколько из следующих значений имеют значение true:
Экземпляр рабочего процесса получает одно сообщение в течение всего времени существования.
Все экземпляры рабочих процессов выполняются на одном компьютере
Все сообщения, которые принимает экземпляр рабочего процесса, обрабатываются на одном компьютере.
Используйте Persist действия или установите TimeToPersist равно 0, чтобы включить перезагрузку вашего экземпляра рабочего процесса после сбоев сервера или компьютера.
Сценарий: Экземпляры рабочих процессов простаивают в течение длительного периода времени
В этом сценарии установите TimeToUnload значение 0, чтобы освободить ресурсы как можно скорее.
Сценарий: Экземпляры рабочих процессов получают несколько сообщений в течение короткого периода времени
В этом сценарии установите TimeToUnload значение 60 секунд, если эти сообщения получены тем же компьютером. Это предотвращает быструю последовательность выгрузки и загрузки экземпляра рабочего процесса. Это также не сохраняет экземпляр в памяти слишком долго.
Установите TimeToUnload в 0, а InstanceLockedExceptionAction в BasicRetry или AggressiveRetry, если эти сообщения могут быть получены разными компьютерами. Это позволяет экземпляру рабочего процесса загружаться другим компьютером.
Сценарий: Рабочий процесс использует активности задержки с короткой длительностью
В этом сценарии SqlWorkflowInstanceStore регулярно опрашивает базу данных сохраняемости для экземпляров, которые должны быть загружены из-за истечения срока действия Delay . Если SqlWorkflowInstanceStore найдет таймер, который истечет в следующем интервале опроса, экземпляр хранилища рабочих процессов SQL сокращает интервал опроса. Следующий опрос будет происходить сразу после истечения срока действия таймера. Таким образом, хранилище экземпляров рабочих процессов SQL обеспечивает высокую точность таймеров, выполняющихся дольше интервала опроса, заданного параметром RunnableInstancesDetectionPeriod. Чтобы обеспечить своевременную обработку более коротких задержек, экземпляр рабочего процесса должен оставаться в памяти не менее одного интервала опроса.
Установите TimeToPersist значение 0, чтобы записать время окончания срока действия в базу данных сохраняемости.
Установите TimeToUnload на большее или равное RunnableInstancesDetectionPeriod, чтобы сохранить экземпляр в памяти по крайней мере на один интервал опроса.
Не рекомендуется уменьшать RunnableInstancesDetectionPeriod, так как это приводит к увеличению нагрузки на базу данных постоянства. Каждый узел службы, использующий SqlWorkflowInstanceStore, проводит опрос базы данных один раз за период обнаружения. Настройка RunnableInstancesDetectionPeriod на слишком малый интервал времени может привести к снижению производительности вашей системы, если количество хостов служб велико.
Настройка хранилища экземпляров рабочих процессов SQL
Хранилище экземпляров рабочего процесса SQL имеет следующие параметры конфигурации:
InstanceEncodingOption Этот параметр указывает SqlWorkflowInstanceStore на сжатие состояния экземпляра рабочего процесса. Сжатие уменьшает объем данных, хранящихся в базе данных сохраняемости, и уменьшает сетевой трафик в случае, если база данных сохраняемости находится на выделенном сервере базы данных. Если используется сжатие, требуется вычислительные ресурсы для сжатия и извлечения состояния экземпляра. В большинстве случаев сжатие повышает производительность.
InstanceCompletionAction Этот параметр предписывает SqlWorkflowInstanceStore сохранить или удалить завершенные экземпляры. Сохранение завершенных экземпляров увеличивает требования к хранилищу базы данных постоянства и приводит к увеличению размеров таблиц, что увеличивает время поиска в таблицах. Если для отладки или аудита не требуются завершенные экземпляры, рекомендуется указать SqlWorkflowInstanceStore удаление завершенных экземпляров. Удаленные экземпляры должны храниться только в том случае, если пользователь устанавливает процесс их удаления в конечном итоге. Обратите внимание, что ключи корреляции нельзя повторно использовать, пока завершенный экземпляр рабочего процесса находится в хранилище экземпляров.
RunnableInstancesDetectionPeriod Этот параметр определяет максимальный интервал, с которым SqlWorkflowInstanceStore опрашивает базу данных хранилища для экземпляров, которые должны быть загружены после того, как Delay истечет срок действия активности. Если SqlWorkflowInstanceStore найдет таймер, который истекает в следующем интервале опроса, он сокращает интервал опроса, чтобы следующий опрос происходил сразу после того, как таймер истечет. Таким образом, хранилище экземпляров рабочих процессов SQL обеспечивает высокую точность таймеров, выполняющихся дольше RunnableInstancesDetectionPeriod.
Не рекомендуется уменьшать RunnableInstancesDetectionPeriod, так как это приводит к увеличению нагрузки на базу данных устойчивости. Каждый узел службы, использующий SqlWorkflowInstanceStore, проводит опрос базы данных один раз за период обнаружения. Установка RunnableInstancesDetectionPeriod слишком небольшого интервала может привести к снижению производительности системы, если количество хостов служб велико.
HostLockRenewalPeriod Этот параметр определяет интервал, который хост использует для продления блокировки в базе данных постоянного хранения. Сокращение этого интервала позволит ускорить восстановление экземпляров рабочих процессов в случае сбоя узла или компьютера. С другой стороны, короткий период продления блокировки увеличивает нагрузку на базу данных сохраняемости. Каждый узел службы, использующий SqlWorkflowInstanceStore, обновляет свои блокировки в базе данных один раз за период продления. Если компьютер запускает множество узлов служб, убедитесь, что нагрузка, вызванная продлением блокировки, не снижает производительность системы. Если это так, рассмотрите возможность увеличения HostLockRenewalPeriod.
InstanceLockedExceptionAction Если этот параметр включен, SqlWorkflowInstanceStore делает повторные попытки загрузить заблокированный экземпляр в течение следующих 30 секунд. Установите значение InstanceLockedExceptionAction BasicRetry или AggressiveRetry, если рабочий процесс получает несколько сообщений в течение короткого времени, а эти сообщения принимаются различными компьютерами.
Так как механизм повторных попыток загрузки не приводит к дополнительным затратам на производительность, если повторные попытки загрузки не выполняются, InstanceLockedExceptionAction всегда следует включить.