作为开发人员,我们在Azure Service Fabric上编写了微服务,我们可以在Azure中以某种PaaS概念为许多客户运行它们。但是我们的一些客户不希望在云中运行,因为数据库是本地的,而不是从外部可用,甚至不是通过DMZ。没关系,我们承诺支持它,因为Azure Service Fabric可以作为集群安装在本地。
我们在每个虚拟机上运行一个API网关微服务,它使用名称解析器,并相应地路由和分发请求,但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:客户端应用程序每秒发送的请求数不多,可能每分钟发送一次。
答案 0 :(得分:3)
非常类似的问题,我们有许多服务和Service Fabric Cluster在本地运行。在使用负载均衡器的时候,我们在运行Service Fabric集群的同一台机器上安装IIS。由于IIS是一个很好的负载均衡器,我们使用IIS作为API网关的反向代理。 Kestrel托管用于通过HTTP进行通信的其他服务。 API网关微服务是所有客户端的单一入口点,并且在SF内部始终具有静态URI,我们使用该URI来配置IIS
如果您无法使用IIS,请查看Using nginx as HTTP load balancer
答案 1 :(得分:1)
您不需要另一台机器来进行HTTP转发。只需将其作为群集上的服务使用/运行即可。
您是否考虑使用Service Fabric的内置Reverse Proxy?它在所有节点上运行,它将http调用转发到集群内的服务。
您还可以将nginx作为guest executable或在群集中的Container内运行。
答案 2 :(得分:0)
开始使用服务架构集群时,我们也遇到了同样的情况。我们将Application Gateway配置为Proxy,但它不提供HTTP到HTTPS重定向等功能。
为此,我们将Nginx而不是Azure Application Gateway配置为Service Fabric应用程序的代理。