简单聊下 RPC 实现

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

内容简介:相信大家或多或少都接触过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 实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

    查看所有标签

    猜你喜欢:

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

    CSS设计指南

    CSS设计指南

    史密斯 / 李松峰 / 人民邮电出版社 / 2013-5 / 59.00元

    《图灵程序设计丛书:CSS设计指南(第3版)》是一本面向初中级读者的经典设计指南。全书共分8章,前4章分别介绍了HTML标记和文档结构、CSS工作原理、定位元素、字体和文本,对规则、声明、层叠、特指度、选择符等基本概念进行了详细解读。随后4章介绍了页面布局、界面组件,CSS3圆角、阴影、渐变、多背景等视觉设计技巧,最后还对如何实现最前沿的响应式设计进行了通俗易懂的演示。一起来看看 《CSS设计指南》 这本书的介绍吧!

    CSS 压缩/解压工具
    CSS 压缩/解压工具

    在线压缩/解压 CSS 代码

    html转js在线工具
    html转js在线工具

    html转js在线工具