Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/system-design/data-communication/summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
**消息中间件,也可以叫做中央消息队列或者是消息队列(区别于本地消息队列,本地消息队列指的是JVM内的队列实现)**,是一种独立的队列系统,消息中间件经常用来解决内部服务之间的 **异步调用问题** 。请求服务方把请求队列放到队列中即可返回,然后等待服务提供方去队列中获取请求进行处理,之后通过回调等机制把结果返回给请求服务方。

异步调用只是消息中间件一个非常常见的应用场景。此外,常用的消息队列应用场景还偷如下几个
异步调用只是消息中间件一个非常常见的应用场景。此外,常用的消息队列应用场景还有如下几个
- **解耦 :** 一个业务的非核心流程需要依赖其他系统,但结果并不重要,有通知即可。
- **最终一致性 :** 指的是两个系统的状态保持一致,可以有一定的延迟,只要最终达到一致性即可。经常用在解决分布式事务上。
- **广播 :** 消息队列最基本的功能。生产者只负责生产消息,订阅者接收消息。
Expand Down
12 changes: 9 additions & 3 deletions docs/system-design/data-communication/why-use-rpc.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,21 +74,27 @@ Server: Apache 0.84
</html>
```

**使用自定义 TCP 协议进行传输就会避免上面这个问题,极大地减轻了传输数据的开销。**这也就是为什么通常会采用自定义 TCP 协议的 RPC 来进行进行服务调用的真正原因。初次之外,成熟的 RPC 框架还提供好了“服务自动注册与发现”、"智能负载均衡"、“可视化的服务治理和运维”、“运行期流量调度”等等功能,这些也算是选择 RPC 进行服务注册和发现的一方面原因吧!
**使用自定义 TCP 协议进行传输就会避免上面这个问题,极大地减轻了传输数据的开销。**
这也就是为什么通常会采用自定义 TCP 协议的 RPC
来进行进行服务调用的真正原因。除此之外,成熟的 RPC
框架还提供好了“服务自动注册与发现”、"智能负载均衡"、“可视化的服务治理和运维”、“运行期流量调度”等等功能,这些也算是选择
RPC 进行服务注册和发现的一方面原因吧!

**相关阅读:**

- http://www.ruanyifeng.com/blog/2016/08/http.html (HTTP 协议入门- 阮一峰)

###一个常见的错误观点
### 一个常见的错误观点

很多文章中还会提到说 HTTP 协议相较于自定义 TCP 报文协议,增加的开销在于连接的建立与断开,但是这个观点已经被否认,下面截取自知乎中一个回答,原回答地址:https://www.zhihu.com/question/41609070/answer/191965937。

>首先要否认一点 HTTP 协议相较于自定义 TCP 报文协议,增加的开销在于连接的建立与断开。HTTP 协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁的创建和销毁连接。二一要说的是 HTTP 也可以使用 Protobuf 这种二进制编码协议对内容进行编码,因此二者最大的区别还是在传输协议上。

### 题外话

初次之外,还需要注意的一点是 Spring Cloud Netflix 并没有使用 RPC 框架来进行不同服务之间的调用,而是使用 HTTP 协议进行调用的,速度虽然不比 RPC ,但是使用 HTTP 协议也会带来其他很多好处(这一点,可以自行查阅相关资料了解)。
除此之外,还需要注意的一点是 Spring Cloud Netflix 并没有使用 RPC
框架来进行不同服务之间的调用,而是使用 HTTP 协议进行调用的,速度虽然不比 RPC
,但是使用 HTTP 协议也会带来其他很多好处(这一点,可以自行查阅相关资料了解)。