gpt4 book ai didi

azure - Azure 网站上的传出流量随机出现 21/42 秒超时

转载 作者:行者123 更新时间:2023-12-03 00:29:24 31 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 5 应用程序作为 Azure Web App(单实例 - 标准 S3 大小)在 Azure 德国云中运行。
我正在特定主机上调用非 Azure 托管的 REST/SOAP 服务,并且 Web 请求要么立即成功,要么在 21/42 秒后超时。
我已经对请求进行了负载测试,请求超时的百分位在 20 到 80 之间。
超时的一个特别显着的特性是,它们恰好在 21 或 42 秒后发生(这很严重,没有引用《银河系漫游指南》的意图)。
从网络应用程序调用不同的服务效果很好,至少暂时是这样。
我们已经检查了非azure服务的防火墙,如果发生超时,则没有任何数据包到达主机。

此问题在一年前发生过一次,支持人员无法判断原因是什么,直到问题在第一次发生大约两周后突然消失,因此该票证已自行修复,但现在又回来了。

代码使用 https://github.com/canton7/RestEase (在下面使用 HttpClient)并且看起来像

[Header("Content-Type", "application/json")]
public interface IApi
{
[Post("/Login")]
Task<LoginToken> Login([Body]LoginRequest request);
}

private static Dictionary<string, IApi> ApiClientsByHost = new Dictionary<string, IApi>();

private IApi GetApiForHost(string host)
{
if (!ApiClientsByHost.TryGetValue(host, out var client))
{
lock (ApiClientsByHost)
{
if (!ApiClientsByHost.TryGetValue(host, out client))
{
ApiClientsByHost[host] = client = RestClient.For<IApi>(host);
}
}
}

return client;
}

var client = GetApiForHost("https://production/");
var loginToken = await client.Login(new LoginRequest { Username = username, Password = password });

通过不同的服务,我的意思是使用“https://testserver/”而不是“https://production/”(测试服务器位于不同的数据中心,具有不同的IP和所有)。
API 身份验证通过查询传递 token ,但在获取 token 之前它已经超时。
该代码正在缓存 IApi 以避免处理 HttpClient 时出现的 TCP 饥饿问题(但我从未遇到过端口耗尽的情况)。
重新启动应用程序无法解决问题,并且该问题仅出现在当前的生产中(但是一年前,当这个问题在生产中发生时,我们已切换到测试服务器,该服务器最初可以工作,但一段时间后,遇到了同样的问题)

编辑:找到一些explanation in the last answer至于那些神奇的 21 秒从何而来。

编辑:我发现解决方法的一种方法是设置一个带有代理的 azure 虚拟机,并配置defaultProxy以通过该虚拟机。

最佳答案

这是 TCP 重传超时。但奇怪的是你得到了不同的值。

关于azure - Azure 网站上的传出流量随机出现 21/42 秒超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49191716/

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