RPC 实战与核心原理
何小锋
京东云混合云首席架构师
40244 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
RPC 实战与核心原理
15
15
1.0x
00:00/00:00
登录|注册

01 | 核心原理:能否画张图解释下RPC的通信流程?

动态代理技术
反序列化
序列化
通过网络传输数据
隐藏底层网络通信的复杂性
屏蔽远程调用跟本地调用的区别
RPC的应用场景
RPC解决系统拆分后的通信问题
RPC对应的是整个分布式应用系统
RPC框架的通信流程
RPC的作用
RPC的全称是Remote Procedure Call,即远程过程调用
RPC使用过程中需要注意的问题
应用中使用RPC的地方
RPC使用过程中需要注意的问题
RPC的原理
RPC在架构中的位置
RPC通信流程
什么是RPC?
课后思考
总结
核心原理:能否画张图解释下RPC的通信流程?

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

你好,我是何小锋。只要你做过几年开发,那我相信 RPC 这个词你肯定是不陌生了。写专栏之前,我还特意查了下 RPC 的百度指数,发现这些年 RPC 的搜索趋势都是稳步上升的,这也侧面说明了这项技术正在逐步渗透到我们的日常开发中。作为专栏的第一讲,我想只围绕“RPC”这个词,和你聊聊它的定义,它要解决的问题,以及工作原理。
在前些年,我面试工程师的时候,最喜欢问候选人一个问题,“你能否给我解释下 RPC 的通信流程”。这问题其实并不难,不过因为很多工程师平时都在用各种框架,他们可能并未停下来思考过框架的原理,所以,问完这问题,有的人就犹豫了,吱唔了半天也没说出所以然来。
紧接着,我会引导他说,“你想想,如果没有 RPC 框架,那你要怎么调用另外一台服务器上的接口呢”。你看,这问题可深可浅,也特别考验候选人的基本功。如果你是候选人,你会怎么回答呢?今天我就来试着回答你这个问题。

什么是 RPC?

我知道你肯定不喜欢听概念,我也是这样,看书的时候一看到概念就直接略过。不过,到后来,我才发现,“定义”是一件多么伟大的事情。当我们能够用一句话把一个东西给定义出来的时候,侧面也说明你已经彻底理解这事了,不仅知道它要解决什么问题,还要知道它的边界。所以,你可以先停下来想想,什么是 RPC。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

RPC是远程过程调用的缩写,它的作用是屏蔽网络编程细节,实现调用远程方法就像调用本地方法一样的体验。本文深入解释了RPC的通信流程,包括序列化、网络传输、协议格式、反序列化等细节,并介绍了如何通过动态代理技术简化RPC框架的API。作者通过图示清晰地展现了RPC的通信流程,适合开发人员快速了解RPC的核心原理和通信流程。RPC在架构中扮演着重要角色,特别是在分布式应用系统中,RPC的作用就像是整个系统的“经络”一样。文章还强调了RPC框架在系统拆分后的通信问题解决和提升开发效率方面的重要性。此外,RPC不仅可以用于解决通信问题,还被广泛应用于发MQ、分布式缓存、数据库等场景。总之,RPC是构建复杂系统的基石,对于软件开发者来说,详细了解RPC实现细节是非常必要的。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《RPC 实战与核心原理》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(73)

  • 最新
  • 精选
  • 楼下小黑哥
    我们目前服务内部调用都是使用 rpc,对外接口采用 restful 接口。 采用rpc 开发最终要我觉得是设置合理超时时间以及重试次数。因为 rpc毕竟需要走网络调用,存在网络耗时。超时间太短,可能导致服务提供端实际执行成功,消费端却因为超时报错结束。这就有可能导致数据状态不一致。 另外,整个链路的超时需要合理设置,如A-》B-〉C,A的超时时间要大于B。 重试次数也需要关注,默认情况下,如 dubbo 重试次数为2,调用失败的情况下,框架会重新调用。而有些服务不能重复调用。 服务提供者应该是最熟悉自己服务的,所以服务提供者可以设置默认超时时间以及重试次数,消费者不设置,就会采用服务提供者参数设置。 😅想了下,开发过程中其实还有好多细节要注意,细节决定成败,后面章节可以再聊聊,让我们跟老师一起学习。

    作者回复: 思路很好。

    2020-02-18
    7
    101
  • Geek_c8b5a1
    1、你应用中有哪些地方用到了 RPC? 在公司内部不同服务之间的调用都是走的RPC 2、你认为,RPC 使用过程中需要注意哪些问题? 1)下游服务的服务能力,避免因为你的调用把别人给调挂了,要事前协商好qps等,做好限流 2)调用服务异常时,要考虑降级、重试等措施 3)核心的服务不能强依赖非核心的服务,避免核心服务因为非核心服务异常而不可用

    作者回复: 很好

    2020-02-25
    4
    61
  • 1:你应用中有哪些地方用到了 RPC? 我认为还是分开说比较好一点,侠义的RPC就是为了实现进程间方法调用像进程内方法调用一样简单。广义的RPC可以认为只要跨进程通信就是RPC,即使是在一台机器上两个进程间进行通信了,也是RPC,,不过目前来看RPC更强调侠义的含义。广义的含义和网络通信是一个意思,话说两台电脑之间想通信不靠网络靠什么呢?人肉操作嘛? OK,RPC核心就是为了应用解藕而存在,只有系统间是进程通信必然会用到RPC。 2:你认为,RPC 使用过程中需要注意哪些问题? 第一服务注册服务发现,服务注册中心 第二服务治理,有多少服务?都是那些服务?谁调用谁?怎么下线服务?怎么修改服务分组?怎么修改服务别名?服务限流怎么控制?服务降级怎么控制?服务上下游信息?服务调用链信息? 第三服务监控,方法调用链监控?每个方法的监控,比如:TPS/调用量/可用率/以及各种汇总聚合信息,最小/最大/平均/各种TP分位统计,报警配置信息等等,这些东西一下就知道服务是否可用?在一个完整的调用链上那个服务比较慢?也可以统计服务的调用次数?对于分析排查问题,尤其是性能问题帮助非常大 第四日志查询平台,实时日志、现场日志、历史日志都能根据关键字界面化傻瓜式的查询出来,也能统计出日志里的报错信息关键字等。非常利于业务问题的排查,及时发现系统中的业务问题。 第五配置中心,可以调整日志级别、各种业务开关、服务分组别名信息,对于服务控制会非常灵活。 话说JD这些做的还挺不错,不过全链路跟踪系统好像做的还不太好,如果这个改造好了,那链路上那个系统慢就一目了然了,性能问题的排查会更简单方便。

    作者回复: 👍

    2020-05-10
    4
    49
  • 洛奇
    第一幅图中,编解码是一种码吗? 为什么序列化后生成编解码后还要再编码,才能放到网络上呢? 为什么不能直接一步序列化就放到网络上?

    作者回复: 序列化是对方法调用的请求信息进行处理,编解码是对网络传输消息进行处理。

    2020-02-17
    9
    32
  • 陛下
    现在最严重的问题就是事物吧,分布式事物,感觉一直没有好办法解决

    作者回复: 分布式事务是痛点,目前有开源方案了。我们为了性能常用补偿事务,最终一致性。

    2020-02-18
    3
    23
  • 雨霖铃声声慢
    1. 你应用中有哪些地方用到了 RPC? 我们的应用是微服务架构的,RPC就是连接这些微服务之间的纽带。 2. 你认为,RPC 使用过程中需要注意哪些问题? 因为RPC也是网络调用,性能方面肯定不如本地调用,所有RPC的API设计要仔细考虑,比如一次性能完成的调用就不要走多次调用。另外我认为最重要的是要有监控系统能监控所有的调用链,方便问题排查和性能调优。

    作者回复: 👍👍👍

    2020-02-18
    15
  • 忆水寒
    1、你应用中有哪些地方用到了 RPC? 答:我们目前系统进行拆分(C++开发的),也是分布式部署的,我们的RPC在系统间交互(或同步)数据时使用RPC接口进行调用。其次,我们RPC还是一个信息管家,可以通过事件进行提醒应用层主备机信息等。 2、你认为,RPC 使用过程中需要注意哪些问题? 答:这个问题让我想起了一次面试中面试官问我“你觉得一个设计RPC框架中最重要的是哪一点?”我当时首先说了RPC框架首先是通信、自定义协议(protobuf)、序列化、注册中心。我们的RPC由于C++开发的,只提供消息传输的功能,序列化和协议在应用层做的(主要是考虑不同项目的业务也有区别)。我觉得其中最重要的就是注册中心(数据中心)实现了,这个决定了RPC所能提供扩展功能。

    作者回复: 这些都是rpc的核心功能。

    2020-02-18
    4
    14
  • 小伟
    我觉得广义来说,只要涉及调用的网络通信都属于RPC的范畴,包括Rest API,因为本质上都是走网络通信的非本地调用。 关于服务内部用RPC,服务外部用Rest API,主要考量的还是安全性。服务内部网络一般认为是相对安全的,因为已经有了很多手段来避免数据包外泄,故不需要强认证。而服务外部是对公网开放的,或至少部分是对公网开放的,数据在公网传输被认为是相对不安全的,所以要强认证。认证强弱的差别导致了RPC分成两派:针对服务内的高效的狭义RPC,和针对服务外的相对低效的RPC(Rest API)。 早在EJB的时代,有个叫RMI的东西,流程和RPC惊人的一致,只不过RMI还需要调用方维护大量底层细节,感觉RPC是从RMI发展来的,是好用版RMI。

    作者回复: 外部用restful,主要是http协议标准,浏览器支持简单。而不是安全。都可以采用ssl加密

    2020-02-23
    13
  • Leon
    老师你好,最近在从零开始手写个RPC框架,深有感触。 实现了多种序列化机制,集成了protobuff、protostuff、json和hessian等。 目前在编码服务发现,基于zk,思路是有,不是太清晰,编码总是断断续续。 希望多点实战性的指导

    作者回复: 你好,leon。互相交流。都是我们实战的经验

    2020-02-18
    3
    9
  • eason2017
    调用过程中超时了怎么处理业务? 重试机制,降级处理。 什么场景下最适合使用 RPC? 网络安全稳定的环境。 什么时候才需要考虑开启压缩? 压缩后,数据量有明显的降低,压缩会使用CPU等资源,还是要看性价比。

    作者回复: 👍

    2020-02-18
    3
    7
收起评论
显示
设置
留言
73
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部