随着企业IT服务的不断发展和单个服务器无法承受用户不断增长的需求,它将需要多个服务器来形成“服务集群”以提供外部服务。与此同时,随着产品需求的增加,商业服务将变得越来越膨胀。该服务必须在体系结构中拆分。一项完整的大规模服务将被分解为许多独立的小型服务。每个小型服务都将由一个独立的流程处理。管理提供外部服务,称为“微服务”。
当用户的请求到来时,我们需要将用户的请求分散到多个服务以单独处理它们,然后需要总结这些子服务的结果以呈现给用户。然后,服务交互的方式是需要解决的核心问题。 RPC被发明并存在以解决服务之间的信息交互。
什么是RPC?
RPC(远程过程调用)是分布式系统中常用的通信方法,已经使用了40多年。当两个物理上独立的子系统需要建立逻辑关联时,RPC是匹配的常用技术之一。除了RPC之外,常见的多系统数据交互方案还包括分布式消息队列,HTTP请求调用,数据库和分布式缓存。
最流行的语言是RPC和HTTP
RPC和HTTP调用不是通过中间件,而是端到端系统的直接数据交互。 HTTP调用也可以被认为是一种特殊的RPC,除了传统意义上的RPC指的是长连接数据交互,而HTTP通常指的是准备好的短链接。
RPC在我们所知道的所有中间件中都有它。重量级的开源产品,如Nginx/Redis/MySQL/Dubbo/Hadoop/Spark/Tensorflow,都是基于RPC技术构建的。 RPC是指广义RPC,它是分布式系统的通信技术。 RPC在技术方面的地位要好于我们周围的空气。它无处不在,但许多人甚至不知道它存在。Nginx和RPC
Ngnix是互联网公司使用最广泛的代理服务器。它为后端分布式服务提供负载平衡,后端可以将多个后端服务地址聚合到一个地址中以便在外部提供服务。如您所见,Django是Python技术堆栈中最受欢迎的Web框架。
最流行的语言是RPC和HTTP
Nginx与后端服务之间的交互也基本上被理解为RPC数据交互。也许你会争辩说Nginx和后端服务使用HTTP协议,这是一个短连接,严格来说不是RPC调用。
最流行的语言是RPC和HTTP
你是对的,但是Nginx和后端服务之间还有其他协议,例如uwsgi协议,fastcgi协议等。这两种协议都使用比HTTP协议更高效的二进制协议。如上图所示,uWSGI是一个众所周知的Python容器,可用于为启动uwsgi协议的服务器启动服务。
uwsgi通信协议在Python语言系统中非常常见。如果企业使用Python语言堆栈来构建Web服务,则他们在生产环境中部署Python应用程序,而不是使用HTTP协议或使用uwsgi协议与Nginx建立连接。通讯。
最流行的语言是RPC和HTTP
Fastcgi协议在PHP语言系统中非常常见,Fastcgi协议通常用于在Nginx和PHP-fpm进程之间进行通信。
Hadoop和RPC
在大数据技术领域,RPC也占有非常重要的地位。大量分布式技术广泛应用于大数据领域。分布式意味着节点的物理隔离。隔离意味着需要通信,而通信意味着存在RPC。大数据需要比业务系统更多的通信,因此它在数据通信优化方面更深入。
最流行的语言是RPC和HTTP
例如,最常见的Hadoop文件系统hdfs通常包括NameNode和多个DataNode。 NameNode和DataNode通过名为Hadoop RPC的二进制协议进行通信。
TensorFlow和RPC
在人工智能领域,RPC也非常重要。如果着名的TensorFlow框架需要处理数亿个数据,则需要依赖分布式计算能力并需要进行集群。当多个分布式节点需要集体智能时,必须引入RPC技术。通信。 Tensorflow Cluster的RPC通信框架使用Google内部自行开发的gRPC框架。最流行的语言是RPC和HTTP
HTTP调用实际上是一种特殊的RPC。
在HTTP 1.0协议中,HTTP调用只能是短链接调用,并且在来回请求后将关闭连接。 HTTP1.1在HTTP1.0协议的基础上进行了改进。引入KeepAlive功能是为了保持HTTP连接长时间打开,以便可以在同一连接上进行多个连续请求,从而进一步缩小HTTP和RPC。他们之间的距离。
最流行的语言是RPC和HTTP
当HTTP协议发展到2.0时,谷歌开辟了一个建立在HTTP 2.0协议之上的通信框架,并将其命名为gRPC,即Google RPC。 HTTP和RPC之间没有明显的界限。因此,在下文中,我们不会明确强调RPC和HTTP请求调用之间的细微差别,直接称为RPC。
最流行的语言是RPC和HTTP
HTTP VS RPC(普通话VS方言)
HTTP和RPC之间的关系就像普通话和方言之间的关系。为了进行跨企业服务调用,通常是通过HTTP API(普通话),尽管它不是高效但通用,但通信学习成本不高。但是,RPC在企业内部更有效,并且同一企业具有高效通信的通用方言,这比普通HTTP协议更节省资源。中国有很多方言,就像许多内部服务都有自己的互动协议一样。虽然这个国家一直在倡导使用普通话交流,但经过这么多年,当你回到家乡发现自己的情况时,你会发现周围的人仍然是流行的说方言。
如果你走得更深,普通话本质上也是一种方言,但它是官方方言,是使用最广泛的方言。相比之下,其他方言是小语言,并且在小语言中有几种比较。具有广泛特征的方言也将更大。这就像开源RPC协议中的Protobuf和Thrift,它们应该是两种使用最广泛的RPC协议。
RPC和分布式系统交互方案
如果两个子系统在网络上没有分离,但是两个进程在同一个操作系统实例上运行,则它们之间的通信可以更加丰富。除了上面提到的几个分布式解决方案之外,还有共享内存,信号量,文件系统,内核消息队列,管道等,基本上通过操作系统内核机制进行数据和消息交互而不需要网络协议栈。但在现代企业服务中,这种独立应用程序非常罕见,因为独立应用程序意味着单点故障——“一个人摔跤整个家庭都倒下了”。业务子系统通常需要通过物理网络堆栈隔离,因此分布式解决方案可以在需要高可用性,不间断服务的企业环境中发挥作用,这使得RPC能够在自己的时代大放异彩。
除了RPC技术之外,上面提到的分布式子系统交互方案还具有数据库,消息队列和缓存。但实际上,这三者基本上是RPC技术应用的组合。我们可以将数据库服务理解为如下图:
最流行的语言是RPC和HTTP
可以看出,子系统和数据库之间的交互也是通过RPC完成的,但这里是三个子系统之间复杂的组合消息交互。如果深入一点,您会发现此处的数据库不是独立的数据库,而是具有主从复制的数据库,例如MySQL。这种主从和读写数据库通常用于互联网公司。业务子系统将数据写入主库,然后主数据库将数据同步到从属库,然后另一个业务子系统从库中提取数据。它可以进一步被视为四个子系统之间更复杂的RPC数据交互。