Обновление службы Service Fabric, которая не учитывает токен отмены

У меня есть служба с отслеживанием состояния, работающая в кластере Service Fabric, который, как я теперь знаю, не учитывает переданный в нее токен отмены. Моя вина.

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

Я могу использовать Restart-ServiceFabricDeployedCodePackage или даже Restart-ServiceFabricNode, чтобы вручную удалить застрявшую реплику, но это приведет к кратковременному прерыванию обслуживания во время процесса обновления.

Есть ли способ выпустить это исправление без простоев?


person Sam Schneider    schedule 22.03.2018    source источник
comment
Это невозможно для службы с отслеживанием состояния, вам потребуется время простоя при обновлении. Если у вас есть версия, поддерживающая токен отмены, все будет в порядке.   -  person Murray Foxcroft    schedule 22.03.2018
comment
Я ценю обратную связь. Необходимо было знать, какие у меня были варианты. Если вы хотите опубликовать это как ответ, я его приму.   -  person Sam Schneider    schedule 22.03.2018


Ответы (2)


Это невозможно для службы с отслеживанием состояния, использующей инфраструктуру Service Fabric, вам потребуется время простоя при обновлении. Если у вас есть версия, поддерживающая токен отмены, все будет в порядке.

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

person Murray Foxcroft    schedule 22.03.2018

Единственные обходные пути, о которых я могу думать, хуже, поскольку они отключают части проверок работоспособности во время обновлений и «заставляют» процесс останавливаться. Это не делает вещи более изящными и не сокращает время простоя, а также имеет побочный эффект, который может привести к игнорированию других проблем со здоровьем.

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

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

person masnider    schedule 22.03.2018
comment
Большое спасибо! Мы только что завершили обновление, и у нас не было перебоев в обслуживании. Мы использовали Restart-ServiceFabricDeployedCodePackage, чтобы вручную принудительно переключить основной узел на последний в пути обновления. Затем, как только вторичные реплики были обновлены до фиксированной версии, мы снова запустили Restart-ServiceFabricDeployedCodePackage на текущей первичной реплике, чтобы одна из обновленных вторичных реплик стала первичной. - person Sam Schneider; 24.03.2018