Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Coudy Hou
JavaGuide
提交
1d73e6aa
J
JavaGuide
项目概览
Coudy Hou
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1d73e6aa
编写于
1月 20, 2020
作者:
S
shuang.kou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update why-use-rpc.md
上级
7fe59859
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
3 addition
and
27 deletion
+3
-27
docs/system-design/data-communication/why-use-rpc.md
docs/system-design/data-communication/why-use-rpc.md
+3
-27
未找到文件。
docs/system-design/data-communication/why-use-rpc.md
浏览文件 @
1d73e6aa
...
...
@@ -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
<html>
<body>
Hello World
</body>
</html>
```
**使用自定义 TCP 协议进行传输就会避免上面这个问题,极大地减轻了传输数据的开销。**
这也就是为什么通常会采用自定义 TCP 协议的 RPC
来进行进行服务调用的真正原因。除此之外,成熟的 RPC
框架还提供好了“服务自动注册与发现”、"智能负载均衡"、“可视化的服务治理和运维”、“运行期流量调度”等等功能,这些也算是选择
成熟的 RPC框架还提供好了“服务自动注册与发现”、"智能负载均衡"、“可视化的服务治理和运维”、“运行期流量调度”等等功能,这些也算是选择
RPC 进行服务注册和发现的一方面原因吧!
**相关阅读:**
...
...
@@ -90,11 +72,5 @@ RPC 进行服务注册和发现的一方面原因吧!
>首先要否认一点 HTTP 协议相较于自定义 TCP 报文协议,增加的开销在于连接的建立与断开。HTTP 协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁的创建和销毁连接。二一要说的是 HTTP 也可以使用 Protobuf 这种二进制编码协议对内容进行编码,因此二者最大的区别还是在传输协议上。
### 题外话
除此之外,还需要注意的一点是 Spring Cloud Netflix 并没有使用 RPC
框架来进行不同服务之间的调用,而是使用 HTTP 协议进行调用的,速度虽然不比 RPC
,但是使用 HTTP 协议也会带来其他很多好处(这一点,可以自行查阅相关资料了解)。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录