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[微服务架构中的通信]
我正在通过书籍、博客等探索微服务架构。
我所看到的是,大多数人使用 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[微服务架构中的通信]