启动时结构服务可用性



我有一个场景,其中我们的一个服务公开了从外部服务接收回调的WCF主机。

这些主机是动态创建的,可能有数百个。在节点开始接收请求之前,我需要确保它们都在节点上启动并运行,这样它们就不会收到故障,这一点至关重要。

有没有办法确保服务在我说准备好之前不会收到请求?在云服务中,我可以通过在OnStart方法中包含所有这些代码来实现这一点。

我最初的想法是,我可能能够在打开通信侦听器之前引导它——希望结构管理器只在完成后发送请求,但我找不到任何关于如何处理这一生命周期的信息。

集群内没有控制服务之间网络流量的"结构管理器"。如果您的服务已启动,群集中的客户端或其他服务可以选择尝试连接到它(如果他们知道它的地址)。考虑到这一点,这里有两件事你可以控制:

第一个问题是您的服务端点是否可被其他服务或客户端发现。这是您的服务端点向service Fabric的命名服务注册的点,当您的ICommunicationListener.OpenAsync方法返回时,会发生该点。在这一点上,服务端点被注册,其他人可以发现它并尝试连接到它。当然,如果你不想使用命名服务或ICommunicationListener模式,你不必使用;您的服务可以随时打开一个端点,但如果您不向命名服务注册它,您就必须想出自己的服务发现机制。

第二个问题是运行服务的节点是否正在接收来自Azure负载平衡器(或者任何负载平衡器,如果您不在Azure中托管)的流量。这与服务结构关系不大,与负载均衡器本身关系更大。在Azure中,您可以使用负载平衡器探测来确定是否应将流量发送到节点。

编辑:我在文档中添加了一些关于Azure负载均衡器的信息,希望这能有所帮助:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-connect-and-communicate-with-services/

最新更新