【阿里云ACE成长记第5期】分布式链路追踪系统架构设计的经验分享

简介:

【引言】
本期由阿里云ACE(阿里云开发者社群)&成都柠檬云网络技术有限公司资深架构师 曾昌强 为大家分享个人成长经历与个人专业技术之分布式链路追踪系统架构设计
视频:https://yq.aliyun.com/live/581

Part 1:成长经历
讲述一个不知道什么叫编程的门外汉,如何穿越几千公里来到石油名校学习计算机,当家教,炸金花最终进入目标企业的故事而后又辗转几千公里进入梦想公司阿里巴巴,后来又回归家乡的故事讲述一个如何从ERP,进入互联网,又进入区块链行业的故事。

Part 2:分布式链路追踪系统架构设计

  1. 为什么需要分布式链路追踪
  2. 链路追踪核心模型
  3. 链路追踪的作用,原理
  4. 链路追踪各个模块地设计与经验分享
  5. 链路追踪产品展示
    _

【正文】
一、对程序员的感悟与成长经历
1
首先和大家讲述一下我认为的程序员有哪些境界,搬砖,就是大家所说的苦逼程序员,没有成就感,没有技术含量,年复一日,度日如年,想想这样也挺难熬的,毕竟还有几十年。情怀,有一定技术含量,也能从工作中找到一些成就感,当然也能获得可观的收入维持程序员体面的生活。快乐,以编程为快乐,只要写代码就感觉兴奋,高兴,深深地佩服自己的计算机技能,徜徉于自己的世界中。希望你能在代码中找到自己的快乐。
2
本人在上大学之前并不了解计算机编程时干啥的,由于在07年的时候考上了一所大学,无奈对所学专业的不感兴趣,不想就此决定此生的方向,就是年复一日的搬砖,在读了半年之后,毅然退学。重新高考,由于当时石油很火,就想读一个石油名校,就选择了大庆石油学院,没想到,拿到的通知书却是计算机科学与技术,想着这半年来的悬梁刺股,苦逼生活,不敢再复读了,就毅然抱着当网管的心态,去学习计算机技术了。

        到了大学,感觉挺闲的,就去找了中介,当了家教,教书育人,补贴家用,闲暇时间又通读了古今中外经典书籍(其实就是看小说),提升自己的文化修养。后来思考,为啥别人可以给我介绍家教挣我的钱,就迅速调研了家教中介的门槛,发现很简单,就去学校周边印一些广告,然后联系大学生,做一个双向沟通,遂成立天翼家教。当然还是挣了些钱,有了钱,机缘巧合之下,就去炒股了,没想到赔了不少,发现股市比较坑人(当然在我研究了股市很长时间发现,散户根本不能炒短线,一定要能熬,熬到庄家都怕你,两年之后,收益100%)。然后在隔壁班同学的怂恿下,就去砸金花了,但是还被警察抓了一回(故事很长),第一次砸金花被抓,第一次知道玩牌会被抓(四川人)。渐渐到了大三,发现明年就要找工作了,发现自己啥都不会啊,那咋办呢?想想还是去做一下项目吧,然后就去找了个相熟的教授,进了他的实验室,然后就开始接触了一些项目,渐渐的发现还有那么点意思,尤其看到自己设计的代码,真的按照自己的想法出结果了,并且还有人在用,并且还有收入,瞬间就膨胀了,发现计算机这行不错。双选会(哈工大的)的时候,进入了自己心仪的企业用友软件,待遇在当时也算非常不错的,因为当时还没有bat这一说法,由于上一届师兄的影响,认为用友软件就是当时最牛逼的企业(当然本来也很不错)。然后就去了用友工作,用友园区好大,就是偏僻了点,还包住,想想也是挺幸福的。在那度过了两年多,认识了很多好朋友。后来去了58同城,把互联网技术深入的学习了一遍。而后去了上海的饿了么,专注于数据库中间件的开发,我们是从头开始设计架构数据库中间件的,基于mysql协议,所以对mysql协议现在是非常熟悉了,同时也对数据库相关的优化,设计,性能有一些理解。再后来,就去阿里天猫,再后来由于家里的一些事情,就回到了成都。现在在柠檬云任职架构师。

3
我的梦想就是成为诗人,游侠,是不是有点像李白,对的,李白就是我的偶像。曾梦想仗剑走天涯,看一看世界的繁华。结果为什么没有去呢,就是bug太多了。怎么才能bug少一些呢,或者解决bug更容易呢?我们就需要一个非常重要的工具,链路追踪

二、专业技术分享:分布式链路追踪系统架构设计

1. 为什么需要分布式链路追踪
我们刚才也说到,解决bug需要用到链路追踪工具,下面我们来举个“较复杂的分布式调用网络”的例子。
4
这是一个很典型的分布式网络拓扑图,真实的环境可能比这个网络复杂得多,那么
我们如何能理清应用之间的调用关系?
出错之后如何快速定位?
如何监控每个服务的健康状况,性能情况?
如何监控每个调用在各个服务的调用和耗时情况?

回答以上问题需要用到Trace的一次追踪
5
可以很清晰地看到此次调用在每个服务的耗时,以及直接可以定位出性能瓶颈在哪里
6

2. 链路追踪主要核心领域模型,Opentracing核心模型
7

3.链路追踪的作用与原理说明
8
假设游客要进入每个景点,必须使用身份证扫描,并且记录一个日志在本地,有一个收集系统会定时收集所有景点的数据,汇总到一个中央日志处理系统。那么,我们就是分析这些数据,得到小明这一次去游览了哪些景点,在每个景点停留了多久。还有每个景点在某一时刻的人流量,每个景点的最大承载量是多大等等。这就是完全类似于我们的链路追踪系统。
9
现在开源或者在使用的链路追踪系统中绝大部份是参考了Google 的这篇Dapper论文,其中最重要的就是指明了一个实现方向,以及证明了实现的可能性

4. 链路追踪各个模块地设计与经验分享
10
设计目标
11
整体框架
12
TraceId设计

我们的TraceId设计了业务字段,包含起始appid,起始ip,采样标识等。大家可以思考使用UUID是否可以?

13
Span设计
span使用多级设计,清晰明确地展示每个span在追踪链中的位置。traceId一直保持不变,在所有span中传输,最终根据traceId和spanId的层级关系,准确还原整个调用链路。
14
Client设计
当请求进入某一个span之后,会创建线程上下文,然后对应的RPC,SQL,HTTP等调用,都会作为一个节点,加入到线程上下文中,当请求结束的时候,整个span会发送到异步队列中,通过线程逐渐发送到server端。
15
Server设计

server使用netty作为网络框架,接收客户端发送的数据。分析之后,全量数据发送到hbase,需要再分析的数据发送到kafka,后续使用storm集群来分析

16
Storm设计
上面为storm大致的设计拓扑图,使用kafkaSpout读取刚才server端写入kafka的的数据。然后经过统一AnalysisBolt,分析进入,EntryStatistics,ErrorStatistic等,最后再经过HbaseBolt,将分析完的数据写入Hbase。

5. 产品展示
17
18
19

相关实践学习
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
26天前
|
设计模式 架构师 前端开发
JavaEE企业级分布式高级架构师课程
本课程主要面向1-5年及以上工作经验的Java工程师,大纲由IT界知名大牛 — 廖雪峰老师亲自打造,由来自一线大型互联网公司架构师、技术总监授课,内容涵盖深入spring5设计模式/高级web MVC开发/高级数据库设计与开发/高级响应式web开发/分布式架构设计等主流核心技术。
22 1
JavaEE企业级分布式高级架构师课程
|
2月前
|
存储 监控 安全
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
为了提供更好的日志数据服务,360 企业安全浏览器设计了统一运维管理平台,并引入 Apache Doris 替代了 Elasticsearch,实现日志检索与报表分析架构的统一,同时依赖 Doris 优异性能,聚合分析效率呈数量级提升、存储成本下降 60%....为日志数据的可视化和价值发挥提供了坚实的基础。
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
|
2月前
|
存储 数据可视化 数据管理
基于阿里云服务的数据平台架构实践
本文主要介绍基于阿里云大数据组件服务,对企业进行大数据平台建设的架构实践。
703 0
|
21天前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
23 0
|
21天前
|
NoSQL Java Redis
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件(二)
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件
14 0
|
21天前
|
存储 监控 安全
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
20 0
|
21天前
|
存储 Java 应用服务中间件
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
42 0
|
21天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
66 0
|
23天前
|
敏捷开发 监控 前端开发
Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构
Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构
55 0
|
1月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
778 0