Azure 服务结构 - 服务通信

Posted

技术标签:

【中文标题】Azure 服务结构 - 服务通信【英文标题】:Azure service fabric - service communication 【发布时间】:2020-05-12 05:36:28 【问题描述】:

据我所知,在 Azure 服务结构中,服务通信可以通过直接访问端点(或)反向代理来实现。 目前我正在使用以下代码直接访问其他服务端点:

        var service = $"fabric://myapp/**service1**";
        var servicePartitionResolver = ServicePartitionResolver.GetDefault();

        var partition = await servicePartitionResolver.ResolveAsync(new System.Uri(service),
            new ServicePartitionKey(), default(CancellationToken));
        var serviceEndpointJson = partition.GetEndpoint().Address;

        string endpointUrl = JObject.Parse(serviceEndpointJson)["Endpoints"][string.Empty].Value<string>();

如果 service1 实例在预期的节点 1 上不可用,但在 SF 集群的节点 2 上可用,这种方法是否有效?

是否直接访问服务端点 - 方法使用“命名服务”(如反向代理方法)通过服务 url 识别请求的服务地址?

使用上述直接访问调用实现来发现内部服务通信的服务有什么缺点吗?

【问题讨论】:

【参考方案1】:

已解析的端点应该可以工作,但您可以通过更简单的方式做到这一点:

使用 built-in DNS 在使用 HTTP 的服务之间进行通信。 使用SF Remoting在服务之间进行通信。

DNS 允许您通过传入应用程序和目标服务详细信息来获取端点。 SF 远程处理以类似的方式工作。最后一个的主要优点是 SF 远程客户端具有内置的瞬态错误处理(只要远程服务暂时不可用,它就会重试调用)。

【讨论】:

感谢您提供上述详细信息,但我关于“直接访问服务端点”方法的实际问题并未得到解决。 服务崩溃或升级时可以在集群中移动。因此,创建自己的发现机制是一项挑战,因为它需要您不断更新端点。我建议改用端点发现的内置功能。

以上是关于Azure 服务结构 - 服务通信的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure Service Fabric 中的不同应用程序与无状态 Web Api 服务通信

Azure 函数和 Azure KeyVault 通过服务端点进行通信

TLS1.2 上的 Azure 应用服务到应用服务通信失败

iOS 推送通知 ASP.NET 与 Azure 移动服务通信

你可以使用 gRPC/gRPC-Web 在 Azure 上托管的微服务之间进行通信吗?

如何从 Azure Web 应用程序与 IIS 中本地托管的 WCF 服务进行通信?