gpt4 book ai didi

azure - 管理 Azure 搜索 503

转载 作者:行者123 更新时间:2023-12-03 01:47:08 25 4
gpt4 key购买 nike

是否有众所周知的模式来管理 ServiceUnavailable ?我对这样的事情不太满意

catch (CloudException e) when (System.Net.HttpStatusCode.ServiceUnavailable.Equals(e.Response?.StatusCode))
{
var howMuchWait = TimeSpan.FromMinutes(1);
if (e.Response.Headers.TryGetValue("Retry-After", out var hValue))
{
if(RetryConditionHeaderValue.TryParse(hValue.FirstOrDefault(), out var time) && time.Delta.HasValue)
{
howMuchWait = time.Delta.Value;
}
}
logger.LogWarning(() => $"Service Unavailable... Let him rest a bit, I will wait for {howMuchWait}.");
await Task.Delay(howMuchWait);
return indexEntities.Select(x => (string)x[indexKeyFieldName]).ToList();
}

此代码只是延迟对其的当前调用,但不会阻止其他线程的调用。现在我正在使用秒表实现不同的东西,我想知道是否存在众所周知的模式。注意:一切都使用 SDK。

最佳答案

在管理 503 时,最好实现更多增量退避机制,而不是固定时间延迟。例如,从 1 秒开始,然后是 2 秒,然后是 4 秒,然后是 8 秒,等等...这样做的关键原因是,如果您要向 Azure 搜索发送大量工作,最好让它 catch ,而不是不断尝试向其发送更多工作。

顺便说一句,对于阅读本文的其他人来说,有时您可能会认为在看到这些 503(通常用于批量上传)时添加分区是一个好主意,以提供更多资源,但事实上,这可能会导致更多 503因为这是服务需要做的更多工作来配置分区。如果您确实认为需要更多分区,最好在开始工作之前执行此操作,然后根据需要缩小规模。

此外,另一个注意事项是,如果您利用 Azure 搜索 .NET SDK,则已经集成了重试。 Bruce,这里有一些关于这方面的好信息:Azure Search RetryPolicy

关于azure - 管理 Azure 搜索 503,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44933161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com