【问题标题】:Load balancer for Azure Service Fabric Cluster on-premises本地 Azure Service Fabric 群集的负载均衡器
【发布时间】:2017-08-13 11:47:30
【问题描述】:

作为开发人员,我们在 Azure Service Fabric 上编写了微服务,我们可以在 Azure 中为许多客户以某种 PaaS 概念运行它们。但是我们的一些客户不希望在云中运行,因为数据库是本地的,并且不能从外部使用,即使通过 DMZ 也不能使用。没关系,我们承诺支持它,因为 Azure Service Fabric 可以作为集群安装在本地。

我们在每个虚拟机的集群内部都有一个API-gateway微服务,它使用名称解析器,请求被相应地路由和分发,但是API网关微服务提供的API是另一个客户端的入口我们的客户使用的软件,该软件在集群外部运行,并且必须向 API 发送请求。

我建议在单独的机器(或多台机器)上使用负载均衡器,如 HA-Proxy 或 Nginx,客户端软件将请求发送到该机器,然后反向代理会将其转发到集群内的可用机器。

这似乎不是我们的客户想要的,另一台机器作为负载平衡器不是一个选项。他们建议:让客户端软件更智能地确定要转到哪个主机,换句话说:我们应该在客户端软件中编写自己的故障转移/负载平衡器。

我们还有哪些其他选择?

PS:客户端应用每秒不会发送很多请求,可能每分钟发送几个。

【问题讨论】:

  • 不清楚是什么软件在哪里发送请求。软件如何分层,SF、客户端软件和数据库在这些层中的位置。
  • 有一个机器集群托管一个web api服务,所以10.0.0.1:8100、10.0.0.2:8100和10.0.0.3:8100都是同一个web api入口。客户端在集群之外,必须去其中一个入口。
  • 您在这种情况下实施的最终解决方案是什么? @rfcdejong
  • 没什么,我无法在环境中为集群设置单个 IP,但客户会尝试,因为他们有一个应该可以工作的 vmware 环境。

标签: azure nginx azure-service-fabric internal-load-balancer


【解决方案1】:

非常相似的问题,我们有许多在本地运行的服务和 Service Fabric 集群。当需要使用负载平衡器时,我们将 IIS 安装在运行 Service Fabric 群集的同一台计算机上。由于 IIS 是一个很好的负载平衡器,我们仅将 IIS 用作 API 网关的反向代理。 Kestrel 托管用于通过 HTTP 进行通信的其他服务。 API 网关微服务是所有客户端的单一入口点,并且在 SF 中始终具有静态 URI,我们使用该 URI 来配置 IIS

如果您无法使用 IIS,请查看 Using nginx as HTTP load balancer

【讨论】:

  • 我也一直在使用 IIS 作为 kestrel 的反向代理,效果很好,但这只是在开发中
  • 我不确定是否以及如何将 IIS 配置为外部的单个 IP。我宁愿认为是 Windows 的 NLB 功能能够做到这一点。就在我看到的所有地方,我都看到了 nginx,即使是 docker stefanprodan.com/2016/…
  • 您已尽力给出答案,所以我会在分数消失和浪费之前给您分数,呵呵..即使这不是我希望的答案
  • 我尝试配置 NLB robertsmit.wordpress.com/2014/08/20/…,但不知何故,我们的测试环境在 azure IaaS 中,我无法从同一子网上的集群外部 ping IP。即使在 VM 中有单播和多个 NIC。可悲的是,我没有 VMware 环境来测试它。无论如何,客户很乐意将 Round Robin DNS 用作“穷人的负载均衡器”。
  • 您可以在此处将您的解决方案描述为答案并接受它。我认为分享您的经验会有所帮助,因为互联网上的信息并不多
【解决方案2】:

您不需要另一台机器来进行 HTTP 转发。只需在集群上将其作为服务使用/运行即可。

您是否考虑过使用 Service Fabric 的内置 Reverse Proxy?这在所有节点上运行,并将 http 调用转发到集群内的服务。

您还可以将 nginx 作为 guest executable 或在集群上的 Container 内运行。

【讨论】:

  • 集群内的反向代理是我们已经在做的,但它是用于集群的外部访问。客户端不应显式路由到一个节点。如果集群只有一个 DNS 名称,那么可以,但它使用不同的 IP 地址。
  • 如果您在每个节点上运行一个 RP 实例,那么您连接到哪个节点都没有关系。只需从所有 IP 地址中随机选择。
  • 随机选择需要配置客户端以了解所有节点 IP,并且当一个节点正在升级或不可用时可能会失败
  • 在客户端应用重试和断路器设计模式。否则你会被外部 LB/RP 卡住。
  • 单个 dns 的重试和断路器设计模式可以,但不能用于 IP 地址列表。我希望任何有更好想法的人都能回答,我还不知道:)
【解决方案3】:

我们在开始使用 Service Fabric 集群时也遇到了同样的情况。我们将应用程序网关配置为代理,但它不会提供 HTTP 到 HTTPS 重定向等功能。

为此,我们将 Nginx 而不是 Azure 应用程序网关配置为 Service Fabric 应用程序的代理。

【讨论】:

    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 2017-07-23
    • 2016-10-23
    • 1970-01-01
    • 2016-09-28
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多