分布式系统中的网络通信一般都会采用四层的 TCP 协议或七层的 HTTP 协议,在我的了解中,前者占大多数,这主要得益于 TCP 协议的稳定性和高效性。网络通信说起来简单,但实际上是一个非常复杂的过程,这个过程主要包括:对端节点的查找、网络连接的建立、传输数据的编码解码以及网络连接的管理等等,每一项都很复杂。
在搭建一个复杂的分布式系统过程中,如果开发人员在编码时要对每个涉及到网络通信的逻辑都进行一系列的复杂编码,这将是件多么恐怖的事儿。所以说,网络通信是搭建分布式系统的一个大难题,是一点不为过的。
互联网三剑客:RPC、MQ、REDIS,不过底座是网络通信。
RPC的核心在于使进程间通信像进程内通信一样简单,更直白一点调用其他应用的方法好似调用本地方法一样简单方便。进程内之所以方便是因为写操作系统的人把复杂的事情给处理了,让业务研发专注于业务逻辑。进程间的调用简单是因为写RPC框架的人把复杂的工作给做了,使业务研发继续专注于业务逻辑。
RPC 是帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地(同一个项目中的方法)一样的体验,我们不需要因为这个方法是远程调用就需要编写很多与业务无关的代码。所以,RPC 的作用就是体现在这样两个方面:
- 屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法;
- 隐藏底层网络通信的复杂性,让我们更专注于业务逻辑。