Как отложить автоматическое обновление Service Fabric во время выполнения - PullRequest
0 голосов
/ 07 июня 2018

У нашей команды недавно произошел инцидент из-за перезапуска наших служб без сохранения состояния для автоматических обновлений Azure Runtime.Одна из служб находилась в процессе обработки задачи, когда она была принудительно закрыта.Эти задачи могут занимать до 4 часов.

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

Другими словами, как мы можем сообщить Azure, когда наши службы готовы к обновлению среды выполнения сервисной фабрики?

Ответы [ 2 ]

0 голосов
/ 16 июня 2018

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-capacity#the-durability-characteristics-of-the-cluster

Привилегия уровня надежности позволяет Service Fabric приостанавливать любой запрос инфраструктуры уровня ВМ (например, перезагрузку ВМ, перезапись ВМ или миграцию ВМ)

Бронза - Нет привилегий.Это по умолчанию.Серебро - задания инфраструктуры могут быть приостановлены на 10 минут на единицу времени.Золото - Задания инфраструктуры могут быть приостановлены на 2 часа на UD.Золотая долговечность может быть включена только для виртуальных машин полного узла, таких как D15_V2, G5 и т. Д.

https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.servicefabric.models.nodetypedescription.durabilitylevel?view=azure-dotnet

0 голосов
/ 07 июня 2018

Ну, во-первых, почему бы вам не переключиться в режим ручного обновления?

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

Службе сообщается, что она будет остановлена ​​и т. Д. Service Fabric с помощью CancellationToken, который передается в RunAsync.,Следующее взято из документов :

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

Службы, которые не обрабатывают отмену чисто, могут столкнуться с несколькими проблемами.Эти операции выполняются медленно, поскольку Service Fabric ожидает постепенного прекращения работы служб.

И этот говорит то же самое, но немного короче о методе RunAsync:

Убедитесь, что cancellationToken передан RunAsync (CancellationToken), ипосле того, как это было сигнализировано, RunAsync (CancellationToken) корректно завершает работу как можно скорее.

В вашем случае вы должны действовать в случае отмены CancellationToken.Вам следует как-то сохранить состояние вашей текущей работы, чтобы вы могли возобновить его при следующем вызове RunAsync.

Если это действительно длительное задание, которое не может быть прервано и возобновлено каким-либо образом, вам следует подумать об этомработа, выполненная вне надежной службы, например, веб-работа или что-то еще.Или согласитесь с тем, что какая-то работа может быть потеряна.

Другими словами, вы не можете сказать Service Fabric дождаться закрытия службы.Это нарушит балансировку и надежность кластера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...