【发布时间】:2019-04-05 22:14:33
【问题描述】:
我正在尝试了解在 Azure 服务结构中使用服务远程处理与进行安静调用的具体用例。感谢您对性能、安全性和任何相关方面的任何见解。
【问题讨论】:
标签: rest azure azure-service-fabric
我正在尝试了解在 Azure 服务结构中使用服务远程处理与进行安静调用的具体用例。感谢您对性能、安全性和任何相关方面的任何见解。
【问题讨论】:
标签: rest azure azure-service-fabric
好吧,让我们来看看。当涉及到外部客户端和 SF 服务之间的通信时,我会使用 restful 调用,因为服务远程处理是特定于 SF 的,并且几乎可以在使用任何语言的每个平台上使用 restful api。
对于 SF 内部的服务之间的通信,您可以使用 Service Remoting。基本上,它是 Service Fabric 的 .NET RPC 实现,请参阅 this excellent answer。您可以使用其他机制,但该机制是开箱即用的,可为您提供内置的重试策略和服务解决方案等。
但很难给出最终的建议,因为这取决于服务的种类及其目的。有时您希望使用远程处理进行直接通信,有时您希望在两个服务之间使用消息总线。
最重要的一点是使用 https 与集群进行通信,以便公共可访问的 SF 服务。
更多背景阅读:
【讨论】:
你没有提到交流的目的,所以答案可能很广泛:
技术上,
休息
REST 通信是通用的,任何平台上的任何客户端都可以使用,是使用 HTTP 协议向 SF 集群外部的客户端公开服务的更好方式。
服务可以在不破坏与现有客户端的兼容性的情况下发展,客户端和服务之间没有硬契约。
这种服务到服务通信方法的问题是服务必须公开一个 HTTP 服务器来接收 REST 调用,并且每个调用都被序列化为 JSON。 http 服务器必须有一些路由规则来将调用重定向到正确的处理程序,从而向服务中添加了很多在简单场景中不需要它的东西。
SF 远程处理
SF Remoting 是 .Net Remoting 的实现,它是 .Net 的一个组件,用于通过 TCP 提供二进制通信。它的速度要快得多,因为它不需要将数据序列化为 JSON 并验证所有 json 规则进行序列化。
用法是服务和客户端之间的简单接口实现。无需托管 HTTP 服务器并为其配置路由规则,使用起来更加简单。
缺点,
Remoting 的第一个问题是 Client 和 Service 必须使用相同的语言,在这种情况下是 .Net(PS:你也可以使用其他语言,但不是直截了当的),并且还要谈论同样的主题,这就是为什么两者都需要访问一个合同(接口),该合同将告诉他们应该如何相互通信。这会将客户端与服务耦合,并且可能会同时在双方发生更新。
第二,因为第一个,你受限于 .Net 和 Service Fabric,你不能在集群外运行 SF Remoting,它与 SF Runtime 高度耦合。
远程处理工作在 HTTP 协议下的一个级别,将其暴露到 Internet 的风险高于 HTTP 服务器。并不意味着它不安全,但它不像 WebServers 那样频繁地接收升级。
总之,
如果您想要服务之间的性能和简单通信,请使用 Remoting。
如果您不希望客户端与任何客户端\平台使用的服务和灵活性相耦合,请使用 REST。
或者,也许您可以使用其他协议。这个 SO 有一些可能有用的信息:Azure ServiceBus vs ServiceRemoting, HTTP and WCF
【讨论】: