Обновление приложения Service Fabric с помощью PowerShell


Наиболее часто используемый и рекомендуемый подход к выполнению обновлений состоит в отслеживаемом последовательном обновлении. Платформа Azure Service Fabric осуществляет мониторинг работоспособности обновляемого приложения на основе набора политик работоспособности. После обновления домена обновления Service Fabric оценивает работоспособность приложения, после чего переходит к следующему домену обновления или регистрирует сбой в соответствии с политиками работоспособности.

Отслеживаемое обновление приложения может выполняться с использованием управляемых или собственных API, PowerShell, Azure CLI, Java или REST. Инструкции по обновлению с помощью Visual Studio см. в статье Руководство по обновлению приложений Service Fabric с помощью Visual Studio.

Service Fabric выполняет отслеживаемое последовательное обновление, позволяя администратору приложений настраивать политики оценки работоспособности, которые Service Fabric будет использовать для определения работоспособности приложения. Кроме того, администратор может настроить действие, выполняемое при сбое оценки работоспособности (например, выполнение автоматического отката). В этом разделе рассматривается отслеживаемое обновление одного из примеров пакета SDK, использующего PowerShell.

На этой странице можно просмотреть обучающее видео, в котором также показана процедура обновления приложения:

Примечание

Параметры ApplicationParameters не сохраняются после обновления приложения. Чтобы сохранить текущие параметры приложения, пользователь должен сначала получить параметры и передать их в вызов API обновления, как показано ниже:

$myApplication = Get-ServiceFabricApplication -ApplicationName fabric:/myApplication
$appParamCollection = $myApplication.ApplicationParameters

$applicationParameterMap = @{}
foreach ($pair in $appParamCollection)
{
    $applicationParameterMap.Add($pair.Name, $pair.Value);
}

Start-ServiceFabricApplicationUpgrade -ApplicationName fabric:/myApplication -ApplicationTypeVersion 2.0.0 -ApplicationParameter $applicationParameterMap -Monitored -FailureAction Rollback

Шаг 1. Построение и развертывание образца визуальных объектов

Создайте и опубликуйте приложение. Для этого щелкните правой кнопкой мыши проект приложения VisualObjectsApplication и выберите Опубликовать. Дополнительные сведения см. в руководстве по обновлению приложений Service Fabric. Или разверните приложение с помощью PowerShell.

Примечание

Чтобы в PowerShell можно было использовать хотя бы одну из команд Service Fabric, необходимо сначала подключиться к соответствующему кластеру с помощью командлета Connect-ServiceFabricCluster. Предполагается, что кластер уже настроен на локальном компьютере. См. статью, посвященную настройке среды разработки Service Fabric.

Создав проект в Visual Studio, вы можете использовать команду PowerShell Copy-ServiceFabricApplicationPackage , чтобы скопировать пакет приложения в ImageStore. Если вы хотите проверить пакет приложения локально, используйте командлет Test-ServiceFabricApplicationPackage. Следующий шаг — регистрация приложения в среде выполнения Service Fabric с помощью командлета Register-ServiceFabricApplicationType. Следующий шаг — запуск экземпляра приложения с помощью командлета New-ServiceFabricApplication. Эти три шага аналогичны действиям при использовании меню Развертывание в Visual Studio. После завершения подготовки следует удалить скопированный пакет приложения из хранилища образов, чтобы сократить потребление ресурсов. Если тип приложения больше не требуется, необходимо отменить его регистрацию. См. дополнительные сведения о развертывании и удалении приложений с помощью PowerShell.

Теперь можно использовать обозреватель структуры служб для просмотра кластера и приложения. Приложение имеет веб-службу, к которой можно перейти, введя в адресной строке браузера Internet Explorer следующее: http://localhost:8081/visualobjects Вы сможете увидеть несколько плавающих визуальных объектов, перемещающихся по экрану. Кроме того, можно использовать командлет Get-ServiceFabricApplication , чтобы проверить состояние приложения.

Шаг 2. Обновление образца визуальных объектов

Вы можете заметить, что в версии, развернутой на шаге 1, визуальные объекты не вращаются. Давайте обновим это приложение до версии, в которой визуальные объекты будут вращаться.

Выберите проект VisualObjects.ActorService в решении VisualObjects и откройте файл StatefulVisualObjectActor.cs. В этом файле перейдите к методу MoveObject, а затем закомментируйте this.State.Move() и раскомментируйте this.State.Move(true). Это изменение приведет к вращению объектов после обновления службы.

Вам также необходимо обновить файл ServiceManifest.xml (в разделе PackageRoot) проекта VisualObjects.ActorService. Обновите CodePackage и версию службы до версии 2.0 и соответствующие строки в файле ServiceManifest.xml. Чтобы изменить файл манифеста, в Visual Studio можно щелкнуть решение правой кнопкой мыши и выбрать пункт меню Изменить файлы манифеста .

После внесения изменений манифест должен выглядеть следующим образом (измененные части выделены полужирным шрифтом):

<ServiceManifestName="VisualObjects.ActorService" Version="2.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">

<CodePackageName="Code" Version="2.0">

Теперь файл ApplicationManifest.xml (находится в проекте VisualObjects в решении VisualObjects) обновлен для использования версии 2.0 проекта VisualObjects.ActorService. Кроме того, приложение версии 1.0.0.0 обновлено до версии 2.0.0.0. Файл ApplicationManifest.xml должен выглядеть как следующий фрагмент кода.

<ApplicationManifestxmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="VisualObjects" ApplicationTypeVersion="2.0.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">

 <ServiceManifestRefServiceManifestName="VisualObjects.ActorService" ServiceManifestVersion="2.0" />

Теперь выполните сборку проекта. Для этого в Visual Studio выберите проект ActorService и щелкните правой кнопкой мыши пункт Собрать. Если выбрать Перестроить все, то потребуется обновить версии для всех проектов, так как код изменится. Теперь создайте пакет обновленного приложения. Для этого щелкните правой кнопкой проект VisualObjectsApplication и выберите в меню Service Fabric пункт Пакет. При этом должен создаться пакет приложения, пригодный для развертывания. Обновленное приложение готово к развертыванию.

Шаг 3. Определение политик работоспособности и параметров обновления

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

Тем не менее давайте увеличим значение атрибута HealthCheckStableDuration до 180 секунд (чтобы все службы были работоспособны хотя бы 120 секунд, до того как обновление будет запущено в другом домене обновления). Давайте также установим значение атрибута UpgradeDomainTimeout в значение "1200 секунд", а значение UpgradeTimeout — в значение "3000 секунд".

Наконец, давайте также настроим UpgradeFailureAction , чтобы выполнять откат. Этот параметр указывает Service Fabric выполнять откат приложения до предыдущей версии при возникновении проблем во время обновления. Таким образом при запуске обновления (на шаге 4) заданы следующие параметры:

FailureAction = Rollback

HealthCheckStableDurationSec = 180

UpgradeDomainTimeoutSec = 1200

UpgradeTimeout = 3000

Шаг 4. Подготовка приложения к обновлению

Теперь приложение создано и готово для обновления. Если открыть окно PowerShell с правами администратора и ввести команду Get-ServiceFabricApplication, в нем отобразится информация о том, что вы развернули приложение типа VisualObjects версии 1.0.0.0.

Пакет приложения хранится по следующему относительному пути в зависимости от того, куда был извлечен SDK Service Fabric: Samples\Services\Stateful\VisualObjects\VisualObjects\obj\x64\Debug. Следует найти папку Package в этом каталоге (где хранится пакет приложения). С помощью временных меток проверьте, что это самая последняя версия (возможно, вам нужно будет соответствующим образом изменить пути).

Теперь давайте скопируем обновленный пакет приложения в ImageStore структуры службы (место, где структурой служб сохраняются пакеты приложения). Параметр ApplicationPackagePathInImageStore информирует структуру служб о том, где находится пакет приложения. Мы поместили обновленное приложение в папку "VisualObjects_V2" с помощью следующей команды (возможно, вам снова нужно будет изменить пути).

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\Samples\Services\Stateful\VisualObjects\VisualObjects\obj\x64\Debug\Package -ApplicationPackagePathInImageStore "VisualObjects\_V2"

Далее необходимо зарегистрировать приложение в Service Fabric. Для этого выполните команду Register-ServiceFabricApplicationType:

Register-ServiceFabricApplicationType -ApplicationPathInImageStore "VisualObjects\_V2"

Если предыдущая команда не выполняется, скорее всего, вам нужно перестроить все службы. Как упомянуто на шаге 2, возможно, потребуется обновить версию объекта WebService.

Рекомендуется удалить пакет приложения после успешной регистрации приложения. Удаление пакетов приложений из хранилища образов освобождает системные ресурсы. Если хранить неиспользуемые пакеты, они занимают место на диске и создают проблемы производительности приложения.

Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore "VisualObjects\_V2" -ImageStoreConnectionString fabric:ImageStore

Шаг 5. Начало обновления приложения

Теперь вы можете запустить обновление приложения с помощью команды Start-ServiceFabricApplicationUpgrade:

Start-ServiceFabricApplicationUpgrade -ApplicationName fabric:/VisualObjects -ApplicationTypeVersion 2.0.0.0 -HealthCheckStableDurationSec 60 -UpgradeDomainTimeoutSec 1200 -UpgradeTimeout 3000   -FailureAction Rollback -Monitored

Имя приложения соответствует имени, указанному в файле ApplicationManifest.xml. Структура служб использует это имя, чтобы распознать приложение, которое будет обновлено. Если для времени ожидания вы установили слишком малые значения, может возникнуть сообщение об ошибке, информирующее о проблеме. См. раздел по устранению неполадок или увеличьте значения времени ожидания.

Вы можете отслеживать ход обновления с помощью Service Fabric Explorer или команды PowerShell Get-ServiceFabricApplicationUpgrade:

Get-ServiceFabricApplicationUpgrade fabric:/VisualObjects

Через несколько минут в состоянии, полученном с помощью предыдущей команды PowerShell, отобразится информация о завершении обновления всех доменов обновления. Все визуальные объекты в окне браузера должны вращаться.

В качестве упражнения вы можете выполнить обновление с версии 2 до версии 3 или с версии 2 до версии 1. Переход с версии 2 на версию 1 также считается обновлением. Попробуйте изменить значения времени ожидания и параметры политики работоспособности в качестве тренировки. При развертывании в кластере Azure необходимо правильно настроить параметры. Рекомендуется использовать консервативный подход при настройке значений времени ожидания.

Дальнейшие действия

Руководство по обновлению приложений Service Fabric с помощью Visual Studio поможет вам выполнить поэтапное обновление приложения с помощью Visual Studio.

Управление обновлениями приложения осуществляется с помощью параметров обновления.

Узнайте, как использовать сериализацию данных, чтобы обеспечить совместимость обновлений приложения.

Дополнительные разделысодержат сведения о работе с расширенными функциями при обновлении приложения.

Сведения об устранении распространенных проблем при обновлении приложений см. в статье Устранение неполадок обновления приложения.