点击上方“开源社”关注我们

| 作者:吴晟

| 编辑:陈梅梅

| 设计:谭嘉露

吴晟

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 的开源之路

“源”来如此第一期 带你走进开放式协作

标准共建 开源共赢

开源社执行长王伟老师荣获“2020中国开源杰出贡献人物奖”

重磅推荐 | SkyWalking未来初探(文末有福利哦)相关推荐

  1. 探索自助报表BI的现状和未来(文末送福利)

    前言 虚竹哥有个朋友小五,他在数据产品提供商的公司上班.小五的妹夫自己开了家软件工作室,会承接一些软件研发项目.妹夫问小五:有没有成熟的报表插件,可以集成到程序中,最好是开源的,方便根据业务进行适配调 ...

  2. 文末有福利 | 6大理由,告诉你为什么这个大会你不能错过!

    作者 | Carol 出品 | 区块链大本营(blockchain_camp) * 文末可参与抽奖活动! 如果说有一个什么领域,能让中科院.华为.腾讯.京东.360.微众银行的大咖汇聚在一起,那一定是 ...

  3. 万字长文解析“数据中台”的硅谷实践(文末有福利!)

    4月18日下午,智领云联合创始人&CTO,前EA(艺电)大数据平台高级工程经理宋文欣博士首度在智领云技术直播中开讲,向参加直播的数百位观众讲述了硅谷"数据中台"的故事.实际 ...

  4. 百年通信史:落后西方半世纪的中国,用 20 年绝地反杀! | 文末送福利

    作者 | Aholiab,责编 | Carol 出品 | CSDN(ID:CSDNnews) * 温馨提示:文末有福利! 视频内含更多干货,点击小程序立即围观! 在1905年的日俄战争中,俄罗斯第二太 ...

  5. 人工智能写小说python_1月下旬值得一读的10本技术新书(人工智能、C++、Python数据科学等)!文末有福利!...

    1月下旬,阿里云云栖社区 联合 图灵教育 为大家带来十本技术书籍(人工智能.C++.Python数据科学等).以下为书籍详情,文末还有福利哦! 书籍名称:<C++性能优化指南> 内容简介 ...

  6. html类选择器使用在什么场景,你需掌握的CSS知识都在这了(长文建议收藏,文末有福利)...

    1.CSS盒模型,在不同浏览器的差异 css 标准盒子模型 css盒子模型 又称为框模型(Box Model),包含了元素内容(content).内边距(padding).边框(border).外边距 ...

  7. css 商城 两列_你需掌握的CSS知识都在这了(长文建议收藏,文末有福利)

    1.CSS盒模型,在不同浏览器的差异 css 标准盒子模型 css盒子模型 又称为框模型(Box Model),包含了元素内容(content).内边距(padding).边框(border).外边距 ...

  8. 架构师们,怎么走着走着就变“烟囱”了呢? | 文末含福利

    作者 | 耿立超 来源 | <大数据平台架构与原型实现:数据中台建设实战> * 文末有福利 这两年,随着中台概念的兴起,一种IT过去的常态,现在的明星反面教材--"烟囱式架构&q ...

  9. MNIST竞赛准确度99+%技术详解,文末有福利~

    点击我爱计算机视觉标星,更快获取CVML新技术 本文为FlyAI竞赛社区供稿. Part.1 项目简介 MNIST项目基本上是深度学习初学者的入门项目,本文主要介绍使用keras框架通过构建CNN网络 ...

  10. 【高并发】解密导致并发问题的第二个幕后黑手——原子性问题(文末有福利)

    写在前面 大冰:小菜童鞋,昨天讲解的内容复习了吗? 小菜:复习了大冰哥,昨天的内容干货满满啊,感觉自己收获很大. 大冰:那你说说昨天都讲了哪些内容呢? 小菜:昨天主要讲了线程的可见性和可见性问题.可见 ...

最新文章

  1. 实现不同vlan间PC不可互访,而不同vlan的PC均可访问服务器的特殊效果,(华为)...
  2. BZOJ 1977: [BeiJing2010组队]次小生成树(Kruskal+树上倍增)
  3. 在Linux和Windows的Docker容器中运行ASP.NET Core
  4. 深度学习基础(综述及名词解释)
  5. 学游戏3d建模好找工作吗?待遇如何?
  6. 网页撤销后ubuntu本地撤销
  7. 2018-03-07 Linux学习
  8. 磁盘调度算法课程设计(附源代码)
  9. 拓端tecdat|R语言预测期货波动率的实现:ARCH与HAR-RV与GARCH,ARFIMA模型比较
  10. string类的函数
  11. 易语言linux时间戳转换,易语言unix时间戳转易语言格式源码
  12. 锐浪HTML5报表实际应用方法,解决锐浪Grid++报表在谷歌等浏览器不兼容的尴尬局面
  13. 搭建本地以图搜图服务
  14. 51单片机学习笔记【五】——1602液晶屏
  15. 欠钱不还直接打,打到还钱才停
  16. 在云效平台实现流水线部署遇到的问题及解决
  17. 【Flutter从入门到实战】⑪、豆瓣案例-1、星星评分Widget、虚线Widget、TabbarWidget、BottomNavigationBarItem的封装、初始化配置抽取
  18. 一款基于springboot开发的经典后台管理系统
  19. Android自定义键盘之汉字键盘
  20. 自学考试-“运筹学基础”

热门文章

  1. android的适配器作用,适配器模式安卓中的应用
  2. 和自己赛跑的人 —不要怕、不后悔!
  3. 少一点张扬,多一点谦虚;少一点英雄主义,多一点实事求是——读2008第11期《IT经理世界》
  4. 校园网络的未来发展方向
  5. font-family、font-style、font-weight、font-variant的区别「In CSS」
  6. c语言中字符串型文件名,C语言中变量名的命名规则
  7. 懒人原则(Kepp it Semple Stupis)
  8. 终于搞懂了el-dialog属性modal-append-to-body,append-to-body的作用【图解】
  9. WPS office出现“xxx.docx中发现无法读取内容,是否恢复此文档中的内容......word在试图打开文件时遇到错误” 紧急解决方案 -- 小黑日常超细解决教程
  10. 七千字的线性回归模型指南,建议收藏!