rpc远程调用原理(远程服务调用RPC)

RPC应该是一种高层次的,语言层次的,而不是像IPC( 本地套接字接口(IPC Socket) )那种低层次,系统层次的东西,我来为大家科普一下关于rpc远程调用原理?以下内容希望对你有帮助!

rpc远程调用原理(远程服务调用RPC)

rpc远程调用原理

1.远程服务调用(Remote Procedure Call,RPC)

RPC应该是一种高层次的,语言层次的,而不是像IPC( 本地套接字接口(IPC Socket) )那种低层次,系统层次的东西

2.RPC协议框架
  • RMI(Sun/Oracle)、Thrift(Facebook/Apache)、Dubbo(阿里巴巴 /Apache)、gRPC(Google)、Motan2(新浪)、Finagle(Twitter)、brpc(百度)、.NET Remoting(微软)、Arvo(Hadoop)、JSON-RPC 2.0(公开规范,JSON-RPC 工作组)
3.进程间通讯
  1. RPC 出现的最初目的,就是为了让计算机能够跟调用本地方法一样,去调用远程方法。
  2. 进程间值如何进行通讯

第一,管道(Pipe)或具名管道(Named Pipe )

    • 管道其实类似于两个进程间的桥梁,用于进程间传递少量的字符流或字节流。
    • 普通管道可用于有亲缘关系进程间的通信(由一个进程启动的另外一个进程);
    • 而具名管道摆脱了普通管道没有名字的限制,除了具有普通管道所具有的功能以外,它还允许无亲缘关系进程间的通信。
    • 管道典型的应用就是命令行中的“ | ”操作符,比如说,命令“ps -ef | grep java” ,就是管道操作符“ | ”将 ps 命令的标准输出通过管道,连接到 grep 命令的标准输入上。

第二,信号(Signal)

  • 信号是用来通知目标进程有某种事件发生的。除了用于进程间通信外,信号还可以被进程发送给进程自身。信号的典型应用是 kill 命令,比如“kill -9 pid”,意思就是由 Shell 进程向指定 PID 的进程发送 SIGKILL 信号。

第三,信号量(Semaphore)

  • 信号量是用于两个进程之间同步协作的手段,相当于操作系统提供的一个特殊变量。我们可以在信号量上,进行 wait() 和 notify() 操作

第四,消息队列(Message Queue)

    • 也就是说,进程可以向队列中添加消息,而被赋予读权限的进程则可以从队列中消费消息。消息队列就克服了信号承载信息量少、管道只能用于无格式字节流,以及缓冲区大小受限等缺点 ,但实时性相对受限。

第五,共享内存(Shared Memory)

    • 允许多个进程可以访问同一块内存空间,这是效率最高的进程间通讯形式。
    • 进程的内存地址空间是独立隔离的,但操作系统提供了让进程主动创建、映射、分离、控制某一块内存的接口。
    • 由于内存是多进程共享的,所以往往会与其它通信机制,如信号量等结合使用,来达到进程间的同步及互斥。

第六,本地套接字接口(IPC Socket)

    • 消息队列和共享内存这两种方式,只适合单机多进程间的通讯。而套接字接口,是更为普适的进程间通信机制,可用于不同机器之间的进程通信。
    • 基于效率考虑,当仅限于本机进程间通讯的时候,套接字接口是被优化过的,不会经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等操作,只是简单地将应用层数据从一个进程拷贝到另一个进程,这种进程间通讯方式有个专有的名称:Unix Domain Socket,又叫做 IPC Socket
RPC协议主要解决的三个基本问题
  1. 表示数据
  2. 传递数据
  3. 表示方法
RPC由于意见不统一,百家争鸣,大家最后默认不再追求大而完美,而是找到一个独特的点作为主要发展方向

面向对象发展

    • 在分布式系统中,开发者们不再满足于 RPC 带来的面向过程的编码方式,而是希望能够进行跨进程的面向对象编程
    • 这条线有一个别名叫作分布式对象(Distributed Object),它的代表有 RMI、.NET Remoting

向性能发展

    • 代表为 gRPC 和 Thrift。决
    • 定 RPC 性能主要就两个因素:序列化效率和信息密度。
  • 序列化输出结果的容量越小,速度越快,效率自然越高
  • 信息密度则取决于协议中,有效荷载(Payload)所占总传输数据的比例大小

向简化发展

    • 代表为 JSON-RPC
    • 它牺牲了功能和效率,换来的是协议的简单
    • JSON-RPC 的接口与格式的通用性很好,尤其适合用在 Web 浏览器这类一般不会有额外协议、客户端支持的应用场合

RPC 框架有明显朝着更高层次(不仅仅负责调用远程服务,还管理远程服务)与插件化方向发展的趋势,不再选择自己去解决表示数据、传递数据和表示方法这三个问题,而是将全部或者一部分问题设计为扩展点,实现核心能力的可配置,再辅以外围功能,如负载均衡、服务注册、可观察性等方面的支持。这一类框架的代表,有 Facebook 的 Thrift 和阿里的 Dubbo(现在两者都是 Apache 的)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页