系列链接
ServiceFabric系列之一: ServiceFabric理论介绍
ServiceFabric系列之二: 在Windows上创建容器应用并部署到ServiceFabric中
ServiceFabric系列之三: 服务与服务之间是如何通信的——DNS服务
ServiceFabric系列之四: 服务与服务之间是如何通信的——反向代理
目的
服务与服务之间的通信除了使用DNS服务外,还可以使用ServiceFabric中内置的反向代理服务,我们来学习它。
反向代理介绍
反向代理是在每个节点上运行的服务,它支持从集群内部访问微服务,也支持从集群外部访问微服务。反向代理在本地节点上公开一个或多个终结点,以供客户端服务用来向其他服务发送请求,请看下图
在集群内部访问微服务
通过portal.azure.com创建集群的时候就需要启用它,如果你希望更新现有的集群,参考此链接
可以看到这里这里启用的反向代理端口是19081,它会在群集中的每一台机器上打开这个端口。然后我们在集群里的虚拟机中访问 http://localhost:19081/ServiceFabricDemo/BackendContainerService/api/Values
img
可以看出,是可以通过反向代理进行访问的。
在集群外部访问微服务
通常外部客户端无法直接访问集群里的每个服务,可以使用Azure 负载均衡器来充当微服务和外部客户端之间的网络边界,所以需要在负载均衡器里面配置,如下图。
img
现在可以从群集外部访问群集中公开 HTTP 终结点的所有微服务,这意味着微服务设计为内部的可能会被确定的恶意用户发现,可对反向代理进行设置,转发到安全的 HTTP 服务,这里暂不演示。下图为从外部通过反向代理访问后端的API服务,访问的地址是:http://servicefabricdemo.eastus2.cloudapp.azure.com:19081/ServiceFabricDemo/BackendContainerService/api/Values
img
所以这里,也可以将前端angular项目中的链接(第14行)替换为上面的链接。
相关链接
https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy
总结与讨论
分别在什么情况使用DNS服务和反向代理服务呢?
如果部署多个服务,可以使用 DNS 名称找到用于通信的其他服务的终结点。 DNS 服务适用于无状态服务,在 Service Fabric 版本 6.3 和更高版本中,它也适用于有状态服务。 对于运行低于 Service Fabric 6.3 版本的 有状态服务,可以使用 HTTP 调用的内置反向代理服务调用特定的服务分区。
DNS 服务不支持动态端口。 可以通过反向代理服务解析使用动态端口的服务。