文档章节

分布式链路跟踪系统概设

土豆_BIG
 土豆_BIG
发布于 2017/09/12 09:47
字数 538
阅读 58
收藏 3

架构示意图

架构组件选型

logstash->kafka->consumer->hbase

  • 通过AGENT生成调用链trace日志。 
  • 通过logstash采集日志到kafka。 
  • kafka负责提供数据给下游消费。 
  • 消费端解析trace信息,traceID作为rowkey,将信息插入hbase。 

实现思路

  • Trace头部定义
    • Trace-Id(每次请求的唯一标识,在请求的链路中传递)
    • Rpc-Id(调用链内部的唯一ID,还原调用顺序和调用间的嵌套关系,需要考虑的调用关系包括同步、并发、异步、一对多。)
    • Trace-Status(链路请求状态,整个链路传递,解决没被采样的异常跟踪丢失)
    • Trace-Sampled(调用链采样,因为QPS越高,需要生成的调用日志也就越高。因此,为了降低整体的输出数据量。默认全采集)
  • TraceId组成
    • 毫秒时间(时间戳,13)
    • 顺序数(4)
    • IPv4(8)
    • 进程ID(4)
  • RpcId组成
    • 默认顶级为0
    • 所有RpcId,包含所有父级RpcId(0.1.1他的父级为0.1,0.1的父级为0)
  • 系统整合
    • 针对Http
      • 利用Servlet的FIlter
      • 接收请求时,从header中获取Trace-Id、Rpc-Id、Trace-Sampled,没有则创建Trace对象,并放入ThreadLocal中。
      • 响应时,在header中设置Trace-Status,用来标识本次链路状态,解决没被采样的异常跟踪丢失
    • 针对Dubbo
      • 利用Dubbo的Filter机制
      • 客户端发起请求时,创建新的Trace,将Trace-Id、Rpc-Id、Trace-Sampled放入invocation的attachments中,执行调用,响应后打印日志
      • 服务端接收请求时,从invocation的attachments中获取Trace-Id、Rpc-Id、Trace-Sampled,执行调用,响应后打印日志
  • 数据存储HBase
    • rowkey
      • traceId+endpoint(服务端、客户端)+rpcId
    • value
      • traceType(类型:http、dubbo、redis、MQ等)
      • traceName(具体访问的url、访问的接口方法)
      • appName(应用名称)
      • localIp(本机IP)
      • remoteIp(发起远程调用服务的IP)
      • status(trace的状态)
      • size(请求大小)
      • time(耗时)
      • message(信息:默认响应状态)
    • 检索
      • 使用RowPrefixFilter根据rowkey前缀匹配所有记录

© 著作权归作者所有

共有 人打赏支持
土豆_BIG
粉丝 0
博文 5
码字总数 7234
作品 0
朝阳
分布式链路追踪中间件 - SOFATracer

SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的。这些日志可用于故障的快速发现,服务治理等...

匿名
05/31
0
0
各大厂分布式链路跟踪系统架构对比

随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布...

james8888
04/19
0
0
分布式调用跟踪系统架构设计与实践

0、前言 随着美团点评的业务发展,公司的分布式系统变得越来越复杂,我们亟需一个工具能够梳理内部服务之间的关系,感知上下游服务的形态。比如一次请求的流量从哪个服务而来、最终落到了哪个...

大数据之路
2015/01/03
0
0
几种分布式调用链监控组件的实践与比较(一)实践

引言:最近在调研与选型分布式调用链监控组件。选了主要的三种APM组件进行了实践与比较。本来打算一篇文章写完的,篇幅太长,打算分两篇。本文主要讲下链路traceing的基本概念和几种APM组件的...

aoho
2017/11/10
0
0
Spring Cloud 接入 EDAS 之全链路跟踪

在上一篇 Spring Cloud 接入 EDAS 之服务发现篇 中已经讲解了如何接入 EDAS 的服务注册中心。在这一篇中,我们将聊聊全链路跟踪。 全链路跟踪的必要性 微服务框架带来的好处已经无需多言,模...

flystar32
2017/11/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

理解数据库的4种隔离级别

本文转自:http://m.blog.csdn.net/article/details?id=51924963 数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,...

初雪之音
34分钟前
1
0
主流的消息队列MQ比较,详解MQ的4类应用场景

目前主流的MQ 1.ZeroMQ 号称最快的消息队列系统,尤其针对大吞吐量的需求场景。 扩展性好,开发比较灵活,采用C语言实现,实际上只是一个socket库的重新封装,如果做为消息队列使用,需要开发...

游人未归
今天
4
0
React 服务器渲染原理解析与实践

网盘下载地址 React 服务器渲染原理解析与实践 本套课程,讲解了React中SSR技术的整个搭建思路及流程,完整的从原理上讲清楚了SSR的概念,重点在于讲解编写SSR框架遇到的各种知识点,以及细节...

qq__2304636824
今天
4
0
Jenkins使用

clean install -Dmaven.test.skip=true 系统设置 全局工具配置 其他的配置类似 构建项目配置

1713716445
今天
2
0
多线程

1. 多线程概念。并发和并行的概念。 多线程指的是一段时间内cpu同时执行多个线程。一个程序至少运行>=1个进程,进程就是运行中的程序,而一个进程至少运行>=1个线程,线程是操作系统能调度的...

鱼想吃肉
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部