学习分享,共勉
这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!
资料整理不易,读者朋友可以转发分享下!
Java核心知识体系笔记.pdf
中高级Java开发面试高频考点题笔记300道.pdf
架构进阶面试专题及架构学习笔记脑图
Java架构进阶学习视频分享
可以明显看到,由于无法准确定位每个请求经过的确切路径,在微服务这种架构下有以下几个痛点:
1. 排查问题难度大,周期长
2. 特定场景难复现
3.系统性能瓶颈分析较难
有没有一种办法可以准确地产生完整的调用链,并且用可视化的方式呈现出来呢?
这就需要一个分布式调用链追踪系统。
分布式调用链追踪系统:设计
想想看,如果要我们自己实现一个这样的分布式追踪系统,该怎么去设计?
首先,我们必须得区分每个调用链(起个时髦的名称叫 Trace),得给它分配一个全局唯一的 ID (称为 TraceID),并且在调用链上的每次调用都带上这个 ID,这样每个子调用都被关联起来了。
其次,我们得记录所有调用的先后次序和父子关系。
假设有以上这样的调用链,如果我们只记录了这四个调用:
A---->B
B---->C
A---->D
D---->E
D---->F
虽然我们知道它属于一个调用(TraceID 相同),还是无法画出完整的调用拓扑图。
所以必须得记录父子关系:
A---->B 是 B---->C 的父调用
A---->D 是 D---->E 的父调用
A---->D 还是 D---->F 的父调用
如何记录呢?需要给每个调用分配一个ID (称为 SpanID),并且把这个 ID 传递给子调用, 子调用根据 Parent Span ID 生成自己的 SpanID:
用表格展示是这样:
这样根据 id 间的关系就很容易据此画出调用链了(即可视化视图)
魔法师Agent
前面说得挺容易,但是在分布式的环境下,如何才能正确地生成 TraceID, ParentSpanID, SpanID 呢?
微服务是来实现业务的,肯定不能来干这个监控和跟踪的活儿,那样对微服务的侵入性就太强了。
所以必须得有一个独立的组件,在不干扰微服务的情况下,监控微服务之间的调用,把这些 ID 生成, 这个独立的组件就是 Agent。
Agent 要想施展魔法,需要安装在每个服务所在的机器上:
这个魔法师遵循的规则也非常简单,以上图中服务 A 上的 Agent 为例:
1. 当 Agent 监控到有人在调用服务 A,但是没有 ParentSpanID, 它就知道,这是一次全新的调用,应该创建新的 TraceID。
架构学习资料
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**