点击上方“开源社”关注我们
| 作者:吴晟
| 编辑:陈梅梅
| 设计:谭嘉露
吴晟
Apache 基金会会员,ApacheSkyWalking 创始人、项目 VP 和 PMC 成员,Apache 孵化器 PMC 成员,ApacheShardingSphere PMC成员,Apache APISIX (incubating) PPMC 成员,Apache ECharts (incubating) 和ApacheDolphinScheduler (incubating) 孵化器导师,Zipkin 成员和贡献者,CNCF OpenTracing 核心维护者。
导读:本文摘自于 SkyWalking 创始人吴晟撰写的《 Apache SkyWalking 实战》一书,概要介绍了 SkyWalking 的新特性。
SkyWalking 7是项目在2020年发布的最新版本,该版本对之前的v6版本保持着高度的兼容性、相同的内核及设计模式,因此读者不用担心之前学习的内容发生大的变化。当然,作为一个全新的版本,SkyWalking 7也有很多独特的地方。
SkyWalking 7新特性
SkyWalking 7保持着高速的持续迭代,我们无法罗列所有的升级,因为截至撰写本书时,已经有超过百项的修改。下面重点介绍一些对用户有深刻影响的新特性。
Java探针不再支持JDK 1.6和1.7
由于大部分商业和开源 JDK 以及 Java 类库已经放弃了对 JDK1.8 以下版本的支持,SkyWalking 社区在 2019 年年底做完问卷调查后得出结论,放弃支持,以保证SkyWalking 依赖库的安全和稳定。
对于极少部分的JDK 1.6、1.7用户,可以使用 SkyWalking6.x 的探针,SkyWalking 7 依然支持它们上报的数据。
支持新的生产级存储实现
SkyWalking v6 中,我们一直支持 H2、MySQL、TiDB、Elasticsearch 作为存储实现。其中,H2 主要用于演示和实验,MySQL 适用于小型使用场景,TiDB 由于本身技术较新,使用范围和使用案例的回馈还十分有限。Elasticsearch 6.x 和 7.x 则是当之无愧的超大规模存储部署的首选。SkyWalking 的大型用户使用 Elasticsearch 作为存储,每天收集百亿以上的监控信息。
同时,SkyWalking 社区也在不断寻找其他的可能性。v7 中,我们新加入了两个选项。
使用了同在 Apache 社区的 ShardingSphere。它对 MySQL 的水平扩展能力的补充,能够很好地满足中型用户的使用场景。同时,由于 ShardingSphere Proxy 对应用透明的特性,我们不需要修改 SkyWalking 的代码,通过原生提供的路由规则即可以完成集成。
InfluxDB + MySQL 混合存储方案。InfluxDB 是一款广泛使用的时序数据库。对于监控数据而言,90% 以上的数据具有高度的时序特性。同时,我们依然保持使用MySQL/H2 作为元数据的存储,这部分无法存在于时序数据库中。对于中型用户与购买了 InfluxDB 企业版本的大型用户,这会在使用成本上比 Elasticsearch 更低。同时,这种实现也给了喜欢 OpenTSDB 存储的用户参考切换新的实现的
机会。
HTTP请求参数采集
参数采集,这是一个被问及最多也是争议最大的功能。SkyWalking 团队了解参数值对于性能诊断的重要性,但同时,参与参数造成的巨大性能消耗,对系统可能产生毁灭性的打击。在 v7 中,我们提供了两个需要用户手动打开的参数:
plugin.tomcat.collect_http_params
plugin.springmvc.collect_http_params
这两个参数结合 plugin.http.http_params_length_threshold 控制参数值长度,可以对请求的参数进行收集。当然,此时,被监控系统和 SkyWalking 都需要承受不小的负担。
HTTP收集协议和Nginx监控
Java、PHP、Go、.NET Core、Node.js 一直是最为主要的 SkyWalking 探针支持范围,在 7.0.0 中,我们恢复了在整个 v6 中都不再提供的 HTTP/1.1 网络协议。Nginx + Lua 的探针(https://github.com/apache/skywalking-nginx-lua)在Apache APISIX 项目的帮助下,也成功和大家见面了。Nginx 作为国内最常用的负载均衡和网关中间件,对其监控的支持很好地弥补了之前的一个功能缺失,也使得调用链追踪和拓扑更为完整和准确。
Elasticsearch存储的进一步优化
Elasticsearch 作为目前运用最为广泛的存储实现,在 6.0~6.3 期间,已经经历了多次重构和优化,目前很好地工作在大量的生产环境中。在 v7 中,我们决心加入更多的监控指标,包括拓扑的细节,甚至其他的监控端,此时 Elasticsearch 索引数量成为新的挑战。从 7.0.0 开始,我们将更多的索引进行了合并,分钟、小时、天指标精度的索引合并成为一个索引,整体的索引数量下降了50%。同时,因为小时、天指标精度只有分钟精度的1/60和1/1440,索引合并后索引的性能和原始的分钟索引性能几乎没有差异。
这个特性让我们更为放心地扩展更多的监控指标。同时,在这里小小地剧透一下,SkyWalking 一直在探究浏览器监控的可能性和落地方案。这个升级也是为前景更广阔的浏览器监控做好准备。
SkyWalking 7新特性
SkyWalking 7 新功能上的核心特性当属性能剖析。它真正做到了在生产环境对单个方法的执行性能进行评估和诊断。而且,它结合 SkyWalking APM 的 Metrics 和分布式追踪能力,能够在高压力、高敏感度的生产环境安全进行性能剖析。
性能剖析基本原理
性能剖析建立在大部分程序运行模型是基于线程这种通用概念,而且绝大部分业务逻辑是运行在单线程中的。
代码级性能剖析就是利用方法栈快照,并对方法执行情况进行分析和汇总,对代码执行速度进行估算。
性能剖析激活时,会对指定线程周期性进行线程栈快照,并将所有的快照进行汇总分析,如果两个连续的快照含有同样的方法栈,则说明此栈中的方法大概率在这个时间间隔内都处于执行状态。从而,通过这种连续快照的时间间隔累加成为估算的方法执行时间。时间估算方法如图示。
时间估算方法
在上图中,d0~d9 代表 10 次连续的内存栈快照,实际方法执行时间在d3~d4 之间,结束时间在 d8~d9 之间。性能剖析无法告诉你方法的准确执行时间,但是它会估算出方法执行时间为 d4~d8 的 4 个快照采集间隔时间之和,这已经是非常精确的时间估算了。
性能剖析的功能特点
性能剖析可以很好地对线程的堆栈信息进行监控,主要有以下优势:
精确的问题定位,直接到代码方法和代码行;
无须反复增删埋点,大大减少人力开发成本;
不用承担过多埋点对目标系统和监控系统的压力和性能风险;
按需使用,平时对系统无消耗,使用时消耗稳定。
这些优点是传统的监控方法无法具备的强大优势。我们曾经在InfoQ中文站发表的文章中也提到过这一点,文章名为“在线代码级性能剖析,补全分布式追踪的最后一块‘短板’”。
使用场景
大家看到上一小节的说明,应该很容易理解性能剖析原理,那么,回到读者最常问的问题,它的性能消耗怎么样。因为很多人了解到,线程快照是会消耗大量性能的。但事实上,这取决你在多大范围内进行线程快照。
SkyWalking 作为一个强大的 APM 系统,无论是功能还是性能上,都是完全为生产环境的高质量监控做准备的。在 7.0.0 之前版本中,通过拓扑图、指标和分布式追踪,能够很好地对性能问题做好定界处理。这个定界表现为,可以探针到慢请求的服务、服务实例、Endpoint,以及具体的代码范围。性能剖析作为一个交互式功能,是在前置的定界操作完成后,针对特性服务的特定 Endpoint 发起的性能剖析。而且在剖析过程中,并行度受到严格限制(默认最大不会超过 10 ),同时线程快照的时间间隔不能低于 10ms。对于针对慢方法的特定功能,10ms 的最小探查精度已经完全够用了。而且,性能剖析也是不允许在同一时间范围内存在多个剖析指令的,这也保证了对单个服务的压力可控。
总之,我们设置了大量的限制,希望读者在使用前做好参数设置,确保精确和有效的性能剖析。
另外,从 7.1.0 开始,性能剖析会自动激活 14.1.3 节中介绍的参数采集功能,后续可能会激活更多的高级特性,帮助用户结合 Trace 和剖析结果,确定代码短板。
SkyWalking 8 Roadmap
SkyWalking 8 将只会保持探针和后端协议的逻辑一致性,在 SkyWalking 3.2 发布之后的 2 年,结束对老版本协议的支持。8.0 首次重新规范协议,同时,彻底移除注册、ID 交换等元数据信息,使系统运维和升级的便利性得到提高。
关于 SkyWalking 的实战内容推荐阅读《 Apache SkyWalking 实战》一书,本文经出版社授权发布。
推荐语:《Apache SkyWalking实战》从功能使用、项目设计、核心模块、工作原理、扩展实践5个维度全面讲解 SkyWalking,由 SkyWalking 的创始人吴晟与核心开发团队撰写,得到了来自华为、百度、蚂蚁金服、京东数科、Tetrate.io 的5位资深技术专家的联袂推荐。
文末福利
我们将在本期的读者中,以抽奖的形式送出 5 本原版书籍!
2020-8-7(周五)中午 12 点准时开奖,赶快点击下方小程序进行抽奖,一起学习 SkyWalking 吧!
开源社线上直播 “源”来如此 报名方式
扫描下方二维码通过活动行报名填写信息,添加小编微信号:chatbot-yuan,回复OS,进入“源”来如此粉丝群。相信你可以在这里和志同道合的伙伴们愉快交流!
8月9日14:00-16:00,我们不见不散!
开源社简介
开源社是由国内外支持开源的企业,社区及个人,依“贡献,共识,共治”原则,所组织的厂商中立、纯志愿者、非营利的开源联盟,旨在共创健康可持续发展的开源生态体系,并推动中国开源社区成为全球开源软件的积极参与及贡献者。我们专注于开源治理、国际接轨、社区发展和开源项目。
相关阅读 | Related Reading
GitHub 标星 10,000+,Apache 顶级项目 ShardingSphere 的开源之路
“源”来如此第一期 带你走进开放式协作
标准共建 开源共赢