Service Fabric,正常关闭"旧"服务实例



我有很多 ASP.NET API 解决方案在 Service Fabric 中运行。

在应用程序升级(或 VM 负载平衡或服务缩减缩放等(时我想确保没有数据丢失,这基本上意味着任何 1.0.0 服务实例都需要完成所有仍在运行的请求才能删除它们。同时,生成任何新的 1.0.1 实例是完全可以的。

顺丰有什么办法可以处理这种情况吗?

我无法理解此处提供的可靠服务生命周期信息。此外,在我的请求之外处理取消令牌是不可行的。我也不想取消任何请求...我希望所有这些都完成。

采用滚动升级方法的 Service Fabric 升级服务实例\副本,这意味着,如果您有多个实例,它将一次拆除一个升级域,因此不会有太大区别,因为其他实例仍将收到请求,直到所有实例\副本都更新。

您创建的方法也没有多大效果,因为 10 秒的延迟会阻止您中断正在处理的请求,但不会阻止您接收可能会被中断的新请求。

为避免在正在更新的实例上收到新请求,您可以将取消令牌传递给 ASP.NET 并创建一个中间件来检查节点是否正在关闭并拒绝任何新请求,然后如果请求花费的时间不超过延迟时间,您的延迟可能会生效。

如果您关心的是没有中断正在处理的请求,那么有效执行此操作的唯一方法是跟踪这些请求并等待然后在关闭服务之前完成,这是一个 ASP.NET 限制,无能为力。