专栏首页EffectiveCoding到底什么是RPC - 概述

到底什么是RPC - 概述

前言

远古时期,每个进程各干各的,但随着发展有时候会存在A进程调用B进程某一方法,使用其功能的场景,比如说把画图统一都在某一个进程中,其他进程只需要调用它就ok了(代码没有散落到各地、也减少了一部分动态链接的管理),但是最初是不支持的,就产生了所谓的IPC(Inter-process communication 本地进程间通信),没错这里的IPC就是上学的时候经常背的 共享内存等进程间通讯方式。 再后来越来越多的单机系统复杂到无法维护面临拆分,小型机的瓶颈凸显及性价比越来越低,由pc和廉价服务器构成的集群、分布式方案逐渐形成,开始出现多个pc或者服务器 搭建分布式系统的场景,之前单机上的IPC也演变成了现在的RPC(远程过程调用)。 做服务器端研发,经常会有这样的一些名词RMI(remote method invocation,面向对象的远程方法调用)、RPC(remote procedure call,远程过程调用)、SOAP(simple object access protoal,简单对象访问协议)、REST(representational state transfer,表达性状态转移),这些都可以理解为调用远程方法的一些通信技术“风格”,其中RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于rpc范畴,本系列要说的就是这个泛化的RPC。

定义

RPC(Remote Procedure Call Protocol)远程过程调用协议,就是允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,且不需要显式编码这个远程调用的细节。 它是一种架设在计算机网络之上并隐藏底层网络技术,像调用本地服务一样调用远端程序,在编码代价不高的情况下提升吞吐的能力。 通俗来说,就是为了使程序员从网络处理中释放出来,在分布式环境下编程变得简单,无需关系底层网络实现细节&协议仅关注业务逻辑实现即可,比如Java的Dubbo、Go的net/rpc & RPCX、谷歌的grpc等。我们只需要按照约定定义对外接口,按照约定发起调用即可,操作起来跟调了一个函数差异不大。

核心关注点

看完定义之后,应该清楚rpc所要解决的核心问题:进程间通信时,减少网络编码的成本&出错概率 在看rpc时首先想到的是它的构成,通常来说是长这样的:

image.png

对于远程过程调用,通常有服务端、客户端、通信网络 三部分构成

一个RPC协议比较核心的通常是通信协议编码协议序列化格式

客户端对传输内容(数据+指令) 进行序列化、协议编码、网络传输到远程服务器端,服务端接受输入对传输内容进行解码、反序列化完成数据的逻辑计算,产生输出后,同样方式传递给客户端,完成整个RPC调用。

一个RPC框架除实现RPC协议外,通常提供了负载均衡容错机制服务注册发现等附加功能:(这些功能并不是RPC所必需的)

在调用过程中,为了解决分布式环境下机器&服务数量巨大&状态繁多导致的难以管理的问题,RPC框架通常还集成了 “如何鉴别调用哪些机器,哪些机器是死是活” 的服务注册&发现功能。

对于分布式环境下必然存在的网络不稳定问题,提供了一定的容错机制。

针对合理使用机器&网络资源,保证各个机器的稳定程度,提供了一定的负载均衡功能

通信协议

在通信协议方面,RPC跨越了传输层和应用层,像grpc 就是基于http 2.0的协议、Dubbo在tcp基础上研发的应用层传输协议。 这一块后续会单独对于常见的应用层网络协议(基于TCP的自研协议基于现有的HTTP 2.0)进行介绍,包括其中的特点优势等 另外,好多同学刚接触RPC时,可能会对RPC or http 产生一点疑惑,为什么有了http还要使用RPC,这两个概念的维度上是不同的: HTTP :提供标准的报文格式,都认可的通讯特性等,对外仍然暴露出标准的网络编程接口。 RPC :针对某些领域的特定场景提供具有更灵活、可定制的、更加保密的协议。可以把RPC理解是通讯协议之上,站在服务的角度,做的更高一级的封装。 换句话说,如果你想 在http 1.1 上包一层函数代理(隐藏网络通信细节)、集成服务注册发现(某场景下的特定诉求)等具有加成作用的功能,你可能就写出了一个RPC框架。

编码协议

首先RPC协议是语言无关的,客户端的实现语言与服务端的实现语言可以是相同的也可以是不同的,在RPC调用时必然需要一种标准的编码协议来约定接口数据格式、处理传输内容的编码解码操作,具体要看框架的实现程度和支持。 后续会对业界常见的 基于文本编码的json、xml、基于二进制编码protobuf 为例进行介绍。

RPC框架选型

常见的RPC 框架是很多的,在我们进行新业务开发的时候RPC框架的选型问题会变得很凸显,通常有如下几个方面考虑:(核心就是成本(现在&将来),不能因为新技术或者大家都在用就贸然引入) 1、机器成本(比较各个RPC所能带来的性能提升,从而节省出的机器) 2、研发效率成本(引入新的技术所带来的效率提升比较) 3、研发质量成本(引入新的技术会不会引入新的风险,该风险是否可控,解决风险的代价) 4、人力成本(引入新的技术时,团队对该技术该语言的熟悉程度,引入&熟悉时需要付出的人力成本,要考虑团队技术栈等多方面因素) 前三点是引入的价值比较(是否值得引入、应该用哪个),最后一点是当前情况下是否值得引入。 分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 由null出发-看看为何mysql这么排斥null

    在表结构设计时我们经常会面对是否要加空值约束、默认值处理等问题,当向前人经验中检索时,经常会看到不建议为null,强刷面经时not null也经常被归结到优化建...

    邹志全
  • Go 语言进阶--基础概念

    本系列文章到现在已经将Go非常基础的部分介绍完成了,后面就开始设计非常具有Go特色的内容了,因为之后会出现一系列的名词和概念,为了方便本篇先把这些基础概念和我的...

    邹志全
  • Spring AOP

    Spring AOP 使用场景蛮多的属性检查、日志等,所有拦截下来可以在切面共同做的事儿似乎都可以用AOP(面向切面)的方式解决。在面试的过程中AOP 也是除I...

    邹志全
  • Haodoop RPC解析

    RPC是对外的接口类,主要提供两个方法:getProxy和getServer。

    一见
  • Nodejs之RPC协议简介

    随着 Nodejs 的兴起,越来越多的 Web 服务中间层被搭建起来。如 Node 服务端渲染,BFF(Backend For Frontend))层,而 RP...

    winty
  • 必知必会 - 一文搞定理解RPC

    前言RPC概念RPC协议RPC组成RPC协议RPC框架RPC的优点RPC与HTTP的区别

    上帝De助手
  • 架构设计:系统间通信(10)——RPC的基本概念

    http://blog.csdn.net/yinwenjie/article/details/49453303

    bear_fish
  • Hadoop学习笔记—3.Hadoop RPC机制的使用

      (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网络通信细节,对我们来说是透明的。因此,它经常用于分布式网络通信中。

    Edison Zhou
  • 微服务生态-RPC基础

    https://github.com/apache/dubbo-website/blob/master/blog/zh-cn/rpc-introduction....

    needrunning
  • Web | 什么是 RPC ?

    RPC 大家经常会听到有人提起,但是 RPC 到底是什么东西貌似没有人认真的解释和回答过。(有也当做没看见,不然我还写个啥)

    咸鱼学Python

扫码关注云+社区

领取腾讯云代金券