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

视频资源获取失败

开篇词 | 别老想着怎么用好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框架代码实例详解
本节摘要

你好,我是何小锋。上一讲我们介绍了优雅停机,就是为了让服务提供方在停机应用的时候,保证所有调用方都能“安全”地切走流量,不再调用自己,从而做到对业务无损。其中实现的关键点就在于,让正在停机的服务提供方应用有状态,让调用方感知到服务提供方正在停机。

接着上一讲的内容,今天我们来聊聊优雅启动。

是不是很诧异?应用启动居然也要这么“讲究”吗?这就好比我们日常生活中的热车,行驶之前让发动机空跑一会,可以让汽车的各个部件都“热”起来,减小磨损。

换到应用上来看,原理也是一样的。运行了一段时间后的应用,执行速度会比刚启动的应用更快。这是因为在 Java 里面,在运行过程中,JVM 虚拟机会把高频的代码编译成机器码,被加载过的类也会被缓存到 JVM 缓存中,再次使用的时候不会触发临时加载,这样就使得“热点”代码的执行不用每次都通过解释,从而提升执行速度。

但是这些“临时数据”,都在我们应用重启后就消失了。重启后的这些“红利”没有了之后,如果让我们刚启动的应用就承担像停机前一样的流量,这会使应用在启动之初就处于高负载状态,从而导致调用方过来的请求可能出现大面积超时,进而对线上业务产生损害行为。

在上一讲我们说过,在微服务架构里面,上线肯定是频繁发生的,那我们总不能因为上线,就让过来的请求出现大面积超时吧?所以我们得想点办法。既然问题的关键是在于“刚重启的服务提供方因为没有预跑就承担了大流量”,那我们是不是可以通过某些方法,让应用一开始只接少许流量呢?这样低功率运行一段时间后,再逐渐提升至最佳状态。

登录 后留言

全部留言(31)

  • 最新
  • 精选
Darren
如果是大批量重启,可以通过: 1、分时分批启动,就和灰度发布一样; 2、在请求低峰把,在热点的应用肯定是有使用低峰的; 3、如果必须同时大批量重启,为了保证服务的可用性,可以在低峰时期,限流,为PLUS服务,非PLUS的就提醒暂时不可用之类的友好提示。 暂时就能想到这么多,请老师指点

作者回复: 分批次启动很重要

2020-03-20
2
35
小可
1.启动时逐步增加流量 2.等服务资源完全启动完成,再去注册服务 3.最好在注册前预热jvm,比如提前加载业务缓存

作者回复: 是的,尽量延迟注册时机

2020-03-29
11
武装到牙齿
串行重启啊,明知道留下的机器顶不住流量,硬生生的给同时强制重启肯定不行啊

作者回复: 是的,速度很重要。但也可以通过在调用方那边快速加权重到新启动的实例上

2020-03-20
6
吴小智
重要的还是减少大批量重启服务的情况,应该滚动升级,逐步替代。

作者回复: 👍

2020-03-20
5
每天晒白牙
确实有这个问题,我们在上线服务提供方时,重启的并行度会控制在比较低的状态,比如只并行2台,避免发生大量请求打到未重启的服务提供方上

作者回复: 需要容量预估,才好控制并发

2020-03-20
3
dancer
感谢老师的分享,文中举的例子是基于服务先关闭再启动的情况。像K8s这种先启动一定数量新实例再关闭旧实例的发布流程,我们在关闭和启动时要注意哪些问呢

作者回复: 从单个实例角度出发,是一样的

2020-05-08
2
波波
老师,延迟暴露那个hook具体怎么实现,如何确定资源加载完毕了呢?

作者回复: hook就是一个接口,可以让使用者注入具体实现

2020-03-25
3
1
陈国林
控制发布的步长,类似K8s里面的Deployment的RollingUpgrade,滚动升级保证有足够的服务在抗流量

作者回复: 是的,控制速度很重要

2020-03-23
1
桂冠远航
优雅启动确实优雅关闭一样重要。

作者回复: 是的

2020-03-22
1
高源
老师请教个问题,socket客户端和服务端通讯,开始时间同步后,跑业务跑了一段时间后,后来发现日志客户端发出和服务端接收时间差了2秒,客户端有超时设置超了2秒就报警了,这是怎么解决啊,偶尔出现现象

作者回复: 看看是否有tcp重传

2020-03-20
1
收起评论