WebRequest.Create忽略了我的圆形旋转网络农场



所以,我有一个奇怪的位置。我有一个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

最新更新