|
|
51CTO旗下网站
|
|
移动端

用浅显的言语讲清楚RPC和HTTP

当用户的恳求到来时,咱们需求将用户的恳求涣散到多个服务去各自处理,然后又需求将这些子服务的成果汇总起来出现给用户。那么服务之间该运用何种办法进行交互便是需求处理的核心问题。RPC 便是为处理服务之间信息交互而创造和存在的。

作者:航天智造来历:今天头条|2019-06-20 17:49

跟着企业 IT 服务的不断发展,单台服务器逐步无法接受用户日益增长的恳求压力时,就需求多台服务器联合起来构成「服务集群」一起对外供给服务。一起事务服务会跟着产品需求的增多越来越肿,架构上有必要进行服务拆分,一个完好的大型服务会被打散成许多许多独立的小服务,每个小服务会由独立的进程去办理来对外供给服务,这便是「微服务」。

当用户的恳求到来时,咱们需求将用户的恳求涣散到多个服务去各自处理,然后又需求将这些子服务的成果汇总起来出现给用户。那么服务之间该运用何种办法进行交互便是需求处理的核心问题。RPC 便是为处理服务之间信息交互而创造和存在的。

什么是 RPC ?

RPC (Remote Procedure Call)即远程进程调用,是分布式体系常见的一种通讯办法,现已有 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 言语体系里十分常见,Nginx 和 PHP-fpm 进程之间一般较常运用 Fastcgi 协议进行通讯。

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

HTTP1.0 协议时,HTTP 调用还只能是短链接调用,一个恳求来回之后衔接就会封闭。HTTP1.1 在 HTTP1.0 协议的根底上进行了改善,引进了 KeepAlive 特功能够坚持 HTTP 衔接长期不断开,以便在同一个衔接之上进行屡次接连的恳求,进一步拉近了 HTTP 和 RPC 之间的间隔。

最浅显的言语讲清楚RPC和HTTP

当 HTTP 协议进化到 2.0 之后,Google 开源了一个树立在 HTTP2.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 数据交互。

最浅显的言语讲清楚RPC和HTTP

【修改引荐】

  1. 夺命连环问:一个TCP衔接能够发多少个HTTP恳求?
  2. 看完这篇文章,我奶奶都懂了HTTPS原理
  3. 怎么快速把握HTTP协议(高清思想导图 )
  4. 网络七层模型及TCP、UDP,一次HTTP恳求都发生了什么
  5. HTTP/3就要来了,先看看我的解读
【责任修改:未丽燕 TEL:(010)68476606】

点赞 0
同享:
我们都在看
猜你喜爱

订阅专栏+更多

20个局域网建造改造事例

20个局域网建造改造事例

网络树立技巧
共20章 | 捷哥CCIE

409人订阅学习

WOT2019全球人工智能技能峰会

WOT2019全球人工智能技能峰会

通用技能、运用范畴、企业赋能三大章节,13大技能专场,60+国内外一线人工智能精英大咖站台,同享人工智能的渠道东西、算法模型、语音视觉等技能主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

Spring Boot 爬虫查找轻松游

Spring Boot 爬虫查找轻松游

全栈式开发之旅
共4章 | 美码师

92人订阅学习

读 书 +更多

Microsoft SQL Server 2005 技能内情:T-SQL查询

本书是Inside Microsoft SQL Server 2005系列四本作品中的一本。它具体介绍了T-SQL的内部结构,包含了十分全面的编程参阅。它供给了运用Tra...

订阅51CTO邮刊

点击这儿检查样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客