学习RPC

      很少在技术论坛写东西,可能是level不够写出东西怕误导大家吧,所以一般我都习惯于用印象笔记。最近在学习GRPC,发现网上资料好少,甚至连官方的demo都很难跑起来,所以我觉得暂且装一次逼吧,写点东西给大家分享一下,欢迎踊跃拍砖。

      首先,什么是RPC?为什么要用RPC?RPC和HTTP接口有什么分别?

      1、RPC即远程过程调用协议;(这里不解释概念了,感兴趣的同学可以去找度娘)

      2、在传输效率和安全性要求比较高的时候,RPC无疑是目前的首选,比如阿里庞大的各业务子系统,海量的并发请求,用HTTP很难达到逾期。

      3、RPC照比HTTP接口肯定复杂的多,并且有一定的学习门槛,但是对于解决一些性能瓶颈,总有一天你是需要它的,因为HTTP接口受限于HTTP协议。RPC跨越了传输层应用层(OSI),使得开发包括网络分布式多程序在内的应用程序更加容易。

      好了,简单描述了下RPC的相关背景,先有个宏观的概念,如果你还是觉得模糊。好吧,那我就简单粗暴的告诉你我的理解:假如有两台服务器A和B,服务器A想要调用B服务器上提供的函数或者方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据,这就远程过程调用PRC。

      常用的RPC框架:

      PRC框架太多了,比如 java RMI、WebService、PhpRpc、Hessian、JSON-RPC、ZeroC Ice、Thrift、GRPC、Hprose、Dubbo...

      这里挑当前几个主流的比较下:Thrift(facebook开源)、GRPC(谷歌)、Dubbo、Hprose,首先我们在选择用RPC框架时应该有一个标准:

      1、简单易用、效率较高,功能强大;

      2、支持传输方式丰富(如 HTTP、TCP、Websocket);

      3、具有良好的可扩展性,可以通过过滤器和中间件实现加密、压缩、缓存、代理等各种功能性扩展;

      4、兼容的无差别跨语言调用支持更多的常用语言和平台;

      git上看到的一个测试,不间断运行10,000次远程RPC调用后的结果如下:

      RPC benchmark

      GRPC

      目前还不完善,通讯是基于Netty,跨语言序列化、反序列化是基于protobuf,协议是基于http2.0设计的,未来是一个趋势。

      Hprose

      当写这篇文章时,深深被Hprose吸引了,未完待续.....

      

猜你喜欢

转载自terryinfo.iteye.com/blog/2324848
RPC
今日推荐