1、微服务带来的问题

微服务框架带来的好处十分多,比如说它提高了开发的效率,它具备更好的扩展性。可是微服务其实是一把双刃剑,微服务同时也带来了一些问题,比如:

  • 故障定位难
  • 容量预估难
  • 资源浪费多
  • 链路梳理难

而这些问题也就是我们的鹰眼系统需要解决的问题。

2、鹰眼是什么

鹰眼是一个以链路追踪技术为核心的监控系统,它主要的手段是通过收集、存储、分析分布式系统中的调用事件数据,协助开发运营人员进行故障诊断、容量预估、性能瓶颈定位以及调用链路梳理。

EagleEye(鹰眼):是分布式调用跟踪系统,就是对一次前端请求产生的分布式调用都汇总起来作分析。
TraceId: 是标明一次前端请求的全局唯一的调用链ID。在前端请求到达到服务器时,应用容器在执行实际业务处理之前,会先根据EagleEye的埋点逻辑,生成TraceId。

3、实现原理

3.1 TranceID


        在一套中间件里做统一埋点,在分布式调用框架、分布式消息系统、缓存系统、统一接入层、Web 框架层的发送与接收请求的地方做统一埋点,埋点的数据能够被一套中间件在系统之间进行无缝透传。

当用户的请求进来的时候,鹰眼在第一个接收到这个请求的服务器的中间件会生成唯一的 TraceID,这个 TraceID 会随着每一次分布式调用透传到下游的系统当中,所有透传的事件会存储在 RPC log 文件当中。随后鹰眼会有一个中心化的处理集群把所有机器上的日志增量地收集到集群当中进行处理,处理的逻辑比较简单,就是做了简单清洗后再倒排索引。只要系统中报错,然后把 TraceID 作为异常日志当中的关键字打出来,就可以看到这次调用在系统里面经历了哪些事情,我们通过 TraceID 其实可以很容易地看到这次调用是卡在 B 到 C 的数据库调用,它超时了,通过这样的方式我们可以很容易追溯到这次分布式调用链路中问题到底出在哪里。其实通过 TraceId 我们只能够得到上面这张按时间排列的调用事件序列,我们希望得到的是有嵌套关系的调用堆栈。

3.2 TraceID + RPCID

要想还原调用堆栈,我们还需要另外一个东西叫做 RPCId(在 OpenTracing 中有类似的概念,叫做 SpanID),RPCId 是一个多维序列。它经过第一次链路的时候初始值是 0,它每进行一次深入调用的时候就变成 0.1,然后再升就是 0.1.1,它每进行一次同深度的调用,就是说 A 调完 B 以后又调了 D 就会变成 0.2,RPCId 也随着本次调用被打印至同一份 RPC Log 中,连同调用事件本身和 TraceId 一起被采集到中心处理集群中一起处理。

收集完了以后,鹰眼对所有调用事件按照 RPCId 进行一个深度遍历,就可以获得这样的一个调用堆栈,上图中的调用堆栈实际上就是真实的淘宝交易系统里面进行下单的交易调用堆栈,可以看到这次调用经历了很多系统。但我们在鹰眼的视角上面来看,就好像是在本地发生的一样,可以很容易地去看到如果一次调用出现了问题,那问题的现象是出现在哪里,最后问题的根因又是发生在了哪里。除了调用异常的返回码之外,在右边其实还可以看到每次调用的耗时是多少,我们也可以看到每一次调用是慢在哪里。这张图中解释了鹰眼是如何解决微服务四大问题中的故障定位难的问题,它可以通过倒排索引,让用户反查出每一次调用的全貌是怎样的。

3.3 根据指定Tag统计调用次数

如果我们对万亿级别的调用链数据进行聚合,是否能够获得更有价值的信息?我们可以看一下,每一次调用除了它唯一标识 TraceID 和 RPCID 之外,还包含了一些标签信息 (Tag),什么是标签呢?就是具备共性的, 大家都会有的这么一些信息。比如说这次调用它分别经历了哪些系统,这些系统它每次调用的 IP 是什么,经过哪个机房,服务名是什么?有一些标签是可以通过链路透传下去的,比如入口 url,它透传下去以后我就知道这次请求在下去之后发生的每一次事件都是由通过这个入口去发起的,那么如果把这些标签进行聚合计算,我们可以得到调用链统计的数据,例如按某机房标签统计调用链,我们就可以得到每个机房的调用次数的趋势图。

这样做有什么好处呢?实际上在容量预估当中这样做的好处是非常明显的。我们来看一个例子,假如我们有一个交易下单入口标签,我们对这样的标签做了聚合以后,不光能看到单次调用它的情况是如何,还能看到将这些调用链数据聚合以后,它的总调用次数是多少,平均耗时是多少,我可以发现系统当中热点瓶颈在哪里,同时我们可以发现一些非法流量,也就是说我之前不知道的事。

3.4 小结

鹰眼分为两部分的功能:第一个是通过 TraceId 和 RPCId 对分布式调用链的堆栈进行还原,从而实现故障定位的功能;第二个是通过调用链数据分析,将这些入口、链路特征、应用、机房等的tag 进行聚合统计,可以做到容量预估、性能瓶颈的定位以及调用链的梳理。

参考:阿里巴巴鹰眼技术解密 - 多看多学多记多实践 - 博客园

阿里巴巴鹰眼系统简介相关推荐

  1. 阿里巴巴鹰眼系统了解

    业务背景 上图是 2012 年淘宝核心业务应用关系的拓扑图,还不包含了其他的非核心业务应用,所谓的核心业务就是和交易相关的,和钱相关的业务.这张图大家可能看不清楚,看不清楚才是正常的,因为当时的阿里应 ...

  2. 全链路稳定性背后的数字化支撑:阿里巴巴鹰眼技术解密

    作者|周小帆 编辑|小智 最新一代的阿里全链路监控系统鹰眼 3.0,同时将基础设施层.分布式应用层.业务逻辑层与客户端层进行了全链路跟踪:技术层面,鹰眼 3.0 日均处理万亿级别的分布式调用链数据,针 ...

  3. 阿里巴巴鹰眼技术解密

    作者|周小帆 编辑|小智 最新一代的阿里全链路监控系统鹰眼 3.0,同时将基础设施层.分布式应用层.业务逻辑层与客户端层进行了全链路跟踪:技术层面,鹰眼 3.0 日均处理万亿级别的分布式调用链数据,针 ...

  4. 【译】Android系统简介—— Activity

    续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...

  5. PowerPC中断系统简介(一)

    1. PowerPC中断系统简介 PowerPC处理器的中断系统由两部分组成,一是内核的中断及异常的处理:二是中断控制器.以P2020处理器为例,包括E500内核中断及异常处理系统和OpenPIC中断 ...

  6. QuickWAP 2005企业WAP网站系统简介

    QuickWAP 2005企业WAP网站系统简介 中国被爱可以在线于2006年4月1日发布了QuickWAP 2005,软件中包含了一套"企业WAP网站系统",该系统完全基于Qui ...

  7. 石油化工静设备计算机辅助设计桌面系统,PV Desktop 石油化工静设备计算机辅助设计桌面系统简介...

    文件介绍: 该文件为 rar 格式,下载需要0积分 PV Desktop 石油化工静设备计算机辅助设计桌面系统简介石油化工静设备计算机辅助设计桌面系统简介 (PV Desktop 9.3.1.0 版) ...

  8. 监控系统简介(二):使用 App Metrics 在 ASP.NET Web API 中记录指标

    回顾 在<监控系统简介:使用 Prometheus 与 Grafana>一文中,我们了解了什么是监控系统,Prometheus 这一监控工具及它提供的数据类型.PromQL 以及 Graf ...

  9. 智能卡门禁管理系统_汉中停车场智能门禁系统简介,保安服务收费,行业知识

    首页 > 新闻列表 > 正文 作者:佚名 点击数: 5更新时间:2020-11-04 08:21:21 导读:名将安防为您提供汉中停车场智能门禁系统简介,保安服务收费的相关知识与详情: 接 ...

  10. lisp 揭 院长_HISLISPACSRIS EMR系统简介

    HIS ( LIS . PACS . RIS . EMR )系统简介 一.定义说明 医院信息系统 (Hospital Information System, HIS) ,利用电子计算机和通 讯设备,为 ...

最新文章

  1. 为什么要使用Retrofit封装OkHttp,而不单独使用OkHttp?
  2. java 右键获取路径,java路径
  3. 该应用程序可能在其主线程上做过多的工作
  4. word2vec模型的理解
  5. python pyyaml模块使用示例:读取yaml文件内容
  6. Ubuntu|ython3 :ImportError: cannot import name 'main'
  7. ubuntu 上NVIDIA驱动和CUDA9.0 的坑之一二
  8. PHP常见概念混淆(五)之PHP类常量、静态属性和属性的区别
  9. java 找到一行 更换单词_Java实现对一行英文进行单词提取功能示例
  10. oracle 安装包 下载、plsql 64位 安装包下载 、 plsql注册码
  11. 自架魔兽服务器物品代码,魔兽世界物品代码与GM指令大全(全部整理自网上).doc...
  12. cad画多段线时不显示轨迹_CAD画多段线的时候看不到预览效果的解决方法
  13. 窃取式调度器(Stealing Scheduler)-高并发
  14. Python math.comb() 方法
  15. 基于C语言扫雷游戏的设计与实现
  16. 几何光学学习笔记(12)- 3.9几种典型系统的理想光学系统性质 3.10 矩阵运算在几何光学中的应用
  17. KBEngine warring项目源码阅读(三) 实体文件与Account处理
  18. 【日常学习】【数学】codevs3625 士兵站队问题题解
  19. 使用React Hooks 时要避免的5个错误!
  20. java的副语言_英语副语言的交际功能及特征

热门文章

  1. 神经网络算法的基本原理,神经网络算法都有哪些
  2. python运行出玫瑰花的代码_一支玫瑰 - python代码库 - 云代码
  3. E+H流量计5P3B15-BBDBAAAFADEA1S1AA1+AK
  4. oracle中一个月的最后一天,SQL和Oracle获取每周、每月、每年第一天和最后一天
  5. ug设计绘图使用技巧,UG设计入门基…
  6. ITEXT-PDF彩色字体显示-支持中文
  7. Linux ——vi / vim 新建文件vi abc.txt 、编辑文件 i、退出编辑 esc、保存文件:wq、打开文件所在目录 open . 、使用命令打开文件 open ./abc.txt。
  8. 用Vue3+element-plus+express写个简单的后台管理框架
  9. 生成BDS卫星1和卫星2的B1C信号的数据分量主码、 导频分量主码和子码
  10. 利用opencv对图像进行二值化处理