【问题标题】:Load balancing an external service in Azure在 Azure 中对外部服务进行负载平衡
【发布时间】:2018-10-14 14:34:45
【问题描述】:

我们在 Azure 中托管了一个 .NET 服务(目前在 VM 上,后来作为 Web 作业),它通过第三方 API 向外部公共服务执行 HTTP/HTTPS 请求。为了可扩展性和可靠性(因为服务不可靠,并且在发出过多请求时可能会长时间停机),我们希望对此服务进行负载平衡。

我认为通过基础架构比通过代码解决这个问题要好得多,但我对 Azure 提供的基础架构了解得不够多,无法知道这个是否可以通过基础架构解决。我已经阅读了关于 Azure load balancer 的概述文档,但他们只讨论平衡请求进入 Azure(公共和内部负载平衡),而不是请求离开它上网。

那么,Azure 是否提供了一些基础架构,允许我对从我的应用程序到 Internet 的请求进行负载平衡?

具体要求:

  • 将单个 HTTP 端点映射到多个配置的端点,理想情况下使用配置的权重(即,在 66% 的情况下选择端点 A,在 22% 的情况下选择端点 B,在 12% 的情况下选择端点 C)。
  • 当配置的端点之一发生故障时,透明地故障转移到另一个端点并在一段时间内忽略发生故障的端点。

更新 (2018-05-06): @kim 下面的回答让我注意到了 Azure 流量管理器,它使用基于 DNS 的负载平衡和轮询来进行自动故障转移。这可能是进行负载平衡的标准方法,但我的问题的理想解决方案是接收请求的代理,将它们重播到负载平衡端点之一,检测单个请求的故障,并立即故障转移,用另一个端点重试请求。这样一来,调用应用程序就不会注意到有问题,除非没有可用的工作端点。我知道这可能对我的问题来说太具体了,无法提供标准的基础架构解决方案,但无论如何我都会添加它,以防万一......

【问题讨论】:

  • 那么,您将完成第 3 方 api 提供者应该完成的工作吗?他们真的为同一个 api 暴露了多个端点吗?在 azure 上找不到任何预制的原因是负载均衡器通常会将传入请求分发到后端节点。
  • 嗯,API 是由多个服务提供商实现的标准合约的接口。 API 提供者没有预料到这些服务会不可靠——事实上我们也没有预料到,直到我们对它们进行了负载测试:)

标签: .net azure load-balancing azure-load-balancer


【解决方案1】:

我从来没有做过你所描述的事情,但这是我的一些想法。以下服务可能对您有用:

您可以尝试在您的 API 前面放置一个流量管理器,以对它们进行负载平衡并监控它们是否正常运行。

然后,在流量管理器之上放置一个 API 管理服务来保护 API 并为其提供访问控制。如果将来您需要重新定位 API,您可以轻松地重新配置 API 管理服务以指向其他位置。

【讨论】:

  • 感谢您的指点,我现在已阅读 Azure 流量管理器。不过,通过 DNS 进行的透明故障转移只是我的问题的第二好的实现。可以想象到的最好的实现将是一个代理,它重放每个请求,检测故障并故障转移适合请求本身(而不是在轮询间隔和 DNS 超时之后的未来请求)。不过,如果我没有找到任何其他基础设施机制,这绝对是一个选择。
【解决方案2】:

您还可以将三个端点配置为应用程序网关后端池的一部分。这将确保在给定端点出现故障时进行健康检查并故障转移到健康端点。然而,今天的应用程序网关只进行循环而不是加权循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多