简单聊下 RPC 实现

栏目: 服务器 · 发布时间: 6年前

内容简介:相信大家或多或少都接触过RPC(Remote Procedure Call)框架,业务发展到一定阶段,都或多或少做过一些服务化的事情。(如果有不了解的,自行google去,这里就不详细说明了)大家用的同时,可能很少人会去思考RPC框架怎么去实现的呢?首先一个简单的远程服务调用中间会经过哪些流程呢?

相信大家或多或少都接触过RPC(Remote Procedure Call)框架,业务发展到一定阶段,都或多或少做过一些服务化的事情。(如果有不了解的,自行google去,这里就不详细说明了)

大家用的同时,可能很少人会去思考RPC框架怎么去实现的呢?

首先一个简单的远程服务调用中间会经过哪些流程呢?

客户端序列化-》序列化过程中创建二进制数组-》数组需要在jvm堆内存以及堆外内存创建-》客户端把序列化好的数组发送给服务端,所以高性能的序列化框架很重要-》服务端接入请求,这里又涉及到怎么同时处理多个客户端接入请求,I/O多路复用技术就起到了作用-》服务端读取码流,这里又涉及到解码,怎么与客户端协定好通信协议呢-》服务端通过反射的方式调用服务提供者实现类,反射本身对性能影响就非常大,这里又涉及怎么去优化。-》等等

简单聊下 RPC 实现

实际上整个RPC过程,复杂的多,上面只是带起大家的思考。

下面简单说下实现RPC框架很重要的几点。

  • 如何注册发布服务?

    可能了解zookeeper同学会说,用zookeeper就可以实现服务自动注册与发现功能。zookeeper简单来说就是个文件系统,储存了ip+端口。本身选举机制也很大保证了服务注册表的高可用。

  • 无缝调用服务

    远程服务怎么与本地服务一样无缝调用呢?这里就涉及到了 java 动态代理,代理类封装了通信的细节,让消费端直接调用。

  • 序列化

    实现高能化的序列化框架不是很容易的,序列化后的码流大小,性能,是否支持夸语言,并发调用的性能表现。实践使用过程中,一般是二进制序列化框架,比如Protobuf等,感兴趣的可以去了解下。

  • 通信

  • 目前有两种常用IO通信模型:1)BIO;2)NIO。一般RPC框架需要支持这两种IO模型。

    目前主流的rpc框架都是基于netty来的,netty的零拷贝,内存池,无锁化的串行设计等都使它有很大的性能优势。

    后面我会出篇文章细讲下关于netty的原理,以及RPC代码级的实现。 如果你觉得有点收获,不妨关注下公众号。


    以上所述就是小编给大家介绍的《简单聊下 RPC 实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

    查看所有标签

    猜你喜欢:

    本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

    C程序设计(第四版)

    C程序设计(第四版)

    谭浩强 / 清华大学出版社 / 2010-6-1 / 33.00元

    由谭浩强教授著、清华大学出版社出版的《C程序设计》是一本公认的学习C语言程序设计的经典教材。根据C语言的发展和计算机教学的需要,作者在《C程序设计(第三版)》的基础上进行了修订。 《C程序设计(第4版)》按照C语言的新标准C99进行介绍,所有程序都符合C99的规定,使编写程序更加规范;对C语言和程序设计的基本概念和要点讲解透彻,全面而深入;按照作者提出的“提出问题―解决问题―归纳分析”三部曲......一起来看看 《C程序设计(第四版)》 这本书的介绍吧!

    RGB转16进制工具
    RGB转16进制工具

    RGB HEX 互转工具

    正则表达式在线测试
    正则表达式在线测试

    正则表达式在线测试

    RGB HSV 转换
    RGB HSV 转换

    RGB HSV 互转工具