在 Azure 中对外部服务进行负载平衡
Load balancing an external service in Azure
我们在 Azure 中托管了一个 .NET 服务(目前在 VM 上,后来作为 Web 作业),它通过第三方向外部 public 服务执行 HTTP/HTTPS 请求-派对 API。为了可扩展性和可靠性(因为该服务不可靠,并且在发出太多请求时可能会停机更长时间),我们希望对此服务进行负载平衡。
我认为通过基础架构比通过代码解决这个问题要好得多,但我对 Azure 提供的基础架构了解不多,不知道 是否可以 通过基础设施。我已经阅读了关于 Azure load balancer 的概述文档,但他们只谈论平衡请求 到 Azure(public 和内部负载平衡),而不是请求去 出来吧上网。
那么,Azure 是否提供了一些基础设施允许我对从我的应用程序到 Internet 的请求进行负载平衡?
具体要求:
- 将单个 HTTP 端点映射到多个配置的端点,最好使用配置的权重(即,在 66% 的情况下选择端点 A,在 22% 的情况下选择端点 B,在 12% 的情况下选择端点 C)。
- 当其中一个配置的端点发生故障时,透明地故障转移到另一个端点并在一段时间内忽略发生故障的端点。
更新(2018-05-06): @kim 下面的回答引起了我的注意,它使用基于 DNS 的负载平衡和轮询进行自动故障转移。这可能是进行负载平衡的标准方法,但我的问题的理想解决方案是接收请求的代理,将它们重播到负载平衡端点之一,检测单个请求的正确失败,并立即进行故障转移,用另一个端点重试请求。这样,除非没有可用的工作端点,否则调用应用程序永远不会注意到有问题。我知道这可能对我的问题来说太具体了,以至于没有标准的基础设施解决方案,但我还是添加了这个,以防万一...
我从来没有做过你描述的事情,但这是我的一些想法。以下服务可能对您有用:
- Azure Traffic Manager
- 允许 external endpoints
的负载平衡
- 在 DNS 级别工作
- 支持加权和优先路由load-balancing methods
- 等等
- Azure API Management
- 允许您安全访问 API
- 监控和收集分析
- 等等
您可以尝试在您的 API 前面放置一个流量管理器来平衡它们并监控它们是否正常运行和 运行。
然后,在流量管理器之上放置一个 API 管理服务来保护 API 并为其提供访问控制。如果将来您需要重新定位 API,您可以轻松地重新配置 API 管理服务以指向其他地方。
您还可以将三个终结点配置为应用程序网关后端池的一部分。这将确保健康检查并在给定端点出现故障时故障转移到健康端点。然而,今天的应用程序网关只执行循环而不是加权循环。
我们在 Azure 中托管了一个 .NET 服务(目前在 VM 上,后来作为 Web 作业),它通过第三方向外部 public 服务执行 HTTP/HTTPS 请求-派对 API。为了可扩展性和可靠性(因为该服务不可靠,并且在发出太多请求时可能会停机更长时间),我们希望对此服务进行负载平衡。
我认为通过基础架构比通过代码解决这个问题要好得多,但我对 Azure 提供的基础架构了解不多,不知道 是否可以 通过基础设施。我已经阅读了关于 Azure load balancer 的概述文档,但他们只谈论平衡请求 到 Azure(public 和内部负载平衡),而不是请求去 出来吧上网。
那么,Azure 是否提供了一些基础设施允许我对从我的应用程序到 Internet 的请求进行负载平衡?
具体要求:
- 将单个 HTTP 端点映射到多个配置的端点,最好使用配置的权重(即,在 66% 的情况下选择端点 A,在 22% 的情况下选择端点 B,在 12% 的情况下选择端点 C)。
- 当其中一个配置的端点发生故障时,透明地故障转移到另一个端点并在一段时间内忽略发生故障的端点。
更新(2018-05-06): @kim 下面的回答引起了我的注意,它使用基于 DNS 的负载平衡和轮询进行自动故障转移。这可能是进行负载平衡的标准方法,但我的问题的理想解决方案是接收请求的代理,将它们重播到负载平衡端点之一,检测单个请求的正确失败,并立即进行故障转移,用另一个端点重试请求。这样,除非没有可用的工作端点,否则调用应用程序永远不会注意到有问题。我知道这可能对我的问题来说太具体了,以至于没有标准的基础设施解决方案,但我还是添加了这个,以防万一...
我从来没有做过你描述的事情,但这是我的一些想法。以下服务可能对您有用:
- Azure Traffic Manager
- 允许 external endpoints 的负载平衡
- 在 DNS 级别工作
- 支持加权和优先路由load-balancing methods
- 等等
- Azure API Management
- 允许您安全访问 API
- 监控和收集分析
- 等等
您可以尝试在您的 API 前面放置一个流量管理器来平衡它们并监控它们是否正常运行和 运行。
然后,在流量管理器之上放置一个 API 管理服务来保护 API 并为其提供访问控制。如果将来您需要重新定位 API,您可以轻松地重新配置 API 管理服务以指向其他地方。
您还可以将三个终结点配置为应用程序网关后端池的一部分。这将确保健康检查并在给定端点出现故障时故障转移到健康端点。然而,今天的应用程序网关只执行循环而不是加权循环。