服务结构反向代理状态服务端口设置

时间:2017-07-18 12:01:53

标签: azure-service-fabric

我已成功将群集部署到azure,并在所有节点上启用了反向代理,并且https正常工作。这是一个多租户群集,每个租户都有自己的应用程序,一些有状态服务将能够管理一些Web套接字。

我设法得到一个kestrel实例在本地工作的websockets但在Azure中我只得到404s。我认为我的端口配置是错误的。我已经阅读了所有反向代理文档,但仍然无法解决一些问题。

Q1 希望从反向代理接收消息的有状态服务上的所有侦听器都必须在19081上侦听吗?我会这么认为,但documentation随机地将一个不同的端口(10592?)和一个超长ID作为某种标识符(我认为是partitionId和replicaId组合),没有解释它是如何的将名称映射到命名服务中的侦听端口。

  

作为一个例子,让我们采用结构:/ MyApp / MyService服务   在以下URL上打开HTTP侦听器:

     

http://10.0.0.5:10592/3f0d39ad-924b-4233-b4a7-02617c6308a6-130834621071472715/

我是否打算使用这个超长ID作为收听地址?我想这意味着kestrel已经出局 - 因为多个人可能会尝试在同一个节点上侦听,但我可以使用Web / Http Listener,这样我就可以共享端口了。

Q2 如果我希望服务只监听反向代理,是否必须创建监听器。 ListenerName 似乎是URI格式中寻址服务的必要参数。在这种情况下,是否无法调用动态生成的主机? (例如WCF服务主机)正在侦听生成的路径,即https://fabric:19081/MyApp/MySvc/SomeWcfPath1

很高兴发布(破坏)代码,但我认为这更像是一个概念问题,一旦我更好地理解了局限性/底层架构,我可以自己解决它

此致

1 个答案:

答案 0 :(得分:1)

您看到有状态服务的超长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的原因。