远程调用 RPC 和 RMI 如何选择?
Posted 程序员的成长之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了远程调用 RPC 和 RMI 如何选择?相关的知识,希望对你有一定的参考价值。
旁白:我又来了~
上一篇:
正文
远程调用
远程调用简单来说就是发送一个请求给远程机器,远程机器返回一个结果回来的过程。
为什么要这么做?
单台服务器的性能远远不能满足现在互联网这个体量的用户需求,就好比你去肯德基点餐,餐台的服务员把薯条鸡腿汉堡的任务分给不同的人,然后收集起来给你的过程,餐台服务员就相当于调用远程服务。
RPC
RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上调用某种服务。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
可以这么理解,RPC是所有语言的通用协议,有点像SOAP,而RMI是RPC的一种Java实现,或者说RMI是RPC的Java版细化要求。
只要是通过网络从而调有远端的某种服务,那么这就是RPC,而不一定就是要http请求,tcp请求,udp请求,soap报文请求都可以,何况这几种请求是有关联的。
使用代表:Dubbo
开源RPC框架
Dubbo
Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。目前已经进入Apache孵化器。
Motan
Motan是新浪微博开源的一个Java RPC框架。2016年5月开源。Motan 在微博平台中已经广泛应用,每天为数百个服务完成近千亿次的调用。
gRPC
gRPC是Google开发的高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。本身它不是分布式的,所以要实现上面的框架的功能需要进一步的开发。
Thrift
Thrift是Apache的一个跨语言的高性能的服务框架,也得到了广泛的应用。
RMI
RMI(Remote Method Invocation)远程方法调用,能够让在客户端 Java 虚拟机上的对象调用本地对象一样调用服务器端 Java 虚拟机中的对象方法。
1、方法调用方式不同
RMI调用方法,RMI中是通过在客户端的Stub对象作为远程接口进行远程方法的调用。
每个远程方法都具有方法签名。
如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口(stub)上,那么这个新方法就不能被RMI客户方所调用。
RPC调用函数,RPC中是通过网络服务协议向远程主机发送请求,请求包含了一个参数集和一个文本值,通常形成“classname.methodname(参数集)”的形式。这就向RPC服务器表明,被请求的方法在“classname”的类中,名叫“methodname”。
然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。这里的参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后通过网络协议发回。
2、适用语言范围不同
RMI只用于Java,支持传输对象。
RPC是基于C语言的,不支持传输对象,是网络服务协议,与操作系统和语言无关。
3、调用结果的返回形式不同
RMI是面向对象的,Java是面向对象的,所以RMI的调用结果可以是对象类型或者基本数据类型。
RPC的结果统一由外部数据表示(External Data Representation,XDR)语言表示,这种语言抽象了字节序类和数据类型结构之间的差异。只有由XDR定义的数据类型才能被传递,可以说RMI是面向对象方式的Java RPC。
如果你觉得文章不错,欢迎在看、转发、赞赏一条龙,你的支持就是我最大的动力。
<END>
推荐阅读:
朕已阅
以上是关于远程调用 RPC 和 RMI 如何选择?的主要内容,如果未能解决你的问题,请参考以下文章