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

    查看所有标签

    猜你喜欢:

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

    机器与人:埃森哲论新人工智能

    机器与人:埃森哲论新人工智能

    【美】保罗•多尔蒂 詹姆斯•威尔逊 / 赵亚男 / 中信出版社 / 2018-10-1 / 49.00元

    自人工智能问世以来,人们普遍持有人机对立的观点,且无时无刻不在害怕自己的工作会被人工智能取代。作者认为,是时候抛开这些无谓的担忧了,因为人类社会正走向一个与机器共融共生的时代。 未来的新型工作模式是什么?未来有哪些工作不会被人工智能取代?人工智能时代重要的生存技能是什么?本书围绕这三大核心问题做了透彻的分析。作者带我们见识了置于业务流程背景之下的人工智能,阐述了其在不同职能部门中起到的推动作......一起来看看 《机器与人:埃森哲论新人工智能》 这本书的介绍吧!

    图片转BASE64编码
    图片转BASE64编码

    在线图片转Base64编码工具

    HTML 编码/解码
    HTML 编码/解码

    HTML 编码/解码