Служба управления рабочими процессами
Служба управления рабочими процессами (WMS) – это служба Windows, предоставляющая следующие службы управления для экземпляров служб рабочих процессов.
Активация экземпляров служб рабочих процессов. Служба управления рабочими процессами активирует экземпляры служб рабочих процессов в хранилище экземпляров, когда экземпляры становятся готовыми к активации. Экземпляр службы рабочих процессов в хранилище экземпляров воспринимается как готовый к активации, если экземпляр становится готов к запуску, а узел службы, соответствующий экземпляру, не запущен на локальном компьютере. В следующем списке приводятся причины, по которым экземпляр становится готов к запуску.
Экземпляр выгружается и материализуется во время ожидания выполнения действия задержки, и действие задержки выполняется.
Узел службы завершает работу во время загрузки экземпляра.
Экземпляр имеет истекшую блокировку экземпляра.
Выполнение команд управления пользователем. Поставщик управления экземплярами для хранилища экземпляров добавляет команды, полученные от командлетов управления экземплярами Windows PowerShell, в очередь в этом хранилище экземпляров. Эта очередь создается и обслуживается поставщиком управления экземплярами. Служба управления рабочими процессами извлекает команды из очереди, выполняет их, и в случае успешного выполнения удаляет их из очереди.
В остальной части раздела дается более подробное объяснение работы этих служб. Дополнительные сведения об установке и настройке службы управления рабочими процессами см. в разделе Установка и настройка службы управления рабочими процессами.
Активация экземпляров служб рабочих процессов
По умолчанию служба управления рабочими процессами автоматически обнаруживает хранилища экземпляров, которые ей нужны для наблюдения за готовыми к активации экземплярами рабочих процессов. Для этого она проверяет файлы Web.config на корневом уровне, а также на уровне сайта и приложения, во время запуска службы и при изменении одного из этих файлов конфигурации. Вместо автоматического обнаружения можно указать конкретные хранилища экземпляров, за которыми должна наблюдать служба управления рабочими процессами.
Для каждого обнаруженного хранилища экземпляров служба управления рабочими процессами создает объект InstanceStore и подписывает его для события HasActivatableWorkflowEvent. Событие HasActivatableWorkflowEvent возникает, когда в хранилище экземпляров обнаруживается готовый к активации экземпляр рабочего процесса. После этого хранилище экземпляров прекращает наблюдение до тех пор, пока в хранилище не будет один раз вызвана команда QueryActivatableWorkflowsCommand.
Когда служба управления рабочими процессами получает событие HasActivatableWorkflowEvent, она выполняет QueryActivatableWorkflowsCommand в хранилище экземпляров, чтобы получить параметры активации, используемые для создания узла рабочего процесса.
Затем служба управления рабочими процессами вызывает службу управления службами, которая поддерживается приложением, содержащим службу, экземпляр которой необходимо активировать, и передает ей параметры активации. AppFabric автоматически добавляет службу управления службами, т.е. службу WCF, во все приложения, в которых имеется включенный атрибут serviceManagement. Служба управления службами предоставляет конечную точку активации, к которой служба управления рабочими процессами получает доступ с использованием адреса, построенного на основе имени сайта, виртуального пути приложения и хорошо известного адреса конечной точки активации службы. Служба управления рабочими процессами использует привязку net.pipe для этой конечной точки. Дополнительные сведения об этой службе см. в разделе Служба управления службами.
Служба управления службами активирует узел службы рабочих процессов с использованием параметров активации, полученных от службы управления рабочими процессами. Узел службы создает хранилище экземпляров (например хранилище экземпляров рабочих процессов SQL) и вызывает в этом хранилище метод для загрузки экземпляра службы рабочих процессов из хранилища экземпляров в память.
Предупреждение
Служба управления рабочими процессами мгновенно фиксирует любые изменения в реакциях на события хранилища экземпляров рабочих процессов SQL (SWIS) и соответствующих определениях хранилищ экземпляров в файлах конфигурации, начиная наблюдение за этими хранилищами. Тем не менее приложение продолжит использовать хранилище экземпляров, указанное в реакции на событие SWIS в старой версии файла конфигурации до момента утилизации домена приложений. Домен приложения будет утилизирован по завершении периода времени, заданного атрибутом delayNotificationTimeout элемента httpRuntime. Например, если значение delayNotificationTimeout равно 5000 (<httpRuntime delayNotificationTimeout = "5000" />), то домен приложения не будет утилизироваться в течение 5000 секунд.
Предупреждение
Если отключить приложения и пулы приложений, содержащие в общей сложности не менее 1000 служб, то служба управления рабочими процессами не сможет активировать доступные для активации экземпляры служб. Чтобы обойти проблему, перед отключением пулов приложений или отдельных приложений можно приостановить экземпляры служб, принадлежащие к этим пулам приложений или отдельным приложениям.
Выполнение команд управления пользователем.
При выдаче команды для экземпляра службы рабочих процессов с помощью командлета Windows PowerShell поставщик управления экземплярами добавляет эту команду в очередь команд хранилища экземпляров, используемого этой службой. Очередь команд создается и обслуживается поставщиком управления экземплярами.
Служба управления рабочими процессами автоматически обнаруживает хранилища экземпляров, которые ей нужны для наблюдения за командами. Для этого она проверяет файлы Web.config на корневом уровне, а также на уровне сайта и приложения, во время запуска и при изменении одного из этих файлов конфигурации. Служба управления рабочими процессами создает поставщика управления экземплярами для каждого обнаруженного хранилища экземпляров и опрашивает этого поставщика о командах через определенные промежутки времени. В частности, для получения команд служба управления рабочими процессами вызывает в поставщике управления экземплярами метод BeginTryReceive.
Поставщик управления экземплярами в свою очередь извлекает команду, но не удаляет ее из очереди команд в хранилище экземпляров, и возвращает эту команду в службу управления рабочими процессами. Поставщик устанавливает блокировку с коротким сроком действия на эту команду в очереди.
Затем служба управления рабочими процессами вызывает соответствующий метод конечной точки управления экземплярами, предоставленный узлом службы рабочих процессов, чтобы выполнить эту команду для целевого экземпляра службы рабочих процессов. Для службы управления рабочими процессами требуется, чтобы конечная точка управления экземплярами включала привязку net.pipe и имела включенную безопасность транспорта. Служба управления рабочими процессами формирует адрес конечной точки, объединяя имя сайта, виртуальный путь службы и хорошо известный путь конечной точки управления экземплярами. Поставщик управления экземплярами предоставляет сведения об имени сайта и виртуальном пути службы. Привязка конечной точки управления экземплярами жестко встраивается в привязку net.pipe.
Если команда выполняется успешно, то служба управления рабочими процессами вызывает метод Complete в поставщике управления экземплярами, и поставщик удаляет команду из очереди. Если выполнение команды завершается неудачно, то служба управления рабочими процессами вызывает для этого сбоя метод Abandon поставщика управления экземплярами, и поставщик принимает решение, удалить ли команду из очереди, или сохранить ее там для дополнительных повторов. Поставщик управления экземплярами для хранилища экземпляров рабочих процессов SQL будет пытаться выполнить команду 5 раз, прежде чем удалит ее из очереди команд. Если во время выполнения команды произойдет сбой службы управления рабочими процессами, то срок действия блокировки со временем истечет, и команда может быть возобновлена тем же или другим экземпляром службы управления рабочими процессами позднее.
Если координатор распределенных транзакций (Майкрософт) включен, и для него разрешена входящая и исходящая связь, то команды управления экземплярами выполняются как транзакции. Например, если приостановить экземпляр службы рабочего процесса, то сразу после обработки соответствующей команды состояние экземпляра будет отображаться в диспетчере IIS и возвращаться командлетами как Приостановлен. Тем не менее, если координатор распределенных транзакций отключен или неправильно настроен, команды управления экземплярами не будут выполняться как транзакции. В этом случае состояние экземпляра не будет изменено на Приостановлен, пока экземпляр не будет выгружен и материализован в хранилище экземпляров, поскольку экземпляр бездействовал дольше указанного периода времени (параметр "Выгружать при бездействии"). Обратите внимание, что при изменении параметров координатора распределенных транзакций следует перезапустить службу управления рабочими процессами, чтобы она могла использовать измененные параметры.
Совет
Если обнаружится, что одна или несколько команд управления экземплярами остаются в состоянии ожидания дольше, чем ожидается, следует убедиться, что служба управления рабочими процессами запущена на всех серверах в составе фермы. Если экземпляр в настоящее время работает на конкретном сервере (по данным наблюдения), но выданная для этого экземпляра команда управления не выполняется, следует проверить, работает ли на этом сервере служба управления рабочими процессами.
Предупреждение
Служба управления рабочими процессами использует транзакционные команды, если включены параметры координатора распределенных транзакций "Разрешить входящие" и "Разрешить исходящие". Если координатор распределенных транзакций отключен, также следует явно отключить эти параметры, чтобы использовались нетранзакционные команды.
Поддержка сред ферм серверов
Обычно в каждом узле фермы серверов работает один экземпляр службы управления рабочими процессами. Экземпляр службы управления рабочими процессами может наблюдать за несколькими хранилищами экземпляров. В узле могут выполняться несколько экземпляров служб управления рабочими процессами с разными идентификаторами Windows. Рекомендуется запускать только один экземпляр службы управления рабочими процессами для хранилища экземпляров в узле. Если в одном узле работает несколько экземпляров служб управления рабочими процессами, наблюдающих за одним хранилищем экземпляров, то могут возникнуть проблемы масштабируемости.
Экземпляр, который ранее работал в одном узле, может быть возобновлен службой управления рабочими процессами в другом узле и активирован в этом узле. Это помогает сбалансировать рабочую нагрузку для служб управления рабочими процессами во всей ферме серверов.
При выдаче команды управления для экземпляра рабочего процесса этот экземпляр рабочего процесса может быть запущен где-либо в ферме или не запущен нигде. Служба управления рабочими процессами направляет эту команду на компьютер, на котором работает этот рабочий процесс, или указывает локальному компьютеру загрузить рабочий процесс и выполнить команду. Это позволяет выдавать команды экземплярам, не зная, на каком компьютере работает этот экземпляр.
Зависимые компоненты
Приведенные далее пункты относятся к службе управления рабочими процессами (WMS).
Служба управления рабочими процессами активирует и выполняет команды для экземпляров служб рабочих процессов, которые размещаются с помощью WorkflowServiceHost только в среде IIS/WAS. Служба управления рабочими процессами не поддерживает службы рабочих процессов, размещенные с помощью другого узла или в другой среде размещения.
Служба управления рабочими процессами активирует экземпляры служб рабочих процессов, использующие хранилище экземпляров для устойчивой сохраняемости состояния.
Служба управления рабочими процессами активирует экземпляры служб рабочих процессов, принадлежащие приложению, которое предоставляет службу управления службами. Служба управления рабочими процессами использует службу управления службами для активации узла службы, который в свою очередь будет загружать экземпляр из хранилища.
Для использования службы управления рабочими процессами привязка net.pipe должна быть добавлена на сайт, и протокол net.pipe должен быть включен в приложении, содержащем службу. Если протокол net.pipe не включен в приложении, то служба управления рабочими процессами регистрирует ошибку в журнале событий.
Для использования службы управления рабочими процессами требуется экземпляр службы рабочих процессов, предоставляющий конечную точку управления экземплярами. Служба управления рабочими процессами использует эту конечную точку для выдачи команд, таких как Suspend и Resume, для экземпляров служб рабочих процессов.
Служба управления рабочими процессами работает с любым хранилищем экземпляров, поставляемым с поставщиком хранилища экземпляров и поставщиком управления экземплярами.
Службе управления рабочими процессами требуется, чтобы хранилище экземпляров создавало событие HasActivatableWorkflowsEvent, когда экземпляр становится готовым к активации.
Примечание
Сведения о службе управления рабочими процессами, имеющие отношение к безопасности, см. в разделе Настройка безопасности для хранилищ сохраняемости.
Безопасность
Службе управления рабочими процессами необходимо подключение к конечной точке управления экземплярами, предоставляемой узлом служб рабочих процессов экземплярам служб рабочих процессов, и к конечной точке управления службами, предоставляемой веб-приложением, для запуска узла служб рабочих процессов и последующей загрузки экземпляров служб рабочих процессов. Группа AS_Administrators имеет доступ к обеим этим конечным точкам. Идентификатор безопасности (SID) службы управления рабочими процессами AppFabric входит в эту группу. Следовательно, не требуется явно добавлять в группу AS_Administrators учетную запись, под которой работает служба управления рабочими процессами.
В следующем списке приводятся рекомендации по безопасности хранилищ экземпляров и файлов конфигурации, используемых службой управления рабочими процессами.
Служба управления рабочими процессами считывает сведения о конфигурации, включая строки подключения, из файлов конфигурации в память. На этом этапе служба управления рабочими процессами не обрабатывает зашифрованные строки подключения, поэтому строки подключения должны быть заданы в обычном текстовом формате. Пользователь-злоумышленник может получить доступ ко всем конфиденциальным данным (включая имена пользователей и пароли в строках подключения) в памяти. Соответственно, не следует указывать конфиденциальную информацию в строках подключения, определяемых в файлах конфигурации.
Рекомендуется использовать встроенную проверку подлинности Windows для строк подключения, хранящихся в файлах Web.config. Если использование интегрированной проверки подлинности Windows невозможно, и в строке подключения, заданной в файле Web.config, указаны имя и пароль пользователя, следует установить соответствующие списки управления доступом в файлах конфигурации. Убедитесь в том, что группа AS_Administrators имеет доступ к файлам Web.config, к которым должна иметь доступ служба управления рабочими процессами. Следует помнить, что задание списков управления доступом не помешает злоумышленнику получить доступ к строкам подключения в памяти.
Чтобы включить зашифрованное взаимодействие SQL, следует добавить текст «Encrypt=yes» в строку подключения SQL. Если для построения строки подключения используется класс SqlConnectionStringBuilder, задайте для свойства Encrypt значение true. Дополнительные сведения о включении шифрования связи на сервере см. в статье https://go.microsoft.com/fwlink/?LinkID=187283. Злоумышленник сможет манипулировать базой данных SQL Server и выполнять в ней команды, если не защитить канал связи между приложением и SQL Server.
Очередь команд не обслуживает какие-либо сведения об учетных данных. Пользователь, являющийся членом группы AS_Administrators, сопоставленной с ролью WorkflowAdministrators SQL, имеет право управления всеми экземплярами в хранилище, а не некоторыми типами экземпляров. Следовательно, экземпляры, не предназначенные для управления различными пользователями, необходимо включать в разные хранилища экземпляров, и роль WorkflowAdministrators SQL для таких хранилищ экземпляров должна сопоставляться с разными группами Windows.
Каждый раз при изменении файла Web.config служба управления рабочими процессами читает этот файл и проверяет, не были ли определения хранилищ добавлены в этот файл или удалены из него. Чтобы пользователи, не прошедшие проверку подлинности, не вызывали обработку файла службой управления рабочими процессами, рекомендуется ограничить доступ на запись в файлы Web.config.
В зависимости от уровня отслеживания функция наблюдения AppFabric собирает данные в больших масштабах. Рекомендуется не сочетать хранилища данных наблюдения и сохраняемости в одной базе данных. В таком случае переполнение хранилища данных наблюдения не повлияет на производительность подсистемы.
В следующей таблице описываются роли SQL, защищающие доступ к очереди команд и к базе данных сохраняемости. Сведения из этой таблицы относятся только к хранилищу экземпляров рабочих процессов SQL.
Роль SQL | Описание | Группа Windows |
---|---|---|
WorkflowAdministrators |
Член этой роли может помещать (добавлять) команды в очередь команд, являющуюся частью базы данных сохраняемости. Чтобы пользователь мог управлять экземплярами (например с помощью командлетов Windows PowerShell), он должен быть членом этой роли. |
AS_Administrators |
WorkflowManagementServiceUsers |
Член этой роли может удалять (извлекать) команды из очереди. Учетная запись, под которой выполняется служба управления рабочими процессами, должна быть членом этой роли, чтобы эта служба могла извлекать команды из очереди команд. |
AS_Administrators |
WorkflowActivationUsers |
Член этой роли может активировать экземпляры служб рабочих процессов, существующие в базе данных сохраняемости и готовые к запуску. |
AS_Administrators |
InstanceStoreObservers |
Член этой роли может запрашивать экземпляры из хранилища экземпляров и извлекать команды из очереди команд в хранилище. |
AS_Administrators и AS_Observers |
InstanceStoreUsers |
Член этой роли может загружать и сохранять экземпляры. Действия загрузки и сохранения выполняются службой узла, запустившей рабочий процесс. Если экземпляры службы Service1 существуют в экземпляре хранилища Store1, то пул приложений AppPool1, запустивший этот узел службы, должен выполняться с учетными данными, имеющими права пользователя в хранилище Store1. |
IIS_USRS |
Рекомендации по безопасности на основе сценариев для сохраняемости см. в разделе Настройка безопасности для хранилищ сохраняемости.
См. также
Основные понятия
Настройка безопасности для хранилищ сохраняемости
Установка и настройка службы управления рабочими процессами
2012-03-05