微服务:REST与消息传递的比较

32

我听说亚马逊在其基于微服务的架构中使用HTTP。另一种选择是使用像RabbitMQ或Solace系统这样的消息系统。我个人有Solace基于微服务架构方面的经验,但从未接触过REST。
你知道像亚马逊、Netflix、英国政府等各种大型实现都使用什么吗?
微服务中还需要以下内容(除其他外):
* 模式匹配
* 异步消息...接收系统可能停机
* 发布订阅
* 缓存加载事件...即在启动时,一个服务可能需要从其他几个服务中加载所有数据,并且应在数据完全加载时得到通知,以便它可以“知道”它现在已准备好为请求提供服务
这些方面自然而然地采用消息传递而不是REST完成。除了公共API之外,为什么要使用REST呢?谢谢。


1
HTTP和REST是规范。RabbitMQ/Solace是消息代理。你的问题是“基于HTTP/REST的服务的应用是什么”吗? - k1133
2
也许可以考虑在哪些情况下应该使用REST,以及在哪些情况下应该使用消息传递,或者两者结合使用。为什么要选择这种方式而不是那种方式。 - Apurva Singh
2个回答

40

我过去遵循的标准是,当关键要求是速度(且数据丢失不是关键问题)时,使用 Web 服务;当关键要求是可靠性时,则使用消息传递。如你所说,如果接收系统宕机,消息会在队列中等待,直到系统恢复正常来处理它。如果是 REST 终端点宕机,请求将会失败。


5
+1,你可能需要考虑同步通信(REST)的耦合影响,如果其中一个失败,所有依赖它的也会失败,因此除了丢失数据外,它还可能导致连锁反应,从而使整个系统崩溃。 - Sean Farmar
@SeanFarmar 这就是我所说的多米诺效应。相关问题是涟漪效应,其中一个服务的更改可能需要对下游服务进行更改。 - MattDavey
1
有时您可能需要这种行为。例如,如果您期望快速同步响应,但出现超时或其他服务器错误,您可以相应地处理它。有些进程不能容忍等待。我相信还有其他类似的用例。 - Bill Rosmus
根据分析和测试报告,MQTT数据传输速度比REST调用快20到25倍。 MQTT代理可以在普通服务器上每秒处理高达40,000条消息。因此,REST并不比流行的消息协议MQTT更快。-- https://www.bevywise.com/blog/mqtt-vs-rest-iot-implementation/ - Angsuman Chakraborty
2
通常来说,消息应用程序更容易集成,因为您可以将应用程序逻辑与消息端点解耦,这使得应用程序更易于维护和重用。然而,开发消息端点可能会让人费尽心血。如果您只想构建一个单一目的的应用程序,则最好使用REST。 - elsamuray7

-16

REST API 假定仅使用 HTTP。这是相当古老的技术,不支持异步消息传递。为了插入消息传递,我会考虑使用 WebSockets 网关。 - 对于可能的愚蠢陈述,我表示抱歉。


那么为什么有这么多负面评价呢?实际上,REST是基于HTTP方法的!而且,是同步的! - Vladimir Kovalchuk
3
这是完全错误的: HTTP是一种契约,一种通信协议。REST是一个概念,一种架构风格,可能使用HTTP、FTP或其他通信协议。HTTP是REST最常用的通信协议之一,这也是你误解的根源吧。 - Sebastian Nielsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接