我一直在阅读微服务架构但我仍然无法理解微服务间通信机制。
在许多文章中,他们说微服务通常是通过RESTful API公开的。但是当您搜索互联网时,您总会看到基于消息传递和后端通信事件的实现。
所以我很困惑,REST API是所有微服务的标准,或者我们可以看到没有REST端点的微服务。
答案 0 :(得分:4)
对于您的问题,首先让我们了解一个服务相互交互的方式,让我们创建两个服务订单服务和客户服务:
在这种情况下,需要模仿同步通信,一种直接的方法是休息或原型,或通过消息模仿它
你的第三个问题是,是否有可能没有休息端点的服务:::是可能的,但每个服务都需要可以访问。所以需要使用休息或其他形式
上面提到的链接:microservices.io非常好,再次通过它
答案 1 :(得分:2)
benefits of using microservices中的一个(如果不是最大的话)是它消除了对技术堆栈的任何长期承诺。在开发新服务时,您可以选择新的技术堆栈。同样,在对现有服务进行重大更改时,您可以使用新技术堆栈重写它。
因此,您可以选择您想要的任何通信机制,只要它不会阻止您更改技术堆栈。 REST over HTTP是一个不错的选择,因为它隐藏了微服务使用的技术,以请求 - 响应同步方式生成响应。基于消息的通信也很合适,因为消息还可以隐藏用于生成它们的技术(只要您不使用生成器编程语言的内置序列化),即RabbitMQ或{ {3}}
答案 2 :(得分:1)
REST不是微服务到微服务(也称为进程间通信/ IPC)的唯一样式,但它是基于微服务的应用程序使用的最流行的 IPC技术 - 风格建筑。还有其他技术,例如Apache Thrift和gRPC,可以达到同样的目的。基本上所有这些技术都是RPC(远程过程调用)的行业级实现。
我强烈建议您通过微服务专家阅读此link - Chris Richardson
答案 3 :(得分:1)
REST受到普遍支持,它在所有语言中都被接受,如果所有后端服务都在同一位置运行,那么吞吐量可能会有所不同。
无论如何,如上所述投资和学习gRPC或Thrift是一个好主意,您可以将所有内部服务转换为gRPC(例如大多数语言支持),并在Universal Gateway上进行gRPC和REST之间的转换。
内部架构有两种方法,即CQRS与普通REST调用。事件/消息传递是CQRS的一个示例,您可以在其中分离读/写端操作,并且可以通过事件实现所有写侧操作,以获得更好的可伸缩性和吞吐量。