Service Fabric中升级时的热身服务

时间:2016-06-13 12:02:18

标签: azure-service-fabric warm-up

我们想知道是否有一种内置的方式来加热服务,作为S​​ervice Fabric中服务升级的一部分,类似于您可以预热的各种方式,例如基于IIS的应用程序池在被请求命中之前。理想情况下,我们希望各个服务在初始化之前执行一些预热任务(可能是缓存加载,恢复等),然后才被视为已启动并可供其他联系服务使用。此预热应该是升级域处理的一部分,因此升级过程应该等待预热完成并且服务报告为OK / Ready。

其他人如何处理此类方案,控制向服务结构发信号通知特定服务已完全启动并准备好与其他服务联系的过程?

2 个答案:

答案 0 :(得分:2)

在健康政策中有这个概念:

  

HealthCheckWaitDurationSec 在Service Fabric评估应用程序运行状况之前,在升级域上完成升级之后等待的时间(以秒为单位)。此持续时间也可以被视为应用程序在被认为是健康之前应该运行的时间。如果运行状况检查,则升级过程将进入下一个升级域。如果运行状况检查失败,Service Fabric将等待一段时间(UpgradeHealthCheckInterval),然后再次重试运行状况检查,直到达到HealthCheckRetryTimeout。默认值和建议值为0秒。

Source

这是一个固定的等待期。

您还可以发出健康事件yourself。例如,您可以报告健康状况'未知'热身。并调整您的健康政策(HealthCheckWaitDurationSec)以检查此情况。

答案 1 :(得分:1)

报告健康状况可以提供帮助。您无法报告未知,您必须尽早报告错误,然后在服务准备就绪时清除错误。警告和确定不影响升级。要清除错误,您的服务可以报告健康状况Ok,RemoveWhenExpired = true,低TTL(在how to report上阅读更多信息)。

您必须根据最长预热时间增加HealthCheckRetryTimeout。否则,如果执行运行状况检查并且将群集评估为“错误”,则升级将失败(并根据您的策略进行回滚或暂停)。

所以,事件的顺序是:

  • 您的服务报告错误 - "正在进行预热"
  • 升级等待固定的HealthCheckWaitDurationSec(您可以将此设置为最短时间进行预热)
  • 升级执行运行状况检查:如果服务尚未预热,则运行状况为“错误”,因此升级将重试,直到达到HealthCheckRetryTimeout或您的服务不再处于“错误”状态(预热已完成且服务已清除)错误)。