0

景观:

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

    微服务 A 用于将应用程序暴露在集群之外(我们的 Web 服务器)

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

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

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

问题: 我们看到有时微服务 B(业务功能)可能会窃取微服务 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 回答 1

2

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

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

如果仍需要在同一节点内处理此问题,您可以使用节点类型配置“应用程序启动端口”和“应用程序结束端口”来处理您的服务将在启动时分配到的端口列表。因此,您将在这些列表之外对您的端口进行硬编码,并让 BE 服务使用来自应用程序端口的列表,就像您在第三个选项中建议的那样。

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

于 2018-02-19T10:53:08.300 回答