RPC 实战与核心原理
何小锋
京东云混合云首席架构师
41883 人已学习
新⼈⾸单¥59
课程目录
已完结/共 29 讲
RPC 实战与核心原理
登录|注册
留言
22
收藏
沉浸
阅读
分享
手机端
回顶部
付费课程,可试看

视频资源获取失败

开篇词 | 别老想着怎么用好RPC框架,你得多花时间琢磨原理
01 | 核心原理:能否画张图解释下RPC的通信流程?
02 | 协议:怎么设计可扩展且向后兼容的协议?
03 | 序列化:对象怎么在网络中传输?
04 | 网络通信:RPC框架在网络通信上更倾向于哪种网络IO模型?
05 | 动态代理:面向接口编程,屏蔽RPC处理流程
06 | RPC实战:剖析gRPC源码,动手实现一个完整的RPC
07 | 架构设计:设计一个灵活的RPC框架
08 | 服务发现:到底是要CP还是AP?
09 | 健康检测:这个节点都挂了,为啥还要疯狂发请求?
10 | 路由策略:怎么让请求按照设定的规则发到不同的节点上?
11 | 负载均衡:节点负载差距这么大,为什么收到的流量还一样?
12 | 异常重试:在约定时间内安全可靠地重试
13 | 优雅关闭:如何避免服务停机带来的业务损失?
14 | 优雅启动:如何避免流量打到没有启动完成的节点?
15 | 熔断限流:业务如何实现自我保护?
16 | 业务分组:如何隔离流量?
答疑课堂 | 基础篇与进阶篇思考题答案合集
17 | 异步RPC:压榨单机吞吐量
18 | 安全体系:如何建立可靠的安全体系?
19 | 分布式环境下如何快速定位问题?
20 | 详解时钟轮在RPC中的应用
21 | 流量回放:保障业务技术升级的神器
22 | 动态分组:超高效实现秒级扩缩容
23 | 如何在没有接口的情况下进行RPC调用?
24 | 如何在线上环境里兼容多种RPC协议?
结束语 | 学会从优秀项目的源代码中挖掘知识
加餐 | 谈谈我所经历过的RPC
加餐 | RPC框架代码实例详解
本节摘要

你好,我是何小锋。上一讲我们学习了在分布式环境下如何快速定位问题,简单回顾下重点。在分布式环境下,RPC 框架自身以及服务提供方的业务逻辑实现,都应该对异常进行合理地封装,让使用方可以根据异常快速地定位问题;而在依赖关系复杂且涉及多个部门合作的分布式系统中,我们也可以借助分布式链路跟踪系统,快速定位问题。

现在,切换到咱们今天的主题,一起看看时钟轮在 RPC 中的应用。

定时任务带来了什么问题?

在讲解时钟轮之前,我们先来聊聊定时任务。相信你在开发的过程中,很多场景都会使用到定时任务,在 RPC 框架中也有很多地方会使用到它。就以调用端请求超时的处理逻辑为例,下面我们看一下 RPC 框架是如果处理超时请求的。

回顾下[第 17 讲],我讲解 Future 的时候说过:无论是同步调用还是异步调用,调用端内部实行的都是异步,而调用端在向服务端发送消息之前会创建一个 Future,并存储这个消息标识与这个 Future 的映射,当服务端收到消息并且处理完毕后向调用端发送响应消息,调用端在接收到消息后会根据消息的唯一标识找到这个 Future,并将结果注入给这个 Future。

那在这个过程中,如果服务端没有及时响应消息给调用端呢?调用端该如何处理超时的请求?

登录 后留言

全部留言(22)

  • 最新
  • 精选
雨霖铃声声慢
时钟轮可以实现延时消息的功能,比如让一个任务几分钟之后发送一条消息出去。在比如可以实现订单过期功能,用户下单10分钟没付款,就取消订单,可以通过时钟轮实现。

作者回复: 是的,真棒

2020-04-06
8
44
忆水寒
在java里面和Netty框架里面有这个类,TimeWheel时钟轮模型。

作者回复: 是的,netty里面有实现

2020-04-06
30
qinsi
时钟轮存取任务的时间复杂度是O(1),相比之下优先队列的时间复杂度是O(logN)

作者回复: 👍

2020-04-06
5
18
高源
时钟轮这个我头一次听到,老师如果并发线程比较多,单位时间是不是划分很细啊,但是我有个疑问例如我同时有5个线程几乎之间间隔3到5毫秒,又有3个线程10到100毫秒的,我时钟轮也得调整具体怎么划分的,这么短时间内如何保证时钟轮准确性,老师哪有参考代码学习一下

作者回复: 一般都是统一划分,时间轮主要解决是长时间没有触发的问题,不解决实时性

2020-04-06
3
10
719
提高扫描定时任务效率还有一种方法是所有定时任务放入按照时间排序的优先队列,每次只扫描队首节点。从性能上看,哪种方法好一些?

作者回复: 应该是不同场景吧

2020-05-06
2
1
定时任务相关解决方案: 1:线程休眠,可能需要N多线程 2:定时轮询,可能会空耗许多CPU轮询 3:时间轮,和时钟原理相似,规避1/2的缺陷 只有涉及到定时任务,就可以使用时钟轮来解决,比如: 调用端超时处理、调用端和服务端的启动超时处理、定时心跳检测、延迟消息队列的延迟消息发送等。 netty框架中就有时钟轮的实现,可以研究一下。
2020-05-16
1
10
🐠
请问老师,为什么说多层时间轮中的任务会被重复扫描呢?就上面例子的任务C来说,它处于下一层的第1个槽位,那么经过1s后,它被分布到当前的时间轮中,然后经过600ms后跳动到当前时间轮的第6个槽位,此时才会触发任务C。重复扫描的意思就是说在下一层的第1个槽位被扫描过一次,然后在当前时间轮的第6个槽位又被扫描过一次吗?
2021-06-17
2
3
张申傲
调用方的异常重试也可以考虑使用时间轮。感触:软件设计的本质都是生活~
2021-02-05
2
茶没喝完
推荐参看dubbo的HashTimeWheel源码,它是单层+轮数 来实现多层时间轮。 源码不复杂,看完就可以明白时间轮的运行原理。
2024-10-14
1
漆黑的小白
第一次听到时间轮还是在kafka里,拿来做一些轻量级的延时处理还挺不错的
2022-02-07
1
收起评论