10

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

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

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

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

我们还有哪些其他选择?

PS:客户端应用程序每秒发送的请求并不多,可能每分钟发送几个。

4

3 回答 3

4

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

如果您无法使用 IIS,请查看使用 nginx 作为 HTTP 负载平衡器

于 2017-03-26T01:01:26.853 回答
0

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

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

您还可以将 nginx 作为来宾可执行文件或在集群上的容器内运行。

于 2017-03-27T13:07:15.137 回答
0

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

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

于 2017-03-29T10:41:33.670 回答