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

Service Fabric - How to reserve or protect my hardcoded Port

横向:

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

    微服务A用于暴露集群外的应用(我们的web服务器)

    微服务 B 是我们的业务功能。

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

  3. 在微服务 A 中,我们正在为清单中的 http 端点硬编码特定端口。

问题: 我们见证了有时微服务 B(业务功能)可能会窃取微服务 A 硬编码使用的端口。那么就永远无法正确启动服务了。

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

可能的解决方案:

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

请给我一个好的选择 4 :)

谢谢,

格雷格

当您具有此规模级别时,最好的方法是使用节点类型来处理与内部分开的外部访问。

您将创建一个 FrontEnd NodeType 来托管公开 hard-coded 端口(即:80、443)的 API 或 WebService,然后创建 BackEnd NodeType 来托管您的具有随机端口的服务。使用这种方法,您不必担心端口,因为服务将根据其角色 运行 在不同的节点上,并且只有 FE 可以从集群外部访问。

如果仍需要在相同节点内处理此问题,您可以使用节点类型配置 "Application Start Port" & "Application End Port" 来处理您的服务将分配到的端口列表开始了。 所以你会 Hard-code 你的端口在这些列表之外,并让 BE 服务使用来自应用程序端口的列表,就像你在第三个选项中建议的那样。

确保 Hard-Coded 端口已在您的负载均衡器上配置,否则无法从集群外部访问它们。