深入理解RPC——RPC在企业服务中的核心价值

随着企业 IT 服务的不断发展,单台服务器逐渐无法承受用户日益增长的请求压力时,就需要多台服务器联合起来构成「服务集群」共同对外提供服务。同时业务服务会随着产品需求的增多越来越肿,架构上必须进行服务拆分,一个完整的大型服务会被打散成很多很多独立的小服务,每个小服务会由独立的进程去管理来对外提供服务,这就是「微服务」。

当用户的请求到来时,我们需要将用户的请求分散到多个服务去各自处理,然后又需要将这些子服务的结果汇总起来呈现给用户。那么服务之间该使用何种方式进行交互就是需要解决的核心问题。RPC 就是为解决服务之间信息交互而发明和存在的。

一、什么是 RPC ?

RPC (Remote Procedure Call)即远程过程调用,是分布式系统常见的一种通信方法,已经有 40 多年历史。当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手段之一。除 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 框架。

Nginx 和后端服务之间的交互在本质上也可以理解为 RPC 数据交互。也许你会争辩说 Nginx 和后端服务之间使用的是 HTTP 协议,走的是短连接,严格上不能算是 RPC 调用。

你说的没错,不过 Nginx 和后端服务之间还可以走其它的协议,比如 uwsgi 协议、fastcgi 协议等,这两个协议都是采用了比 HTTP 协议更加节省流量的二进制协议。如上图所示,uWSGI 是著名的 Python 容器,使用它可以启动 uwsgi 协议的服务器对外提供服务。

uwsgi 通讯协议在 Python 语言体系里使用非常普遍,如果一个企业内部使用 Python 语言栈搭建 Web 服务,那么他们在生产环境部署 Python 应用的时候不是在使用 HTTP 协议就是在使用 uwsgi 协议来和 Nginx 之间建立通讯。

Fastcgi 协议在 PHP 语言体系里非常常见,Nginx 和 PHP-fpm 进程之间一般较常使用 Fastcgi 协议进行通讯。

三、Hadoop 与 RPC

在大数据技术领域,RPC 也占据了非常重要的地位。大数据领域广泛应用了非常多的分布式技术,分布式意味着节点的物理隔离,隔离意味着需要通信,通信意味着 RPC 的存在。大数据需要通信的量比业务系统更加庞大,所以在数据通信优化上做的更深。

比如最常见的 Hadoop 文件系统 hdfs,一般包括一个 NameNode 和多个 DataNode,NameNode 和 DataNode 之间就是通过一种称为 Hadoop RPC 的二进制协议进行通讯。

四、TensorFlow 与 RPC

在人工智能领域,RPC 也很重要,著名的 TensorFlow 框架如果需要处理上亿的数据,就需要依靠分布式计算力,需要集群化,当多个分布式节点需要集体智慧时,就必须引入 RPC 技术进行通讯。Tensorflow Cluster 的 RPC 通讯框架使用了 Google 内部自研的 gRPC 框架。

五、HTTP 调用其实也是一种特殊的 RPC

HTTP1.0 协议时,HTTP 调用还只能是短链接调用,一个请求来回之后连接就会关闭。HTTP1.1 在 HTTP1.0 协议的基础上进行了改进,引入了 KeepAlive 特性可以保持 HTTP 连接长时间不断开,以便在同一个连接之上进行多次连续的请求,进一步拉近了 HTTP 和 RPC 之间的距离。

当 HTTP 协议进化到 2.0 之后,Google 开源了一个建立在 HTTP2.0 协议之上的通信框架直接取名为 gRPC,也就是 Google RPC,这时 HTTP 和 RPC 之间已经没有非常明显的界限了。所以在后文我们不再明确强调 RPC 和 HTTP 请求调用之间的细微区别了,直接统一称之为 RPC。

六、HTTP VS RPC (普通话 VS 方言)

HTTP 与 RPC 的关系就好比普通话与方言的关系。要进行跨企业服务调用时,往往都是通过 HTTP API,也就是普通话,虽然效率不高,但是通用,没有太多沟通的学习成本。但是在企业内部还是 RPC 更加高效,同一个企业公用一套方言进行高效率的交流,要比通用的 HTTP 协议来交流更加节省资源。整个中国有非常多的方言,正如有很多的企业内部服务各有自己的一套交互协议一样。虽然国家一直在提倡使用普通话交流,但是这么多年过去了,你回一趟家乡探个亲什么的就会发现身边的人还是流行说方言。

如果再深入一点说,普通话本质上也是一种方言,只不过它是官方的方言,使用最为广泛的方言,相比而言其它方言都是小语种,小语种之中也会有几个使用比较广泛比较特色的方言占比也会比较大。这就好比开源 RPC 协议中 Protobuf 和 Thrift 一样,它们两应该是 RPC 协议中使用最为广泛的两个。

七、换个角度看世界

如果两个子系统没有在网络上进行分离,而是运行在同一个操作系统实例之上的两个进程时,它们之间的通信手段还可以更加丰富。除了以上提到的几种分布式解决方案之外,还有共享内存、信号量、文件系统、内核消息队列、管道等,本质上都是通过操作系统内核机制来进行数据和消息的交互而无须经过网络协议栈。

但在现代企业服务中,这种单机应用已经非常少见了,因为单机应用意味着单点故障 —— “一人摔跤全家跌倒”。业务子系统往往都需要经物理网络栈进行隔离,因此分布式解决方案在要求高可用无间断服务的企业环境里便大有作为,这也让 RPC 迎来自己大放异彩的时代。

前文提到的分布式子系统交互方案,除了 RPC 技术之外还有数据库、消息队列和缓存。但其实这三者本质上是 RPC 技术的一个应用组合。我们可以将数据库服务理解为下面这张图:

可以看出,子系统和数据库之间的交互也是通过 RPC 进行的,只不过这里是三个子系统之间复杂的组合消息交互罢了。如果再深入进去,你会发现,这里的数据库不是那种单机数据库,而是具备主从复制功能的数据库,比如 MySQL。在互联网企业里一般都会使用这种主从读写分离的数据库。一个业务子系统将数据写往主库,主库再将数据同步到从库,然后另一个业务子系统又从从库里将数据取出来。这时又可以进一步将它们看成是四个子系统之间进行的更加复杂的 RPC 数据交互。

八、小结

现在,读者应该可以深刻理解 RPC 在互联网企业技术中的重要地位。从技术复杂性角度,也应该可以明白为什么说对 RPC 技术的理解水平是评判一个程序员是不是高级程序员的重要标准之一。

在下一节,我们将对 RPC 的交互原理进行深入的学习,先把地基打牢,再开始实战开发。

九、思考题

请读者思考一下,在平时的后端开发中,还有哪些地方用到了「类 RPC」技术?

原文地址:http://blog.51cto.com/13732225/2149040

时间: 2025-01-11 04:45:52

深入理解RPC——RPC在企业服务中的核心价值的相关文章

抖音运营为您分析抖音企业的两大核心价值

疫情带来挑战也带来机遇可以预见的是,运算能力会是企业未来的根本能力,像一些短视频.外卖平台就是抓住了这个能力,在疫情来临时,才不会手忙脚乱,反而流量再创新高,并从传统企业手中批量夺走客户.宅经的济兴起,电商.短视频.科技.人工智能等领域会飞速增长.顺应时代潮流,是每个企业都必须做的事情, 学会运营抖音将就是第一步.现在抖音运营抖商快车为您分析抖音企业的两大核心价值.建立品牌在短视频平台上的用户资产:一般来讲,很多品牌在进行短视频营销时,只是一次性投放,视频传播过后只能留下曝光数据.而有了企业号这

理解Lucene索引与搜索过程中的核心类

理解索引过程中的核心类 执行简单索引的时候需要用的类有: IndexWriter.?Directory.?Analyzer.?Document.?Field 1.IndexWriter IndexWriter(写索引)是索引过程的核心组件,这个类负责创建新的索引,或者打开已有的索引,以及向索引中添加.删除或更新被索引文档的信息,但不能读取或搜索索引.IndexWriter需要开辟一定的空间来存储索引,该功能由Directory完成 2.Directory /** A Directory is a

企业服务软件开发中需要注意的三个问题

在开发企业服务软件时,我们需要分为:业务需求.用户需求.产品需求,三大需求层次,三个层次互相关联,企业服务软件开发首先要服务业务,需要满足业务的需求,再关注用户体验,也就是用户需求,最后再根据系统使用优越性来考虑产品的需求. 企业服务软件开发 一.业务需求 1.定义业务需求 企业服务产品的业务需求不同于To C产品用户需求,企业服务软件的开发需求一般来自于企业中高层的管理人员,管理人员基于企业的基本业务运转及管理模式,会对定义:业务运转规则.业务闭环流程.业务层级,是一个由上至下的需求模式. 2

专访王亮:从算法工程师到创业AI企业服务步步为赢

本文摘自:王亮新书<ASO优化大师> 王亮,华中科技大学博士,前腾讯研究员.曾在腾讯负责过多个数据运营系统和社区推荐系统研发.研究领域包括商业BI.推荐系统.NLP.2015年创业,创立APPBK运营助手,关注AI在企业服务中的应用. 他曾是腾讯搜索研究员,主要做算法相关的研究,更多的人觉得算法是一门苦学问,开发人员.产品人员.运营人员都离不开,2015年"自立山头"后,他将自己的App推广经验汇总成<ASO优化大师>,得到了大家的肯定. **1. 异步社区:可

安全狗服云web端V3.4(企业服务)版上线

7月3号,服务器安全运维云平台--服云web端V3.4(企业服务)版正式更新上线啦!http://fuyun.safedog.cn/ 企业服务全为了了解并解决企业安全需求而定制.通过这个功能,企业用户可以提出自己所需的所有安全需求,反馈给我们,然后我们将根据用户所提出的需求定制出用户所需的版本,具有针对性地解决用户的安全问题. 6 小时前 上传 服云web端V3.4具体更新内容: 1.优化企业服务内容在界面上的展示,便于用户快速申请.升级企业服务 2.在企业服务中增加安全服务内容 3.升级企业服

使用 neon-wallet-db + neon-js + NEO-cli /rpc 搭建轻钱包服务端

本文将搭建一个不具有任何功能的NEO轻钱包,所有的精力都仅集中于成功运行neon-wallet-db项目并搭配全节点的neo-cli /rpc接口为轻钱包客户端提供服务. 首先需要准备几个项目: neon-wallet-db neon-js neo-cli 然后是劝退部分,即笔者完成壮举准备的环境: 4台debian虚拟机,均运行共识节点 4台虚拟机中一台作为RPC节点运行提供/rpc接口 4台虚拟机中另一台运行neon-wallet-db项目 运行neon-wallet-db项目的前提如下:

从经典架构项目中透析微服务架构的核心概念和充血模型

微服务架构和SOA区别 微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢? 我们先看相同点: 需要Registry,实现动态的服务注册发现机制:需要考虑分布式下面的事务一致性,CAP原则下,两段式提交不能保证性能,事务补偿机制需要考虑:同步调用还是异步消息传递,如何保证消息可靠性?SOA由ESB来集成所有的消息:都需要统一的Gateway来汇

谈谈微服务中的 API 网关(API Gateway)

转载至:http://www.cnblogs.com/savorboard/p/api-gateway.html 背景 我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api 风格的接口来被 H5, Android, IOS 以及第三方应用程序调用. 但是在UI上进行展示的时候,我们通常需要在一个界面上展示很多数据,这些数据可能来自于不同的微服务中,举

销售易史彦泽:企业服务SaaS产业进入深水区

2016年7月28日,传来刚拿了E+轮融资的纷享销客在两天内裁员600人的突发消息,据称裁员人数最终将从2500人降到1100人,而之前纷享销客已经多次改变了产品方向. 2015年11月,同为SaaS CRM创业公司的"销售易"搬进了位于北京朝外东大桥的复兴国际中心,这是位于国贸CBD商圈寸土寸金的地段,四年前这家公司才刚成立.2016年4月,销售易发布了旗舰版及PC PaaS平台,形成了覆盖从大型企业到小微企业需求的全线产品.7月销售易再次推出了智能CRM以及移动PaaS平台. 销售