【发布时间】:2017-08-13 11:47:30
【问题描述】:
作为开发人员,我们在 Azure Service Fabric 上编写了微服务,我们可以在 Azure 中为许多客户以某种 PaaS 概念运行它们。但是我们的一些客户不希望在云中运行,因为数据库是本地的,并且不能从外部使用,即使通过 DMZ 也不能使用。没关系,我们承诺支持它,因为 Azure Service Fabric 可以作为集群安装在本地。
我们在每个虚拟机的集群内部都有一个API-gateway微服务,它使用名称解析器,请求被相应地路由和分发,但是API网关微服务提供的API是另一个客户端的入口我们的客户使用的软件,该软件在集群外部运行,并且必须向 API 发送请求。
我建议在单独的机器(或多台机器)上使用负载均衡器,如 HA-Proxy 或 Nginx,客户端软件将请求发送到该机器,然后反向代理会将其转发到集群内的可用机器。
这似乎不是我们的客户想要的,另一台机器作为负载平衡器不是一个选项。他们建议:让客户端软件更智能地确定要转到哪个主机,换句话说:我们应该在客户端软件中编写自己的故障转移/负载平衡器。
我们还有哪些其他选择?
在每个虚拟机上安装网络负载平衡器功能,为集群提供一个 IP 地址,这甚至可能吗?类似https://www.poweradmin.com/blog/configuring-network-load-balancing-in-windows-server/
建议集群外的 API 网关,如 KONG https://getkong.org/
还有别的吗?
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