【问题标题】:WebRequest.Create ignores my round-robin web farmWebRequest.Create 忽略我的循环网络农场
【发布时间】:2016-12-24 05:24:54
【问题描述】:

所以,我遇到了一个奇怪的情况。 我有一个运行自托管 OWIN API 服务器的 Azure 辅助角色。该工作者角色有 2 个实例(即:它是一个场)。与这些实例的通信通过 SSL/443 进行,并由 Azure 在其负载均衡器后面进行循环

我在现场有数百个客户,每分钟都与这个 Worker Role 通信并向它发送数据。每隔一段时间(比如每天),我的一个 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);
        }
    }

【问题讨论】:

    标签: azure httpwebrequest webrequest azure-cloud-services


    【解决方案1】:

    您的负载平衡器分配模式设置为 2 元组还是 3 元组?这可以解释亲和力。

    https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-distribution-mode

    【讨论】:

    • 使用默认的五元组分布
    • 可能是您的客户端正在重用连接(HTTP 保持活动状态)?你能嗅出那股流量吗?
    • 默认是false,我不改默认
    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 2013-08-24
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2017-02-14
    相关资源
    最近更新 更多