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

    查看所有标签

    猜你喜欢:

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

    Refactoring

    Refactoring

    Martin Fowler、Kent Beck、John Brant、William Opdyke、Don Roberts / Addison-Wesley Professional / 1999-7-8 / USD 64.99

    Refactoring is about improving the design of existing code. It is the process of changing a software system in such a way that it does not alter the external behavior of the code, yet improves its int......一起来看看 《Refactoring》 这本书的介绍吧!

    在线进制转换器
    在线进制转换器

    各进制数互转换器

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

    正则表达式在线测试

    HSV CMYK 转换工具
    HSV CMYK 转换工具

    HSV CMYK互换工具