关于RPC的一些总结



关于RPC的思考:
1.RPC是一种跨进程(网络)交互的思想;
2.为了方便大家使用RPC,出现了很多RPC框架,例如Protol Buffer、AVRO和Thrift等,它们具有各自的语法(IDL)和将用户使用它们语法描述生成的业务逻辑(协议)生成指定编程语言(例如JAVA/C/C++)的
 实现(例如JAVA语言的,会生成class文件);
3.用户在采用某个RPC框架时,必须遵守这个RPC框架的描述语言(IDL),来定义/描述用户的业务逻辑,也就是客户端和服务端所达成的协议,不同的客户端和服务端,可以根据需要,达成不同的协议。例如,HDFS 有多种协议,YARN也是如此。
4.这些RPC框架,可以生成多种语言,一旦用户在这些RPC框架下,生成用户自定义的协议后,RPC框架就可以帮其生成某个具体语言的实现。用户在其框架下定义下来的协议,和RPC框架最终帮其生成的代码实现,
 这两者的关系类似于HTTP协议(用户自定义的协议)和我们开发HTTP-Client/Server的关系,此时,HTTP-Client用啥语言实现,HTTP-Server用啥语言实现,就没啥关系了,只要Client和Server两者之间遵从
 这个协议就得了。注:之前一直都在思考RPC框架,要支持序列化,也应该是指要支持对象序列化,那么若一个JAVA对象被序列化并传递到对方,那对方假如是另外一种语言(例如C++),那如何解析这个JAVA
 对象,现在想来应该不是这样子了,交互双方必定要在RPC框架下,用一样的IDL语言,描述逻辑,在最终业务交互中,也不会存在所谓的JAVA对象被传递到对方,由对方(可能是另外一种语言实现)来解析的
 情况,大家在这种场景下传递的肯定是各自能读懂的内容。
5.HBase的RPC:
和组里同事讨论交流:HBase支持通过Thrift 框架在客户端和服务端之间交互。而对于普通的JAVA API ,其使用的RPC框架是PB。
6.关于thrift :
较全的教程:
http://gemantic.iteye.com/blog/1199214
一个实例:http://blog.csdn.net/hgd250/article/details/8291449
7.HDFS RPC:http://weixiaolu.iteye.com/blog/1504898
我的理解:HDFS 使用hadoop RPC的方式实现HDFS client和HDFS server的交互
(1)client使用序列化将请求转化为字节,通过socket方式,传递给server端,这个IO使用的是JAVA 的阻塞IO;
(2)server端使用JAVA NIO,获取socket上来的数据,解析之后,以JAVA反射机制和动态代理来处理client的请求;

8.ZK的RPC

比较古老,使用的还是Jute,据说社区zk团队也打算将之切为hadoop 后来独立开源的avro框架,但考虑到切换成本较高,且jute也一直都不是zk的性能瓶颈,所以就一直坚持下来了。

9.一个大概的hadoop RPC框架示意图:

另外,HDFS的RPC框架,一个比较全的总结:
http://www.tuicool.com/articles/VBrQvm


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值