华为吴晟:分布式监控系统的设计与实现

华为吴晟:分布式监控系统的设计与实现

大家好,又见面了,我是全栈君。

微服务架构其实就是将单一的应用程序划分成为一组小的服务,其中每个服务都是独立的业务单元,同时又能够被独立开发、运行、测试以及部署。简单来说,它的本质其实就是拆分和独立,这也决定了微服务的部署应该是分布式的。微服务架构虽然解决了目前诸多的架构层面的问题,但在分布式部署的环境中,如何才能够有效监控每一个服务,并及时发现系统中的问题又成为了新的挑战。

\\

Google公司早已就在其生产系统中实践了分布式理念,为了解决监控问题,他们研发了Dapper分布式跟踪系统,并对外公开了相关论文。与此同时,Twitter基于Google的论文开发了Dapper系统的开源实现Zipkin。国内类似的有过曝光的系统还有淘宝鹰眼系统EagleEye以及开源软件Skywalking。InfoQ记者就分布式监控相关的问题采访了Skywalking作者吴晟,请他从整体层面为读者分享解读分布式监控相关的技术难点。另外,吴晟也将会在9月10日举行的CNUTCon全球运维技术大会上分享相关话题,欢迎关注。

\\

InfoQ:对于分布式系统的监控,你认为难点是什么?目前有哪些可行的落地思路?

\\

\

吴晟:分布式监控系统从使用的角度上,无论是手动探针还是自动探针,上手难度都不大。多数的技术型软件,从数据库、大数据处理到流式计算,在入门时都需要经历复杂的安装和参数设置过程。但是对于分布式监控系统,无论是Zipkin、Skywalking这些国内外的开源监控产品,还是各种商业APM产品,安装和入门难度都不大。

\\

但对于开发一款分布式监控系统来说,情境则完全不同,无论是探针还是后台处理都有很多的挑战。比如:

\\

  • \\t

    Java自动探针的实现,对于Java字节码、程序运行情况、GC、程序优化都要有相当细致的要求。

    \\t\\t

  • \\t

    后端分析服务,如果不了解探针,给出的分析方案难度大,效率低,机器需求量大。

    \\t\\t

  • \\t

    探针网络传输的需求,序列化效率。

    \\t\

在APM领域,程序的细节决定产品的性能。目前按照探针的实现,可行的思路主要有四种:

\\

  1. \\t

    基于日志系统,探针只负责对日志加上编号,又类似ELK的系统进行收集、处理、展示。这方面没有很成熟的产品,一般都属于公司内部封装的框架。

    \\t\\t

  2. \\t

    自动探针,适用语言:Java、C#、PHP、Node.js等等存在VM的语言。绝对大多数的商业产品和热门的开源产品都属于这个系列。

    \\t\\t

  3. \\t

    全手动探针,优势是适用范围广,最有名的就是Zipkin的整个生态系统,分布式追踪几乎无处不在。也是现在全球运用最广泛的分布式监控系统。

    \\t\\t

  4. \\t

    同时支持自动和手动模式的探针,适用语言同样是Java、C#、PHP、Node.js等等存在VM的语言,由于技术复杂性提高,运用的较少。优点是入门方便,同时使用灵活。商业上主要是Instana,开源主要是sky-walking提供了技术解决方案。

    \\t\

\\

InfoQ:分布式监控领域常用的理论都有哪些?

\\

\

吴晟:所有的分布式理论几乎都来自2010年的Google论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,这里面详尽的描述了分布式系统的解决思路。

\\

Dapper作为分布式监控的核心,主要给大家介绍了Trace、Span、spanId、log、采样等几个重要概念。其中Trace就是一个可能跨越多个节点的分布式。Span是调用过程中一个时间区间(时间跨度),这也是这个英文名字的由来。一般对应一个方法或者代码块的执行。SpanId按照书的索引方式(例如1, 1.0, 1.1, 1.1.1)来表达层级关系,让更多的读者很好的理解了调用链追踪。不过这里要强调的是,绝大多数的追踪系统,包括开源和商业,在工程实践上,因为消耗问题都放弃了这种方法。

\\

log是Span跨度内发生的事件,比如异常。在实际的产品中,会使用Tag、Annotation、Log、Event等多种概念来提升效率。采样是Dapper是大篇幅强调的问题,也就是说,超高并发系统中采样是必然,如何采样也是各产品策略不同,比如按照Span采样,按照Trace采样。

\\

但是几乎所有的现在开源和商业分布式监控系统,都在论文的基础上做了大量改进,模型并不相同。目前阶段,CNCF基金会的OpenTracing标准,是一个很好的理论参考。

\\

还有就是Zipkin的庞大生态和大量公司的参与。我和Zipkin的负责人,Pivotal资深工程师Adrian Cole有过很多的沟通,在跨语言,跨平台的监控上,Zipkin有着强大的用户基础和案例。

\

\\

InfoQ:从你的角度来看,分布式监控系统应该包含哪些模块?

\\

\

吴晟:监控系统一般分为三大模块:

\\

探针或SDK,负责数据采集和发送。探针或SDK是应用程序的收集端。一般使用插件的模式,自动探针一般是不需要修改程序,而SDK则是需要修改部分配置或者代码。skywalking就是自动探针为主,zipkin-brave就是Zipkin的Java手动探针。

\\

Collector模块,负责数据收集、分析、汇总、告警和存储。Collector模块,这个根据不同的APM实现,可能由一个或者多个子系统构成。Collector负责对探针和SDK提供网络接口(TCP、UDP、HTTP不同形式接口)。

\\

功能上,主要包含数据收集、分析、汇总、告警和存储。这些模块在复杂的开源APM和商业产品上都保持一致。大家选择时,值得注意的是,现在包括Zipkin在内的不少国外的追踪系统,是只负责追踪,不负责分析汇总,他们认为分析可以由使用者自己负责。

\\

作为分析方式,分为流式分析和异步批量两种,而流式分析会对数据统计和告警的实时性更有帮助。

\\

UI,负责高实时性的展现。包括但不限于Trace的查询,统计数据展现,拓扑图展现,VM或进程相关信息等,监控关键数据的展现。

\

\\

InfoQ:对于访问量较大的应用,如何解决埋点监控的性能问题?

\\

\

吴晟:这是我在本次分享里面很多内容的根本,性能问题。这个其实没有标准答案,根据系统的不同,流量不同,容忍度不同,标准会完全不同。我们举个简单的例子,在Google,千分之一,万分之一的采样,依然是大数据分析,依然足以定位问题;在多数非BAT核心产品上,50%或者100%采样都不会有性能问题。一定要选择适合自己的,不要过分担忧。

\\

一般说来,一款合格的产品,在单点500TPS之下的应用,采样率都可以保持的很高。

\

\\

InfoQ:现在你们的监控系统有没有结合大数据分析,智能的进行故障预警以及处理?

\\

\

吴晟:目前sky-walking没有去做这方面的工作,因为这样会大大增加部署和运维的难度。有需求,有运维的能力的公司,很容易在产品的基础上进行相关的分析。

\\

在商业产品中,指标方差数,趋势分析,偏移量,热度分析,用户促销活动等等都是在处理范围中。

\

\\

InfoQ:你的演讲里有一个有趣的观点,面向研发的监控和面向运维的监控,如何理解这句话?

\\

\

吴晟:虽然现在DevOps很热,但是无论一体化进行到哪个阶段,线上问题和开发迭代,永远都有时间差。所以“线上问题的发现、规避和应急响应”和“研发过程对于产品的改进和修复”是两个有联系又实际并不相同的理念。

\\

目前的DevOps,强调快速的迭代和响应,微更新,快速发布。相关的容器化技术也是倍受追捧。而这些对于分布式监控的要求也是越来越高。主要原因是分布式的节点,从几十个上升到几百个上千个都是很常见的。

\\

但是,DevOps的发展,并不会完全消除“线上问题响应”和”线下修复问题“中间的时间差。

\\

比如在生产环境中,某个数据库因为冷门业务的某条大SQL语句缓慢,拖慢服务器IO性能,造成应用其他主要接口响应受到影响。

\\

  1. \\t

    对于运维人员,监控系统的职责是需要发现这条慢SQL,识别数据对应的session信息,辅助运维人员杀掉这条SQL的执行。

    \\t\\t

  2. \\t

    对于开发人员,则需要反馈调用链路,找到发生这条SQL调用的原因,是特定参数引起的,还是特定的条件分支,或者是特定的用户。并通过本周期迭代,避免或降低再次发生这个问题的风险。

    \\t\

这个案例中,你会看到,其实,APM系统需要提供的信息是不太相同的。这就是所谓的“面向研发的监控”和“面向运维的监控”之间的差别。而很多人都忽略了这个差别,而这对于APM系统的运用和演进都是很重要的。

\

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108240.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Linux下干净卸载mysql详解

    Linux下干净卸载mysql详解1、使用以下命令查看当前安装mysql情况rpm-qa|grep-imysql可以看到如下图的所示:显示之前安装了:MySQL-client-5.5.25a-1.rhel5MySQL-server-5.5.25a-1.rhel52、停止mysql服务、删除之前安装的mysql删除命令:rpm-e–nodeps包名rpm-evMySQL

  • JAVA基础——接口(全网最详细教程)「建议收藏」

    JAVA基础——接口(全网最详细教程)「建议收藏」Java基础——接口接口概念官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。我的解释:接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组…

  • 国产达梦数据库学习笔记(一):NeoKylin7.0安装及配置与常用基础命令

    国产达梦数据库学习笔记(一):NeoKylin7.0安装及配置与常用基础命令国产达梦数据库学习笔记(一):NeoKylin7.0安装及配置与常用基础命令以VMwareWorkstationPro15环境下的NeoKylin7.0与DM8为例中标麒麟系统NeoKylin7.0安装1.安装包下载NeoKynlin7.0官网下载(填写表格内容即可):中标麒麟系统官网注意:ISO存放路径中避免出现中文2.在VMware上创建虚拟机在VMware主页选择“创建新的虚拟机”,出现以下页面选择“自定义(高机)”选择“安装程序光盘映像文件(iso)”,选择在中

  • 〖EXP〗NSA MS17010永恒之蓝漏洞一键工具「建议收藏」

    〖EXP〗NSA MS17010永恒之蓝漏洞一键工具「建议收藏」漏洞简介永恒之蓝是指2017年4月14日晚,黑客团体ShadowBrokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。5月12日,不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒,英国、俄罗斯、整个欧洲以及中国国内多个高校校内网、大型企业内网和政府机构专网中招,被勒索支付高额赎金才能解密恢复文件。漏洞检测无损检测,不会对目标造成任何危害,大家无需担心Ladon192.168.1.8MS1701

  • 野生前端的数据结构基础练习(5)——散列

    野生前端的数据结构基础练习(5)——散列野生前端的数据结构基础练习(5)——散列

  • linux 文档编辑命令_vim编辑器常用命令

    linux 文档编辑命令_vim编辑器常用命令Linux文档编辑命令1.vi或vim命令1.基本操作1.vim文件名:进入一般模式(不能输入)2.按下i从一般模式,进入到插入模式3.按下esc从插入模式,退出到一般模式4.在一般模式下,输入:wq,退出编辑。2.vi基本概念3.常用命令2.管道linux提供管道符号“|”作用是“命令1”的输出内容,将作为“命令2”…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号