RPC

远程协议调用

RPC是一种概念,用以让远程连接的多台服务器可以像调用本地方法一样互相调用

这里写图片描述

流程

一台客户端服务器需要调用另外一台服务端服务器上的方法,客户端将需要调用的方法的信息序列化,通过网络流传输至另外一台服务器上,反序列化,执行操作并得到返回结果,再次通过网络将此返回对象序列化传输回到客户端服务器。

RPC的思路流程:
1. 程序中需要远程调用的方法调用客户端句柄,传输所需参数
2. 调用本地系统网络部分,发送信息
3. 消息传输
4. 服务器端接收到信息,将信息传给处理此操作的服务器端句柄
5. 句柄调用相应方法,操作数据(可以采用监视器模式)
6. 得到结果,返回结果给句柄
7. 句柄调用服务器的本地网络,返回信息
8. 信息返回
9. 客户端本地网络将信息发送给客户端句柄
10. 句柄将结果返回给方法

应用场景

而一旦踏入公司尤其是大型互联网公司就会发现,公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队负责。这时就会遇到两个问题:怎么实现多个服务间的通信?RPC框架就是为了解决多服务间调用的复杂情况,尽量让远程的调用变得简洁透明,让团队能够专注于业务开发。

三个关键点

RPC是一种远程调用的概念,如何实现这种概念有三个值得注意的关键点:
1. 信息传递
2. 数据序列化
3. 网络通信

信息传递

通俗地说RPC是两台计算机上不同进程间的通信,如何进行不同计算机不同进程的交流沟通,识别对方的IP,端口,方法名,参数等都是要经过处理的。

数据序列化

通过网络流传输数据,数据必须要进行序列化和反序列化,这两种操作的具体实现很重要。

网络通信

一般来讲,我们常提到的Netty是网络通信的一种工具,从原理上来讲与RPC概念并不相同,各种实现RPC的框架具体使用的网络通信方式并不相同, 比如gooogle的gRPC直接使用http2作为网络通信的方法。一般来讲,各种RPC的实现框架都使用TCP协议作为网络通信的基本方法。

常见的RPC框架

dubbo、dubbox、motan、thrift、grpc

要想提高效率,除了硬件的提升,主要考虑以下三个方面:

I/O调度模型:同步阻塞I/O(BIO)还是非阻塞I/O(NIO)。
序列化框架的选择:文本协议、二进制协议或压缩二进制协议。
线程调度模型:串行调度还是并行调度,锁竞争还是无锁化算法。
IO调度现在主流的就是netty。
高性能序列化目前性能最好的是ice,google 的 pb协议,FB的thrift协议等
线程没啥好说的,肯定多线程了。当然也可以是AKKA(java)

RPC与SOA的区别

总的来讲:RPC是一种进程远程调用的方式,更强调的是异构平台之间进程通信的机制。SOA是一种产品架构的理念,以服务为中心,松耦合,通过定义严谨明确的接口进行通信。有比较完善的服务管理机制。

两者并不是一个层面上的概念,可以说RPC是SOA架构的一种实现。

RPC与REST的区别

如果你想只记住一点,那么就请记住 RPC是以动词为中心的, REST是以名词为中心的, 此处的 动词指的是一些方法, 名词是指资源.这两种方法没有孰优孰劣。

你会发现,以动词为中心意味着,当你要需要加入新功能时,你必须要添加更多的动词, 这时候服务器端需要实现 相应的动词(方法), 客户端需要知道这个新的动词并进行调用.

而以名词为中心, 假使我请求的是 hostname/friends/, 无论这个URI对应的服务怎么变化,客户端是无需 关注和更新的,而这种变化对客户端也是透明的.

至于其它的区别,如对实现语言的依赖, 耦合性等,这些都是上面提到的这个根本区别所衍生的.

当你每天使用HTTP冲浪时,你都在使用 REST 与远程的服务器进行亲密接触. 当你使用Gtalk和同事朋友沟通时,你则是在享受着 RPC 的便利.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值