REST 适合微服务吗?

Is REST a good fit for microservices?

我正在通过书籍、博客等探索微服务架构。

我所看到的是,大多数人使用 REST 来实现微服务。这不矛盾吗?

微服务理应解耦服务以实现可扩展性,但 REST 通信协议是同步的。

那么这两个怎么能走到一起呢?

The REST interface is designed to be efficient for large-grain hypermedia data transfer, optimizing for the common case of the Web, but resulting in an interface that is not optimal for other forms of architectural interaction. -- Roy Fielding, 2000

“REST 通信协议是同步的。”

这在几个层面上不太正确。

第一,没有“REST通信协议”; REST 是一种架构风格。

Hypertext Transport Protocol又名HTTP,是一种用于超文本信息系统的应用协议。 REST是一种架构风格,web是参考实现。

其次,HTTP 实际上并不是同步的。因为没有泛型correlation identifiers in the metadata of the request, the client needs to keep track of the order in which requests were sent along a given connection. See RFC 7230, Section 5.6。这“只是”消息传递。

Apache 的 HttpCore Tutorial 包含对非阻塞 HTTP 连接的讨论。

我假设您正在查看多个 HTTP Restful 服务的链接。

如果您正在为一组 Restful 微服务设计消息传递架构。您需要考虑每种通信技术的风险和收益。请记住,您不必使用一个,您可以为每项工作使用最好的工具。

貌似最常见的是HTTP和AMQP(高级消息队列协议)。它们都有不同的用途。

如果您将后端作为微服务提供给网站。如果用户需要来自网站的响应,则可能需要以同步方式将调用链接在一起。此外,此时您的入站请求很可能是 HTTP。

或者,如果不需要响应,您可能需要考虑即发即忘消息队列。这些将允许将消息异步传递给其他微服务。

有一本很棒的电子书详细介绍了这个主题。 https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/ [.NET 微服务。容器化 .NET 应用程序的体系结构]

此页面涵盖了您正在讨论的确切主题。 https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/architect-microservice-container-applications/communication-in-microservice-architecture[微服务架构中的通信]