Golang在七牛全链路追踪中的实践

Kira

2019/04/20 发布于 技术 分类

Go  趣头条 

文字内容
1. Go在七⽜牛全链路路追踪中的实践 刘凯 七⽜牛云⼤大数据团队(Pandora)架构师
2. ⾃自我介绍 INTRODUCTION • 刘凯,七⽜牛,⼤大数据Pandora团队成员 • 2015年年,加⼊入⽹网易易杭州研究院存储团队 ‣ ⼯工作⽅方向集中在对象存储,CDN,使⽤用GO开发的项⽬目 ๏ 对象存储多机房⽅方案 ๏ CDN移动端⽂文件上传下载加速 • 2018年年,加⼊入Pandora团队 ‣ ⼯工作⽅方向集中在存储引擎,APM和账号体系,使⽤用GO开发的项⽬目 ๏ 账号体系 ๏ 全链路路追踪
3. ⽬目 录 CONTENTS ➢ 我眼中的GO ➢ Go在组内的应⽤用介绍 ➢ 全链路路追踪介绍 ➢ 七⽜牛全链路路追踪实现以及可视化展示 ➢ 七⽜牛全链路路追踪的GO最佳实践 ➢ 未来规划 ➢ 总结
4. 我眼中的GO 结缘于15年年初,待过的两个团队对GO都推崇备⾄至,是组内主⼒力力的开发语⾔言。对于七⽜牛更更是全员⽤用 GO。 ➢ 并发:go关键字 ➢ 代码风格统⼀:go fmt ➢ 协程:超乎想象的轻量级 ➢ 协程间通信:channel ➢ 交叉编译,速度极快 ➢ 开源社区活跃
5. GO在组内的应⽤用 在Pandora我们⽤用GO做了了什什么 ➢ 强⼤的采集器器模块 采集器模块分为两部分:采集器Logkit和服务端SmartElf,两者均全部采⽤GO语⾔实现。采集器对⽂件⼤⼩较为敏感,经 过JAVA相⽐比,GO⼤大⼤大减少了了可执⾏行行⽂文件的⼤大⼩小。 ➢ ⼯作流 ⼯作流是⼀个数据接收、计算、导出的框架,把业务流程映射到页⾯上,将数据业务可视化。 重⽤七⽜内部⼤量GO开发框架,业务⾮常灵活,开发效率⾼,协程轻量量级 ➢ 基于底层存储引擎的各个应⽤用产品 ⽬前底层存储使⽤了开源的ES,ES采⽤JAVA实现。各个产品使⽤GO实现:安全,服务器监控,数据透视表,全链 路。。。
6. Why Tracing ⽇日常痛点 ⽇日志格式混乱 缺少服务拓拓扑 链路路性能分析 异常问题定位 …… 越来越多的项⽬目开发者想要简单有条理理的把控整个项⽬目运⾏行行情况
7. 全链路路追踪介绍—起源 2010年年⾕谷歌发表了了关于内部⼤大量量使⽤用的Dapper系统的论⽂文:论⽂文地址 ⽬目标: 理理解系统⾏行行为,分析性能问题 要求: 低损耗,应⽤用透明,⼤大范围部署 概念:Span, Annotation, Trace 应⽤用:推断服务依赖关系 性能优化和监控 异常场景分析 应⽤用级别的流量量划分
8. 全链路路追踪介绍—Opentracing Opentracing:开放式分布式追踪规范,2016年年底加⼊入CNCF, 提供平台⽆无关、⼚厂商⽆无关的API,使得开发⼈人员能够⽅方便便的添加 (或更更换)追踪系统。 关键字:Service Operation References 示意图
9. 全链路路追踪介绍—业界产品 侵⼊入式: • ZipKin • Jaeger • Cat ⾮非侵⼊入式: • Pinpoint • SkyWalking
10. 七⽜全链路路追踪—Tracing介绍 ⽬前全链路追踪已经正式对外提供服务。七⽜对外主要提供以下⼏⼤功能: ➢ ⽀支持Opentracing协议 ➢ ⽀支持侵⼊入式和⾮非侵⼊入式采集 ➢ ⽀支持可配的采样 ➢ 可视化的链路路分析 ➢ 服务拓拓扑展示 了解更多:https://developer.qiniu.com/insight/manual/5054/all-link-track-profile
11. 七⽜全链路路追踪—架构 全链路路架构图
12. 七⽜牛全链路路追踪—传输优化 Agent端如何在低损耗下⾼高效传输数据 ✦UDP/TCP ✦Thrift——Protobuf ✦ 压缩 ✦ 采样率 依托于GO便便利利的⽹网络服务开发和特殊的多平台⽀支持⼤大⼤大提⾼高开发效率 tips:依赖⽂文件名的跨平台编译 process_linux_386.go process_darwin.go process_windows.go
13. 七⽜牛全链路路追踪—服务拓拓扑 如何产⽣生服务拓拓扑图 产品 ⼿手段 延迟 Jaeger/Zipkin Spark 1天 Pinpoint Hbase ⽆无延迟 Aliyun ⽹网关 服务间⽆无延迟 ⽅方案⼀一: 借鉴Jaeger Golang⼩小程序Cron调度 Type to enter a caption.
14. 七⽜牛全链路路追踪—服务拓拓扑 ⽅方案⼆二: 引⼊入实时计算框架——Druid Druid通过数据预聚合的⽅方式,提供海海量量数据的快速查询,很契合服务拓拓扑的实现 Workflow ——> Kafka ——> Druid ——> Query
15. 七⽜牛全链路路追踪—接⼊入成本 如何降低接⼊入成本 ✦ 优先⽆无侵⼊入⽅方式 ✦ 对于侵⼊入式,封装Opentracing SDK,或 者提供通⽤用框架 GOSDK:https://github.com/BourneD/pandora-go-sdk.git
16. 七⽜牛全链路路追踪-可视化展示 快捷查询
17. 七⽜牛全链路路追踪-可视化展示 链路路分析
18. 七⽜牛全链路路追踪-可视化展示 服务拓拓扑 Type to enter a caption.
19. 七⽜牛全链路路追踪—GO最佳实践 Jaeger监控Go的时序图
20. 七⽜牛全链路路追踪—GO最佳实践 DEMO ➡ HTTP请求示例例
21. 未来规划 现有架构⽬前已经能够很好的⽀撑全链路的业务需求,但随着后续业务量的快速增加,架构肯定也 会不断变化。 ➢ 和七⽜牛APM业务打通,⽀支持端到端监控 ➢ 优化存储结构,⽬目前⽇日均超过1亿条数据,搜索速度较慢 ➢ 优化采样⽅方式,异常监控不不计⼊入采样
22. 总结 ๏ 随着opentracing进⼊CNCF,全链路在国内的普及程度越来越⼴ ๏ ⽽对于善于接受新事物的GO来说,使⽤全链路肯定是⾸当其冲 ๏ GO带来了开发效率的⼤⼤提升,⽽全链路带来了运维效率的⼤⼤提升