[英]Why does nestjs framework use a transport layer different than HTTP in a microservices approach?
一段时间以来,我一直在使用 Spring Boot 开发微服务,使用 feign 客户端、rest 模板和 AMPQ 代理来建立每个微服务之间的通信。
现在,我正在学习 NestJs 及其微服务方法。 我注意到nestjs 使用TCP 作为默认传输层,这与使用Spring Boot 完成的方式不同。
为什么nestjs 更喜欢那些传输层(TCP、AMPQ)而不是HTTP? HTTP不是REST微服务的传输协议吗?
“微服务本质上是一个使用与 HTTP 不同的传输<\/strong>层的应用程序”
如果您查看 OSI 模型,HTTP 是第 7 层(应用程序)的一部分。 TCP 是第 4 层(传输)。
在查看第 4 层时,没有决定性特征使其成为 HTTP、AMPQ、gRPC 或 RTSP。 第 4 层明确说明了远程设备如何传输和接收数据。
现在,这就是网络和软件开发世界碰撞的地方。 网络人员将使用“传输”表示第 4 层,而编程人员使用“传输”表示将数据包传输到另一个组件的方式。
“传输”(或文档中使用的“传输器”)的含义被用作此架构中如何共享消息的抽象。
如果您正在为您的微服务寻找类似 AMPQ 的东西,请查看文档,您可以使用NATS或REDIS (这两种实现都是由它们构建的)。
https://docs.nestjs.com/microservices/basics#getting-started
主要原因是速度慢。 HTTP 方法的问题在于,使用 HTTP,JSON 会产生不需要的处理时间来发送和翻译信息。
http-json 的一个问题是发送的 JSON 的序列化时间。 这是一个昂贵的过程,想象一下大数据的序列化。
除了 JSON 之外,还有许多 HTTP 标头需要进一步解释,这些标头可能会被丢弃。 唯一需要考虑的是维护一个用于发送和接收消息的层。 因此,使用 JSON 的 HTTP 协议在微服务之间进行通信非常慢。 有一些优化技术,这些技术很复杂,不会增加显着的性能优势
此外,HTTP 等待的时间比它传输数据的时间要长。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.