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

Posted

技术标签:

【中文标题】Service Fabric - 如何保留或保护我的硬编码端口【英文标题】:Service Fabric - How to reserve or protect my hardcoded Port 【发布时间】:2018-07-27 21:39:55 【问题描述】:

风景:

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

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

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

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

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

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

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

可能的解决方案:

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

请给我一个不错的选择 4 :)

谢谢,

格雷格

【问题讨论】:

除此之外还有其他人有什么想法吗?我需要在接下来的 24 小时内做出决定,我想知道是否有其他解决方案。谢谢, 【参考方案1】:

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

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

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

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

【讨论】:

嗯,好的。我无法获得更多 VM(节点),但我可以将另一个 IP 添加到现有 VM。我可以在现有 VM 上的第二个 IP 上设置第二个节点类型吗?我知道这是第二个问题,但它是相关的。如果我找到它,我会做一些搜索并发布一个链接。

以上是关于Service Fabric - 如何保留或保护我的硬编码端口的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Service Fabric 部署期间保留有状态服务的状态?

Service Fabric - 无法进行配置升级以添加或删除节点

Service Fabric 是不是会无限期保留参与者信息?

Service Fabric 群集部署失败

如何确定运行 Service Fabric 集群的操作系统类型

无法通过 VSTS 发布到安全的 Service Fabric 群集