Service Fabric 反向代理状态服务端口设置
Service Fabric Reverse-Proxy Stateful-Service port setup
我已成功将集群部署到 Azure,并在所有节点上启用了反向代理并且 https 正常工作。这是一个多租户集群,每个租户都有自己的应用程序,一些有状态服务将有能力管理一些 Web Sockets。
我设法获得了一个在本地为 websockets 工作的 kestrel 实例,但在 Azure 中我只得到 404s。我认为我的端口配置有误。我已经阅读了所有反向代理文档,但仍然无法弄清楚一些内容。
Q1 是否所有希望从反向代理接收消息的有状态服务上的侦听器都必须在 19081 上侦听?我本来是这么想的,但是 documentation 随机放置了一个不同的端口(10592?)和一个超长 ID 作为某种标识符(我认为是 partitionId 和 replicaId 的组合),没有解释它是如何实现的会将名称映射到命名服务中的侦听端口。
As an example, let's take the fabric:/MyApp/MyService service that
opens an HTTP listener on the following URL:
http://10.0.0.5:10592/3f0d39ad-924b-4233-b4a7-02617c6308a6-130834621071472715/
我是不是要用这个超长的id作为监听地址?我猜这意味着 kestrel 出局了——因为多个人可能会尝试在同一个节点上监听,但我也许可以使用 Web/Http 监听器,这样我就可以共享端口。
Q2 如果我想让服务只监听反向代理,是否必须创建一个监听器。 ListenerName 似乎是用于寻址服务的 URI 格式中的必要参数。在这种情况下,是否无法调用动态生成的主机? (例如 WCF 服务主机)正在侦听生成的路径,即 https://fabric:19081/MyApp/MySvc/SomeWcfPath1.
很高兴 post(损坏的)代码,但我认为这更像是一个概念性问题,一旦我更好地理解了限制/底层架构,我就可以自己解决它
此致
您看到有状态服务超长 URL 的原因是因为在许多情况下您将在同一节点上拥有多个分区和副本。默认示例/模板可能遵循以下约定:
http://+:port/partition/replica/newGuid
考虑以下情况:您有一个包含两个分区的有状态服务,这两个分区都有一个主副本和两个辅助副本。
Partition 1: 2446223d-5998-45f3-90fc-2d9705bedb1d
Partition 2: 7af3a1f0-7845-4003-b192-6a8b64cc47fd
您可以设置次要副本以打开通信。如果您只使用分区 ID 作为监听地址,那么您将拥有以下内容:
http://10.10.10.1:19081/2446223d-5998-45f3-90fc-2d9705bedb1d (Primary)
http://10.10.10.1:19081/2446223d-5998-45f3-90fc-2d9705bedb1d (Secondary)
http://10.10.10.1:19081/2446223d-5998-45f3-90fc-2d9705bedb1d (Secondary)
http://10.10.10.1:19081/7af3a1f0-7845-4003-b192-6a8b64cc47fd (Primary)
http://10.10.10.1:19081/7af3a1f0-7845-4003-b192-6a8b64cc47fd (Secondary)
http://10.10.10.1:19081/7af3a1f0-7845-4003-b192-6a8b64cc47fd (Secondary)
在五节点集群上,您将在单个节点上拥有相同的侦听器,因此这是一个冲突。因此,您需要通过添加其他内容使其更加独特。无状态 Web api 模板中的默认 OwinCommunicationListener
实现将使用 partitionId、replicaId 和随机 guid。我不相信分区 + 副本足以成为唯一的,所以这就是他们向路径添加随机 guid 的原因。
我已成功将集群部署到 Azure,并在所有节点上启用了反向代理并且 https 正常工作。这是一个多租户集群,每个租户都有自己的应用程序,一些有状态服务将有能力管理一些 Web Sockets。
我设法获得了一个在本地为 websockets 工作的 kestrel 实例,但在 Azure 中我只得到 404s。我认为我的端口配置有误。我已经阅读了所有反向代理文档,但仍然无法弄清楚一些内容。
Q1 是否所有希望从反向代理接收消息的有状态服务上的侦听器都必须在 19081 上侦听?我本来是这么想的,但是 documentation 随机放置了一个不同的端口(10592?)和一个超长 ID 作为某种标识符(我认为是 partitionId 和 replicaId 的组合),没有解释它是如何实现的会将名称映射到命名服务中的侦听端口。
As an example, let's take the fabric:/MyApp/MyService service that opens an HTTP listener on the following URL:
http://10.0.0.5:10592/3f0d39ad-924b-4233-b4a7-02617c6308a6-130834621071472715/
我是不是要用这个超长的id作为监听地址?我猜这意味着 kestrel 出局了——因为多个人可能会尝试在同一个节点上监听,但我也许可以使用 Web/Http 监听器,这样我就可以共享端口。
Q2 如果我想让服务只监听反向代理,是否必须创建一个监听器。 ListenerName 似乎是用于寻址服务的 URI 格式中的必要参数。在这种情况下,是否无法调用动态生成的主机? (例如 WCF 服务主机)正在侦听生成的路径,即 https://fabric:19081/MyApp/MySvc/SomeWcfPath1.
很高兴 post(损坏的)代码,但我认为这更像是一个概念性问题,一旦我更好地理解了限制/底层架构,我就可以自己解决它
此致
您看到有状态服务超长 URL 的原因是因为在许多情况下您将在同一节点上拥有多个分区和副本。默认示例/模板可能遵循以下约定:
http://+:port/partition/replica/newGuid
考虑以下情况:您有一个包含两个分区的有状态服务,这两个分区都有一个主副本和两个辅助副本。
Partition 1: 2446223d-5998-45f3-90fc-2d9705bedb1d
Partition 2: 7af3a1f0-7845-4003-b192-6a8b64cc47fd
您可以设置次要副本以打开通信。如果您只使用分区 ID 作为监听地址,那么您将拥有以下内容:
http://10.10.10.1:19081/2446223d-5998-45f3-90fc-2d9705bedb1d (Primary)
http://10.10.10.1:19081/2446223d-5998-45f3-90fc-2d9705bedb1d (Secondary)
http://10.10.10.1:19081/2446223d-5998-45f3-90fc-2d9705bedb1d (Secondary)
http://10.10.10.1:19081/7af3a1f0-7845-4003-b192-6a8b64cc47fd (Primary)
http://10.10.10.1:19081/7af3a1f0-7845-4003-b192-6a8b64cc47fd (Secondary)
http://10.10.10.1:19081/7af3a1f0-7845-4003-b192-6a8b64cc47fd (Secondary)
在五节点集群上,您将在单个节点上拥有相同的侦听器,因此这是一个冲突。因此,您需要通过添加其他内容使其更加独特。无状态 Web api 模板中的默认 OwinCommunicationListener
实现将使用 partitionId、replicaId 和随机 guid。我不相信分区 + 副本足以成为唯一的,所以这就是他们向路径添加随机 guid 的原因。