代码之家  ›  专栏  ›  技术社区  ›  gperrego

服务结构-如何保留或保护我的硬编码端口

  •  0
  • gperrego  · 技术社区  · 8 年前

    景观:

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

      微服务A用于在集群(我们的web服务器)之外公开应用程序

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

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

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

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

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

    可能的解决方案:

    1. 我们可以硬编码所有的微服务-不喜欢它。
    2. 我们可以为这些硬编码端口保留更大的范围。例如,如果服务结构使用1000个端口,我们可以为服务A保留501-1000个端口,让服务B获取001-499个端口。这只会延迟问题,直到您有500多个实例。-我也不怎么喜欢这个。
    3. 是否将端口硬编码为群集范围之外的端口?例如,如果我们在设置集群时使用20001-20500作为ApplicationEndpointsrange,那么如果我们将微服务A硬编码给用户21000,它似乎可以工作吗?我不确定这会造成什么意外后果?

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

    谢谢

    格雷格

    1 回复  |  直到 8 年前
        1
  •  2
  •   Diego Mendes    8 年前

    当您具有此缩放级别时,最好的方法是使用节点类型来单独处理外部访问和内部访问。

    您可以创建一个前端节点类型来承载暴露硬编码端口(即:80443)的API或WebServices,然后创建后端节点类型来承载具有随机端口的服务。使用这种方法,您不必担心端口,因为服务将根据其角色在不同的节点上运行,并且只有FE可以从集群外部访问。

    如果仍然需要在相同的节点内处理此问题,则可以使用节点类型配置“Application Start Port”(应用程序启动端口)(&“应用程序端端口”,用于处理服务将在启动时分配给的端口列表。 因此,您可以在这些列表之外硬编码您的端口,并让BE服务使用来自应用程序端口的列表,就像您在第三个选项中建议的那样。

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