Upload
others
View
13
Download
0
Embed Size (px)
Citation preview
驭风-搜狗分布式追踪系统 �
设计与实践 �
董泽光,搜狗架构师 �
专注于互联网基础架构设计、分布式存
储与计算;对大数据体系,实时计算,
微服务体系,消息系统有深入研究和实
践经验 �
关于我 �
�
u � � 分布式追踪系统概览 �
u � � 驭风系统设计与实践 �
u � � 总结与展望 �
CONTENTS �
contents �
分布式追踪系统概览 � 1 � 1
搜狗商业平台 �
100+应用系统 �
10亿+广告物料 �
服务运行在上千台服务器 �
横跨多个数据中心 �
服务A �
服务B � 服务C � 服务D �
服务E �
服务F �
分布式技术特点 �
分布式服务 �
分布式存储 �
分布式消息 �
分布式计算 �
服务关系复杂 �
数据规模大 �
服务调用链路长 �
无法快速定位性能瓶颈和异常 �
寻求方向 �
l Google � Dapper �
复杂的异构系统 �
为什么自建驭风系统? �
海量数据存储和计算 �
服务化体系 �
监控报警体系 �
服务体系内有众多异构系统,java、c++、php等 �
每天亿级的数据量采集、计算、存储和查询 �
公司内自建服务化中间件、数据库中间件体系的无侵入埋点和数据的透明传输、快速接入 �
保持和公司内自建的监控报警体系无缝对接 �
驭风系统设计与实践 � 2 � 2
驭风系统简介 �
搜狗自研的分布式系统下的性能监控和问题追踪平台 �
提供分布式应用服务调用全链路跟踪定位 �
提供快速有效的数据展示和统计分析、趋势预测功能 �
快速的告警服务提升解决问题的效率 �
客户端agent方式的日志采集和大数据平台的日志处理、存储 �
驭风系统应用现状 �
驭风-搜狗分布式追踪系统 �
覆盖多个产品线 �
每天调用链路数据量为亿级 �
支持C++、JAVA等多个异构系统 �
覆盖内部大部分基础中间件 �
决策分析(容量评估、阈值告警等) �
系统设计目标 �
• 线上服务性能影响足够小 � • 线上服务是否监控可控 � 低消耗 �
• 尽可能少侵入或者不侵入业务系统 � • 保持对使用方的透明性 � • 减少开发人员的负担和接入门槛 �
低侵入性 �
• 从数据的收集和产生,到数据计算/处理,再到展现或反馈,都要求尽可能的快速 � 时效性 �
• 支持海量数据存储 � • 支持在海量数据中快速的检索数据 � 海量数据 �
系统处理流程 �
数据源 � 数据采集 � 数据处理 � 数据存储 � 决策分析 �
组件埋点 �
本地日志 �
异步传输 �
权限校验 � 原始数据 �
统计数据 �
配置信息 �
数据过滤 �
数据适配 �
统计分析 �
阈值报警 �
趋势预测 �
系统架构 �
业务应用系统集群各种埋点中间件
本地日志文件
日志收集组件agent
流式计算处理平台
HBase应用API服务Web服务
外部系统
日志
Zookeeper采样率和开关控制
SQL查询引擎
消息队列
系统设计理念 �
调用链 �
• Trace树 � • Trace树由多个Span节点构成 �
• TraceID被透传到上下游所有节点,将孤立的系统日志串联在一起 �
埋点时间 �
• 客户端发送 � (Client � Send) �
• 服务端接收 � (Server � Receive) �
• 服务端响应 � (Server � Send) �
• 客户端接收 � (Client � Receive) �
埋点类型 �
• 单向型 � 客户端创建调用链生成日志(服务端未埋点) �
• 双向型 � 客户端+服务端,传输上下文,生成日志 �
系统设计理念-Trace树 �
应用A
应用B 应用C 应用D
应用F
分布式缓存DB 文件
应用G 应用H
文件
客户端请求
0
0.1 0.3
0.1.1 0.1.2 0.3.1
0.1.1.1
0.2.1 0.2.2
0.3.1.1 0.1.2.1 0.2.2.1 0.2.2.2
0.2
系统设计理念-Span �
应用A
SR
SS
CSaCRa
...
应用B
SRb
SSb
CSCR
...
应用C
SR
SS
CSCR
... ...
Span1
CSa CRa SRb SSb
Exception Parameter
SpanId: 0.1
Span2
CS SR SS CR
Exception Parameter
SpanId: 0.1.1
Invoke
Span0
SR SS
Exception
Parameter
TraceId: 19c2d24bSpanId: 0
TraceId: 19c2d24b TraceId: 19c2d24b
CS(Client Send 客户端发送)CR(Client Receive 客户端接收)SR(Server Receive 服务端接收)SS(Server Send 服务端发送)
驭风系统各个阶段 �
数据采集 �
数据处理 �
数据存储 �
数据展示与决策分析 �
数据采集 �
• 低侵入(中间件埋点、标准格式、C++/Java多语言版本) � • 低消耗(本地日志、异步收集) � • 高可控(开关控制、采样率) �
埋点 �
• 自研的agent � • 支持断点续传 � • 输出到消息队列 � • 支持日志文件的滚动 � • 异步传输 �
日志收集agent �
数据采集–埋点 �
• 调用类型、对端 � IP、服务名称、耗时、层级关系、异常信息、业务自定义数据 �
埋点哪些数据 �
• 同步、异步 �
调用方式 �
• 本地共享,通过线程数据共享方式 �
• 传输通过Http � Header或RPC参数透传数据到下游 �
埋点信息传输 �
数据采集–日志收集 �
监测的日志
监测文件变化线程
获取日志内容 消息队列
checkpoint(处理后的日志位置)状态管理
Checkpoint文件
l 自研的组件 �
l 支持重传和断点续传 �
l 支持日志文件的滚动 �
l 日志异步写入到消息队列 �
l 类似的组件Flume-NG �
数据处理 �
l 流式数据计算平台 �
简单的编程模型、低延迟、
高性能、分布式、水平扩展、
容错性、可靠的消息处理 �
l 数据过滤 �
� � � � � � 数据格式校验、权限校验 �
l 数据处理 �
数据适配转换、SQL生成 �
流式数据处理平台
读取消息队列
日志过滤器(数据格式、权限校验)
数据适配转换
存储SQL生成(日志数据、二级索引)
HBase
消息队列
SQL引擎
数据存储 �
海量数据 �
复杂条件查询、低延迟 �
HBase、SQL引擎 �
l 数据存储的特点 � ü 海量数据,写多读少 � ü 低延迟查询 �
ü 复杂条件查询 �
l HBase � ü 高可靠性、高性能、面向列、
可伸缩的分布式存储系统 �
l SQL引擎 � - � Phoenix � ü 复杂查询条件 � ü 支持SQL方式查询 �
ü 高速查询、低延迟 �
� � � � � �
如何设计存储 �
TraceID � SpanID � 服务名 � IP � CS � SR � SS � CR � KV �
UUID � 层次编号 � 0.1 � 类名.方法名 � IP地址 � 时间 � 时间 � �
时间 � 时间 � 自定义 �
l HBase设计 � ü HBase � Rowkey设计,满足数据均匀分布,无热点存储 � ü Rowkey由TraceID+SpanID拼接而成(TraceID是UUID字符串) �
l Phoenix表设计 � ü 增加索引(时间、服务名、应用名等) �
ü 每个Span保持一条记录 �
l 不同机器日志的合并 � ü 一个Span跨越不同的主机日志,通过HBase存储合并到一条记录 � ü SR、SS和CS、CR字段由不同的机器日志填充 �
�
决策分析 �
系统调用链路拓扑分析 �
系统响应时间和超阈值分析 �
服务依赖和关键路径分析 �
系统异常、QPS、趋势分析 �
应用服务 (统计任务) SQL引擎 � HBase �
MySQL �
Dashboard �
l 统计类别 �
l 统计任务 �
� � � � 界面-调用链路 � �
� � � � � � � � � �
� � � � �
� � � � 界面-调用链路 � �
� � � � � � � � � �
� � � � �
� � � � 界面 � – � 调用次数和QPS对比 � �
� � � � � � � � � �
� � � � �
� � � � 界面 � – � 系统平均响应时间 � �
� � � � � � � � � �
� � � � �
� � � � 界面 � – � 周报比对 � �
� � � � � � � � � �
� � � � �
驭风系统价值 �
系统性能“可视化” �
调用链路“拓扑”关
系 �
服务 � 关键路径 �
快速故障定位 �
趋势预测与 � 扩容 � 的基础 �
总结与展望 � 3 � 3
总结 �
l 客户端 � ü 中间件埋点 � ü 异步数据传输 � ü 可控性 �
l 服务端 � ü 流式计算 � ü 海量存储 �
ü 高速查询 �
l 决策分析 � ü 分析报表 � ü 趋势预测 �
l 行业解决方案 � ü 淘宝 � – � Egale � Eye � ü Twitter � - � Zipkin � ü 点评 � – � CAT �
ü 新浪微博 � – � Watchman � ü 唯品会 � - � Mercury �
未来展望 �
� � 弹性计算 � & 动态扩缩容 � 提高资源利用率 �
预测优化系统瓶颈 &故障报警自动处理
智能化
Thanks �