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

视频资源获取失败

开篇词 | 别老想着怎么用好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 在分布式环境下如何快速定位问题。重要性看字面也是不言而喻了,只有准确地定位问题,我们才能更好地解决问题。

分布式环境下定位问题有哪些困难?

在此之前,我想先请你想想,在开发以及生产环境运行的过程中,如果遇见问题,我们是如何定位的?

在开发过程中遇见问题其实很好排查,我们可以用 IDE 在自己本地的开发环境中运行一遍代码,进行 debug,在这个过程中是很容易找到问题的。

那换到生产环境,代码在线上运行业务,我们是不能进行 debug 的,这时我们就可以通过打印日志来查看当前的异常日志,这也是最简单有效的一种方式了。事实上,大部分问题的定位我们也是这样做的。

那么如果是在分布式的生产环境中呢?比如下面这个场景:

我们搭建了一个分布式的应用系统,在这个应用系统中,我启动了 4 个子服务,分别是服务 A、服务 B、服务 C 与服务 D,而这 4 个服务的依赖关系是 A->B->C->D,而这些服务又都部署在不同的机器上。在 RPC 调用中,如果服务端的业务逻辑出现了异常,就会把异常抛回给调用端,那么如果现在这个调用链中有一个服务出现了异常,我们该如何定位问题呢?

登录 后留言

全部留言(14)

  • 最新
  • 精选
陈国林
老师好,说下自己定位问题的一些经验和方法 1. 确认清楚问题的现象或本质 2. 如果时间允许可以复现下问题,对问题理解更直观 3. 查看日志,确认报错的异常信息(日志这步很关键,物理机时代通常做法是上机器grep,如果有多台机器这是比较麻烦的点,所以一般会有日志中心。容器时代的话屏蔽了Iaas层,日志都存在在日志中心,例如ELK,根据关键字就可以查了) 4. 查看代码确认业务逻辑 5. 根据日志和代码业务逻辑基本就可以确认报错的点了

作者回复: 一看就很有经验

2020-04-05
15
Jxin
1.tracid在碰到线程池异步时如何传递id? 2.mq消息是否也该带上tracid?

作者回复: 通过上下文或者agent

2020-04-03
6
7
雨霖铃声声慢
分布式链路系统中,最常用的调试问题方法还是文中提到的方法,主要依赖分布式调用监控系统,比如CAT,从里面可以看到是哪个链路出问题了。

作者回复: 监控用时方恨少

2020-04-05
4
枫叶蓝
opentracing ,就是需要接管业务流量才行

作者回复: 👍

2020-04-30
2
2
Darren
老师应该介绍下skywalking、Zipkin等开源分布式链路跟踪的优缺点和使用问题等,毕竟能自研分布式链路跟踪的公司不多
2020-04-03
1
35
分布式环境下如何快速定位问题: 1:依赖公司运维基础设施的建设,比如:JD各种工具比较健全,查日志、方法监控、容器监控、网络监控等等,基础组件的问题各个运维团队支持也给力,系统问题比较好查,自身业务问题依赖自身对自己业务逻辑的理解程度,反例——如果查个日志,需要登录中控机,再登录目标机,还需输入验证码+密码,然后找日志路径,然后使用命令查,这种方式原始低效 2:全链路追踪系统,目前还没看到做的比较好的,理想很丰满现实很骨感,如果做的好,对许多问题确实能够做到快速定位,尤其是性能问题,一下子就知道谁慢。如果各个方法都能统计,那就更棒了 3:我目前的经验,对于日志和各种监控工具依赖比较重,如果这些OK,又是业务问题,熟悉业务就能很快定位。最不好定位的是系统异常尤其是和网络通信相关且不好复现的,最常见的就是各种连接超时、socket超时、负载偶尔抖动,很令人头疼。网络认为是网络抖动了一下,就不了了之啦!具体原因则石沉大海 4:RPC封装相信的日志确实非常重要,一下子就清楚为什么了,反例——如果这些没有封装好,就只有一个连接超时,也不知道谁调谁?那个服务和方法?超时设置多少实际耗费多少,那这种问题就且查了 5:关键业务日志的打印也非常重要,多了耗性能费空间,少了排查问题不利,幸好Jd是有UCC的可以控制日志打印,不过具体打印的OK与否还要看个人经验+代码评审
2020-05-16
6
小叶
通过日志排错的话,产生的日志量是很大的,想问下在高并发下日志会不会有乱序的情况,rpc怎么解决这个问题
2021-06-16
1
亚林
还要养基础系统——调用链监控系统。这RPC,也真不是一般中小企业,养得起的
2026-01-20
hillwater
全链路追踪比较麻烦的是各种中间价的支持,例如db,缓存,mq
2022-10-13
远天
老师好,实际使用skywalking链路追踪遇到一个问题,在一个trace里面 A服务多次调用B,每次调用在B服务打印的traceId都不同,这个是什么原因你们?
2022-06-17
收起评论