所以,我有一个奇怪的位置。我有一个Azure Worker角色,可以运行自托管OWIN API服务器。这个工人角色有2个实例(即:这是一个农场)。与这些实例的沟通超过SSL/443,并且在负载平衡器后面的Azure圆形旋转
我在该领域有数百个客户,每分钟都会与该工人角色进行通信,并向该角色发送数据。每隔一段时间(例如,每天),我的一个工人角色实例重新启动(让我们称其为实例" a")。重新启动需要3-4分钟,并且在重新启动发生时,我所有的客户都切换到正在运行的" B"的实例。这很好。"一个"实例重新启动后发生的事情不好。没有新的请求来"一个"实例,每个客户端都被"卡住"在未重新启动的" B"实例上。我最终有2个负载平衡的服务器,其中一台以1%CPU运行,另一个以60%CPU运行
我怀疑这个问题是我的客户连接到我的工人角色的方式。这是代码。我究竟做错了什么?WebRequest.Create()是问题吗?我需要切换到其他客户吗?哪一个?
tia
private string PostData(BearerToken token, Guid accountId, string path, object input)
{
var url = _apiUrl + path;
try
{
var client = WebRequest.Create(url);
client.Headers.Add("Authorization", string.Format("Bearer {0}", token.AccessToken));
client.Headers.Add("AccountId", accountId.ToString());
client.Method = "POST";
client.Timeout = 120000;
client.ContentType = "application/json";
var data = JsonConvert.SerializeObject(input);
using (var stream = client.GetRequestStream())
using (var writer = new StreamWriter(stream))
{
writer.Write(data);
writer.Flush();
writer.Close();
using (var response = client.GetResponse())
{
using (var read = response.GetResponseStream())
{
if (read == null) return string.Empty;
using (var reader = new StreamReader(read))
{
return reader.ReadToEnd();
}
}
}
}
}
catch (Exception ex)
{
throw new Exception(string.Format("{0} ({1})", ex.Message, url), ex);
}
}
是您的负载平衡器分布模式将设置为2或3个培训吗?这可以解释亲和力。
https://learn.microsoft.com/en-us/azure/load-balancer/load-balancer-distribution-mode