Azure service fabric 服务结构升级的预热服务

Azure service fabric 服务结构升级的预热服务,azure-service-fabric,warm-up,Azure Service Fabric,Warm Up,我们想知道,在service Fabric中,作为服务升级的一部分,是否有一种内置的方法来预热服务,类似于您可以预热的各种方法,例如,在基于IIS的应用程序池被请求击中之前预热它们。理想情况下,我们希望各个服务在被视为已启动并可供其他服务联系之前,执行一些预热任务,作为其初始化的一部分(可能是缓存加载、恢复等)。此预热应为升级域处理的一部分,因此升级过程应等待预热完成,服务报告为OK/Ready 其他人如何处理此类场景,控制向服务结构发送信号的过程,表明特定服务已完全启动并准备好与其他服务联系?

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


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

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

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

这是一个固定的等待时间


您还可以发出运行状况事件。例如,你可以在热身时报告健康状况“未知”。并调整您的健康策略(HealthCheckWaitDurationSec)以检查这一点。

报告健康状况会有所帮助。您不能报告未知,必须尽早报告错误,然后在服务准备就绪时清除错误。警告和确认不影响升级。若要清除错误,您的服务可以报告运行状况状态Ok、RemoveWhenExpired=true、低TTL(请参阅更多信息)

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

因此,事件的顺序是:

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

感谢您的回复@LoekD。我们已经尝试过这一点,但升级过程将从初始升级域继续进行,而不考虑此等待时间。据我们目前所知,似乎我们需要很早发出一个未知的健康事件,然后在热身结束后将其设置为OK。很抱歉在这个问题上丢了球,@oana platon。我刚刚对此进行了测试,并且有一个可行的解决方案,该解决方案将延迟升级域的进度,直到服务进入OK状态,由自定义运行状况事件控制(请参阅)。