【发布时间】: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