所以,我有一个奇怪的情绪。 我有一个Azure辅助角色,它运行自托管的OWIN API服务器。这个辅助角色有2个实例(即:它是一个农场)。与这些实例的通信是通过SSL / 443进行的,并由Azure在其负载均衡器后面进行循环访问
我在该领域拥有数百个客户端,每分钟都与此工作者角色进行通信并向其发送数据。每隔一段时间(比如说每天),我的一个Worker Role实例重新启动(让我们称之为实例“A”)。重新启动需要3-4分钟,并且在重新启动期间,我的所有客户端都会切换到启动并运行“B”的实例。这很好。 “A”实例完成重启后会发生什么并不好。没有新的请求进入“A”实例,每个客户端都“卡在”未重启的“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);
}
}
答案 0 :(得分:0)
您的负载均衡器分发模式是否设置为2或3元组?这可以解释亲和力。
https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-distribution-mode