消息队列高手课
李玥
美团高级技术专家
52199 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
进阶篇 (21讲)
消息队列高手课
15
15
1.0x
00:00/00:00
登录|注册

31 | 动手实现一个简单的RPC框架(一):原理和程序的结构

跨语言调用的实现原理
调用远程服务的实现原理
RPC框架的范围
思考题
RPC框架的总体结构
RPC框架的实现原理
相似之处与消息队列
为什么实现RPC框架
动手实现一个简单的RPC框架(一):原理和程序的结构
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是李玥。
接下来的四节课,我们会一起实现一个 RPC 框架。你可能会问,为什么不实现一个消息队列,而要实现一个 RPC 框架呢?原因很简单,我们课程的目的是希望你能够学以致用举一反三,而不只是照猫画虎。在之前的课程中,我们一直在讲解消息队列的原理和实现消息队列的各种技术,那我们在实践篇如果再实现一个消息队列,不过是把之前课程中的内容重复实现一遍,意义不大。
消息队列和 RPC 框架是我们最常用的两种通信方式,虽然这两种中间系统的功能不一样,但是,实现这两种中间件系统的过程中,有很多相似之处,比如,它们都是分布式系统,都需要解决应用间通信的问题,都需要解决序列化的问题等等。
实现 RPC 框架用到的大部分底层技术,是和消息队列一样的,也都是我们在之前的课程中讲过的。所以,我们花四节课的时间来实现一个 RPC 框架,既可以检验你对进阶篇中学习到的底层技术掌握的是不是扎实,又可以学到 RPC 框架的实现原理,买一送一,很超值。
接下来的四节课,我们是这样安排的。本节课,我们先来学习 RPC 框架的实现原理,然后我们一起看一下如何来使用这个 RPC 框架,顺便给出整个项目的总体结构。第二节课中,一起来实现 RPC 框架的通信与序列化部分,最后的两节课,分别来实现客户端与服务端这两部分。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

该文章介绍了如何动手实现一个简单的RPC框架,以及该框架的总体结构和使用方式。作者首先明确了RPC框架的范围,指出RPC框架是指能够在客户端直接调用服务端方法的框架,而不是基于REST的远程调用框架。接着,详细解释了RPC框架的实现原理和调用远程服务的过程,包括客户端和服务端的实现方式,以及RPC框架的代理类和桩的作用。此外,还介绍了RPC框架中的注册中心和跨语言调用的实现原理。整个项目分为5个Module,包括RPC框架提供的服务RpcAccessPoint和注册中心服务NameService等。读者可以通过GitHub获取该RPC框架的源代码,并通过例子中的服务端和客户端对整个项目有一个感性的认识。该文章内容详实,适合读者了解RPC框架的基本原理和实现方式。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《消息队列高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(20)

  • 最新
  • 精选
  • oh..
    老师我想问下,这个RPC调用过程是不是所有流程都是同步的,等于从客户端开始调用服务端接口就会一直阻塞到等返回相应结果后,程序才会结束。就像直接调用HTTP请求一样,一来一回,还是会出现几次请求返回的。这个问题我有点疑惑

    作者回复: 是这样的,虽然我们的网络传输部分使用了异步设计,但是由于rpc调用本身是同步的,所以整个调用过程还是同步的。

    2019-10-22
    12
  • FATMAN89
    老师能说一下,一个工业级别,生产级别的rpc,框架,比如说dubbo,在真正的实现上,与您的这个rpc框架,需要考虑哪些更多,更复杂的问题吗?多谢了!

    作者回复: 原理是一样的,生产级的系统,会考虑很多细节,比如,兼容各种环境,各种错误处理和保护,各种参数的默认合理值是多少?各种应用场景下需要的一些特定小功能,性能考虑等等

    2019-12-06
    10
  • 大魔王汪汪
    老师 桩的实现可在编译阶段和运行时阶段,在选择上除了语言本身特点外,性能上有没有差异,比如运行时阶段跑不掉使用代理反射,如果直接在编译时生成代理类,是不是可以减少这部分性能损耗

    作者回复: 严格来说,性能肯定是有差异的。 但是在用于生产的RPC框架中,生成的桩的实例都是可以反复调用的,而不是每调用一次就重新生成一次桩,对于已经生成好的桩,调用的时候,就和动态编译还是静态编译没有关系了,所以,考虑反复多次调用的平均性能,几种方式其实是差不多的。

    2019-10-08
    9
  • 不是做 java 的,对与 RPC 的调用方式 不是很理解 客户端去注册中心 找到对应的需要执行的方法,和通知服务端需要执行的方法,不还是要进行通讯的吗?这个通讯走的不是http了?

    作者回复: 最后一节课会回答你这个问题

    2019-10-12
    8
  • 海罗沃德
    感覺老師講的這個跟EJB很像,name service和JNDI很像,求教是不是這樣?

    作者回复: 是的,实质上就是一个东西 。

    2019-10-21
    3
  • 姜戈
    太棒了,这是买一送一呀,这个专栏学到的绝不只是消息中间件知识~,还帮我们打通任督二脉,赞~
    2019-10-12
    28
  • QQ怪
    牛逼,老师厉害了
    2019-10-05
    5
  • kyll
    看到这里, 突然想起了N年以前使用EJB时的 Stub,感慨一下。
    2020-02-04
    3
  • cppby
    卧槽 这一篇 看完 对rpc理解茅塞顿开。。谢谢
    2019-11-08
    2
  • 南山
    看得困意全无!
    2019-10-07
    2
收起评论
显示
设置
留言
20
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部