我可以在azure函数中使用重试策略吗?

时间:2017-11-27 21:40:10

标签: azure azure-functions azure-eventhub

我正在使用事件中心来临时存储数据,这些数据将首先保存到azure表存储,然后索引到elasticsearch。 我想我应该在azure函数中执行存储保存调用,并使用NEST对弹性搜索索引执行相同的操作。 处理数据非常重要,因此我认为如果弹性搜索服务器出现故障,我将使用Polly作为重试策略。但是,重试政策不会使天蓝色功能变得昂贵吗? 天蓝色的功能是否正确?

2 个答案:

答案 0 :(得分:1)

是的,您可以使用Polly在Azure Functions中重试。一些进一步的考虑因素:

  • 是的,您将支付重试时间。但考虑到你的弹性搜索是"大多数是#34;,偶尔重试的额外价格不应该太高。

  • 如果您想重试保存到表存储,则必须自己编写用Polly修饰的调用,而不是其他首选的输出绑定

  • 确保检查写入顺序是否对您很重要,以及在开始写入Elastic之前是否应重试“表存储”写入完成,反之亦然。否则,您可以与async然后Task.WaitAll

  • 并行执行
  • 默认情况下,函数的最长执行时间为5分钟,最多可配置10分钟。如果您需要处理比此更长的中断,您可能需要一个计划B.例如。开始将失败超过4(或9)分钟的事件复制到专用队列,然后从那里重试。或者在这段停机期间禁用该功能。

答案 1 :(得分:0)

是的。您可以使用库或更好地编写简单的线性退避策略 -  喜欢尝试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);