diff --git a/docs/system-design/data-communication/why-use-rpc.md b/docs/system-design/data-communication/why-use-rpc.md index f4443ddd1034e1c4a1644fe327127b3be83b6289..f295e13beed8e1c76bad6068ef5ce6d2ca85c57f 100644 --- a/docs/system-design/data-communication/why-use-rpc.md +++ b/docs/system-design/data-communication/why-use-rpc.md @@ -45,7 +45,7 @@ http://www.importnew.com/22003.html RPC 只是一种概念、一种设计,就是为了解决 **不同服务之间的调用问题**, 它一般会包含有 **传输协议** 和 **序列化协议** 这两个。 -实现 RPC 的可以传输协议可以直接建立在 TCP 之上,也可以建立在 HTTP 协议之上。**大部分 RPC 框架都是使用的 TCP 连接(gRPC使用了HTTP2)。** +但是,HTTP 是一种协议,RPC框架可以使用 HTTP协议作为传输协议或者直接使用TCP作为传输协议,使用不同的协议一般也是为了适应不同的场景。 ### HTTP 和 TCP @@ -57,27 +57,9 @@ RPC 只是一种概念、一种设计,就是为了解决 **不同服务之间 > > **运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务**。TCP是传输层协议,主要解决数据如何在网络中传输。相比于UDP,**TCP** 提供的是**面向连接**的,**可靠的**数据传输服务。 -**主要关键就在 HTTP 使用的 TCP 协议,和我们自定义的 TCP 协议在报文上的区别。** +### RPC框架功能更齐全 -**http1.1协议的 TCP 报文包含太多在传输过程中可能无用的信息:** - -``` -HTTP/1.0 200 OK -Content-Type: text/plain -Content-Length: 137582 -Expires: Thu, 05 Dec 1997 16:00:00 GMT -Last-Modified: Wed, 5 August 1996 15:55:28 GMT -Server: Apache 0.84 - - - Hello World - -``` - -**使用自定义 TCP 协议进行传输就会避免上面这个问题,极大地减轻了传输数据的开销。** -这也就是为什么通常会采用自定义 TCP 协议的 RPC -来进行进行服务调用的真正原因。除此之外,成熟的 RPC -框架还提供好了“服务自动注册与发现”、"智能负载均衡"、“可视化的服务治理和运维”、“运行期流量调度”等等功能,这些也算是选择 +成熟的 RPC框架还提供好了“服务自动注册与发现”、"智能负载均衡"、“可视化的服务治理和运维”、“运行期流量调度”等等功能,这些也算是选择 RPC 进行服务注册和发现的一方面原因吧! **相关阅读:** @@ -90,11 +72,5 @@ RPC 进行服务注册和发现的一方面原因吧! >首先要否认一点 HTTP 协议相较于自定义 TCP 报文协议,增加的开销在于连接的建立与断开。HTTP 协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁的创建和销毁连接。二一要说的是 HTTP 也可以使用 Protobuf 这种二进制编码协议对内容进行编码,因此二者最大的区别还是在传输协议上。 -### 题外话 - -除此之外,还需要注意的一点是 Spring Cloud Netflix 并没有使用 RPC -框架来进行不同服务之间的调用,而是使用 HTTP 协议进行调用的,速度虽然不比 RPC -,但是使用 HTTP 协议也会带来其他很多好处(这一点,可以自行查阅相关资料了解)。 -