Service Fabric - 如何保留或保护我的硬编码端口

时间:2018-02-16 22:46:00

标签: microservices azure-service-fabric service-fabric-on-premises

风景:

  1. 我们有两个微服务的应用程序。

    Micro Service A用于在集群外部公开应用程序(我们的Web服务器)

    Micro Service B是我们的业务功能。

  2. 我们在Micro Service A前面有一个F5来处理硬编码端口(onPrem)上的负载平衡。

  3. 内部微服务我们在清单中为http端点硬编码特定端口。
  4. 问题: 我们目睹有时Micro Service B(业务功能)可能会窃取Micro Service A硬编码使用的端口。然后它将永远不会正确启动服务。

    我们还看到SF似乎按顺序使用可用端口。因此,如果我们硬编码微服务A使用端口001和微服务B是随机的。当A重新启动时,B有时会抓住001。

    可能的解决方案:

    1. 我们可以对所有微服务进行硬编码 - 不喜欢它。
    2. 我们可以为这些硬编码端口保留更高的范围。例如,如果Service Fabric使用1000个端口,我们可以为服务A保留501-1000,让服务B获取001-499。这只会延迟问题,直到您有超过500个实例。 - 也不是这个的忠实粉丝。
    3. 将端口硬编码为群集范围之外的端口?例如,如果我们在设置集群时使用20001-20500作为ApplicationEndpoints范围,如果我们将MicroService A硬编码到用户21000,它似乎有用吗?我不确定会产生什么意想不到的后果?
    4. 请给我一个很好的选择4:)

      谢谢,

      格雷格

1 个答案:

答案 0 :(得分:2)

如果您具有此缩放级别,则最佳方法是使用节点类型来处理与内部分开的外部访问。

您将创建一个FrontEnd NodeType来托管暴露硬编码端口的API或WebServices(即:80,443),然后创建BackEnd NodeType以使用随机端口托管您的服务。使用这种方法,您不必担心端口,因为服务将根据其角色在不同节点上运行,并且只能从群集外部访问FE。

如果仍需要在相同节点内处理此问题,则可以使用节点类型配置"应用程序启动端口" &安培; "应用程序结束端口"这将处理您的服务将在开始时分配给的端口列表。 因此,您可以对这些列表外的端口进行硬编码,并让BE服务使用应用程序端口中的列表,就像您在第3个选项中建议的那样。

确保在负载均衡器上配置了硬编码端口,否则无法从群集外部访问它们。