简单聊下 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 实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

    查看所有标签

    猜你喜欢:

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

    深入理解SPARK

    深入理解SPARK

    耿嘉安 / 机械工业出版社 / 2016-1-1 / 99

    《深入理解SPARK:核心思想与源码分析》结合大量图和示例,对Spark的架构、部署模式和工作模块的设计理念、实现源码与使用技巧进行了深入的剖析与解读。 《深入理解SPARK:核心思想与源码分析》一书对Spark1.2.0版本的源代码进行了全面而深入的分析,旨在为Spark的优化、定制和扩展提供原理性的指导。阿里巴巴集团专家鼎力推荐、阿里巴巴资深Java开发和大数据专家撰写。 本书分为......一起来看看 《深入理解SPARK》 这本书的介绍吧!

    随机密码生成器
    随机密码生成器

    多种字符组合密码

    Base64 编码/解码
    Base64 编码/解码

    Base64 编码/解码

    XML 在线格式化
    XML 在线格式化

    在线 XML 格式化压缩工具