我可以在 azure 函数中使用重试策略吗?
Can I use a retry policy in an azure function?
我正在使用事件中心临时存储数据,这些数据将首先保存到 azure table 存储中,然后索引到 elasticsearch。
我在想我应该在 azure 函数中执行存储保存调用,并使用 NEST 对 elasticsearch 索引执行相同的操作。
处理数据很重要,所以我想我会使用 Polly 作为重试策略,以防 elasticsearch 服务器出现故障。但是,重试策略不会使 azure 函数变得昂贵吗?
Azure Functions 是正确的方法吗?
是的。您可以使用一个库,或者更好地编写一个简单的线性退避策略——
比如尝试 5 次,中间休息 5 秒——然后做一些类似
的事情
context.log.error({
message: `Transient failure. This is Retry number ${retryCount}.`,
errorCode: errorCodeFromCallingElasticSearch,
errorDetails: moreContextMaybeSomeStack
});
每次您点击重试逻辑时,它都会转到 App Insights(确保您 integrate with App Insights,否则您没有任何操作或它完全是黑暗的操作)。
然后您可以查询真正失误的频率,并了解在 95% 百分位数时情况如何。
偶尔 运行 比正常的 1 秒执行时间多出 10 秒的功能会产生额外费用,但可能远不及完整的专用应用程序服务计划。如果它接近,就切换到那个,这意味着你的功能主要是打开而不是关闭 - 这仍然是 运行 一个功能的完美案例。
App Insights can also trigger alerts 如果某些指标出现问题,例如您的重试次数在 24 小时内上升到 11 次,您可能想了解该偏差。您需要将重试计数作为自定义指标发送以触发警报:
context.log.metric("CallElasticSearchRetryCount", retryCount);
是的,您可以在 Azure Functions 中使用 Polly 进行重试。一些进一步的考虑:
是的,您需要为重试时间付费。但是考虑到你的Elastic Search是"mostly up",偶尔重试的额外代价应该不会太高
如果你也想重试保存到 Table 存储,你将不得不自己编写用 Polly 装饰的调用,而不是其他首选输出绑定
确保检查写入顺序对您是否重要以及您是否应该重试 Table 在开始写入 Elastic 之前,存储写入完成,反之亦然。否则,您可以与 async
并行执行它们,然后 Task.WaitAll
Function的最大执行时间默认为5分钟,您可以配置为最长10分钟。如果您需要处理比这更长的停机时间,您可能需要一个计划 B。开始将失败时间超过 4(或 9)分钟的事件复制到专用队列,然后从那里重试。或者在停机期间禁用该功能。
我正在使用事件中心临时存储数据,这些数据将首先保存到 azure table 存储中,然后索引到 elasticsearch。 我在想我应该在 azure 函数中执行存储保存调用,并使用 NEST 对 elasticsearch 索引执行相同的操作。 处理数据很重要,所以我想我会使用 Polly 作为重试策略,以防 elasticsearch 服务器出现故障。但是,重试策略不会使 azure 函数变得昂贵吗? Azure Functions 是正确的方法吗?
是的。您可以使用一个库,或者更好地编写一个简单的线性退避策略—— 比如尝试 5 次,中间休息 5 秒——然后做一些类似
的事情context.log.error({
message: `Transient failure. This is Retry number ${retryCount}.`,
errorCode: errorCodeFromCallingElasticSearch,
errorDetails: moreContextMaybeSomeStack
});
每次您点击重试逻辑时,它都会转到 App Insights(确保您 integrate with App Insights,否则您没有任何操作或它完全是黑暗的操作)。
然后您可以查询真正失误的频率,并了解在 95% 百分位数时情况如何。
偶尔 运行 比正常的 1 秒执行时间多出 10 秒的功能会产生额外费用,但可能远不及完整的专用应用程序服务计划。如果它接近,就切换到那个,这意味着你的功能主要是打开而不是关闭 - 这仍然是 运行 一个功能的完美案例。
App Insights can also trigger alerts 如果某些指标出现问题,例如您的重试次数在 24 小时内上升到 11 次,您可能想了解该偏差。您需要将重试计数作为自定义指标发送以触发警报:
context.log.metric("CallElasticSearchRetryCount", retryCount);
是的,您可以在 Azure Functions 中使用 Polly 进行重试。一些进一步的考虑:
是的,您需要为重试时间付费。但是考虑到你的Elastic Search是"mostly up",偶尔重试的额外代价应该不会太高
如果你也想重试保存到 Table 存储,你将不得不自己编写用 Polly 装饰的调用,而不是其他首选输出绑定
确保检查写入顺序对您是否重要以及您是否应该重试 Table 在开始写入 Elastic 之前,存储写入完成,反之亦然。否则,您可以与
async
并行执行它们,然后Task.WaitAll
Function的最大执行时间默认为5分钟,您可以配置为最长10分钟。如果您需要处理比这更长的停机时间,您可能需要一个计划 B。开始将失败时间超过 4(或 9)分钟的事件复制到专用队列,然后从那里重试。或者在停机期间禁用该功能。