【TOP100案例专访】当当网工程师林嘉琦谈双11大促经验及APM实践
导读:第七届TOP100全球软件案例研究峰会将于11月30日-12月3日在北京国家会议中心举办,本届峰会以“释放AI生产力 让组织向智能化演进”为开幕式主题,旨在推动企业在趋势下拥抱AI、探索和思考AI带来的力量。十八个主题专场,120个案例为组织形式,意在向参会者解读2018年软件研发设计创新案例。
会前TOP100组委会专访案例分享者当当网 架构部工程师林嘉琦老师,他将为我们带来《如何快速准确定位复杂系统中的链路性能瓶颈:APM在当当的实践》的话题 。讲述当当网往年大促经验教训,以及APM在当当的实践,对现有系统进行链路性能分析;从技术选型,生产环境落地,使用中踩过的坑以及大促指导综合压测的数据分析;此外,还有当当与开源APM产品skywalking的深度合作以及开源贡献。
林嘉琦,当当网架构部工作,负责APM调用链、作业云等,shardingsphere、skywalking开源贡献者。
TOP100组委会:非常荣幸能采访到您。林老师现在负责当当整体的APM相关工作,是什么原因让您在互联网行业行走这么多年后,最终选择深入APM领域?能否为大家介绍下您的从业经历?
林嘉琦:我之前一直在亚信工作,长期从事电信行业业务系统的集成工作,积累了较丰富的3A数据业务系统研发实施经验。长期的码农工作让我对技术产生了浓厚的兴趣,也希望自己在技术领域能够不断探索进步。一个偶然的机会,我有幸加入了当当的架构部,负责参与了如作业云、限流、APM等云平台、中间件开发。此外,也对一些如Sharding-Sphere、SkyWalking这样的优秀开源项目做了代码贡献。这使我能够从技术架构的角度去审视电商业务系统的演进变化,并让自己的技术视野得到全面拓宽。
至于负责APM的工作也是跟当当的业务发展息息相关。当当的业务系统在微服务化后出现了一些新问题,如性能问题定位困难、业务各团队间性能数据不一致等。尤其是某年大促时出现了事故,更促进了APM在当当的推广使用,于是我主动承担了这项有新挑战的工作。
TOP100组委会:在深入理解APM后,您认为APM调用链的核心关注点在哪里?其技术难点又有哪些呢?能否依据您在此方面的积累以及当当的实战经验为大家简单介绍一下呢?
林嘉琦:APM英文为Application Performance Monitor或Application Performance Management,译文为应用性能监控或应用性能管理系统,通俗称调用链追踪系统。APM调用链专注于应用系统的性能和可用性的监控与分析,它能够监控企业关键应用性能、快速定位应用系统性能故障、优化系统性能。大家知道,现在的应用系统正在变得越来越复杂,并向分布式化、微服务化、云化不断演进。就拿当当这样的大型电商来讲,整体系统链路至少有成百上千个服务,没有人能够把所有服务的细节情况说清楚。而且每一次用户的访问请求会形成一个包含多服务节点的完整请求链路,但当这个链路出现性能问题时,排查定位会变得非常困难,每个服务的业务团队拿来的性能数据并不一致,导致性能问题无法定位。这时就需要有一个全局性的链路追踪系统,能够在各个服务间将性能瓶颈追踪到。
要实现这样一个APM系统有很大的技术挑战难度。首先是链路的复杂度,大家知道在一个典型的互联网应用里,一次用户访问行为会从用户终端发出,经过基站并通过运营商网络的传输,再通过DNS解析,最终访问到应用服务。要追踪这样的端到端的链路性能瓶颈,需要在每一个可能瓶颈的链路点都加上监控,这样的实现成本无疑是十分高昂的。其次是功能的完整度,要实现一个完整APM系统,要做好五个层次的实现,分别是终端用户体验、应用架构映射、应用事务的分析、深度应用诊断和数据分析。最后是性能的损耗度,对于应用有侵入性的APM,一定要考虑侵入对应用所带来的性能影响,尤其是APM的采样率控制,要在数据采集量与性能损耗间做一个平衡。这些技术点都是具有很大的挑战难度。
TOP100组委会:您说提到,现今业务系统正在向分布式化、微服务化、云化方向发展。那么在此趋势下,为什么APM调用链可以解决系统链路中的性能瓶颈问题呢?它是如何实现的?
林嘉琦:APM本身叫应用性能监控系统,也称调用链追踪系统。顾名思义,它能够追踪到每个访问微服务的请求,并能够将每个请求经过的所有微服务串联成一个完整链路,清晰直观的将链路展现出来,再通过汇总分析,就能够定位到系统链路中的瓶颈了。
拿当当网之前使用过的商业版APM来说,它为每个服务装上特定语言的探针,用户的访问行为就会被该服务追踪下来,追踪的内容叫做Segment片段。而且,一次用户访问行为很可能会经过多个服务,这样多个Segment片段会串联成一个完整的Trace调用链,通过采样率控制Trace的数量并将它们保存下来。在每一个Segment片段里,包含了该Segment片段的事务编号和它所访问的每一个Span方法信息,如方法名称、类型、起止时间、服务地址、结果状态码、日志信息等等。将所有Trace的内容进行汇总和分析,最终会模拟重现每次用户的访问行为的链路,在链路图上可以直观的看到每个服务的耗时与状态码,以及服务的整体错误率和慢调用率的统计。通过以上这些功能、数据就能够帮助我们最终定位系统链路的性能瓶颈。
TOP100组委会:当当使用过商业版的APM、开源版的APM等。那么在对这些APM进行技术选型时,您是如何考虑的?为什么最终选择了SkyWalking?
林嘉琦:起初我对APM并不了解,于是根据公司具体需求调研了业界很多款知名产品。SkyWalking这款开源产品的作者吴晟、彭勇升老师曾经是我的同事。后来还有幸请到吴晟老师到公司做过一次APM的深度交流。这使我深受启发。通过对几款产品的调研和对比测试,也鉴于对现有系统做最小变更的原则下,SkyWalking在产品易用性、功能多样性、多语言探针难易度等方面有较好的优势。同时需要指出的是,选择SkyWalking也是因为它的社区生态和发展潜力,也算是对国内优秀开源产品的一种支持吧。
TOP100组委会:马上就要临近双11了,各大互联网公司都在紧锣密鼓筹备中。当当在这样的大促前,会做哪些有关APM、压测等方面的工作呢?又遇到过什么样的坑呢?能否为大家做一些经验分享。
林嘉琦:当当每年最大的促销当属书香节和双11了,在大促前压测是常规操作,尤其是当综合压测时,APM的作用就会更明显。通常在每次大促压测前,我们会选择SkyWalking的一个最新稳定版进行升级部署,搭建好生产环境和测试环境,并调通自研的PHP探针,再协调各个业务团队接入PHP和Java探针,解决接入过程中的所有问题,至此APM的接入工作才算完成。
在每次大促压测时,我们会密切监控SkyWalking服务以及接入探针的业务系统的可用性与稳定性,必要时要做一些紧急处理。在每次大促压测后,我们还要及时整理压测报告,分析系统链路的瓶颈问题。至于在压测过程中遇到的坑就很多了,比如系统采样率设置问题、接入探针后发生Full GC问题、探针不支持部分组件问题等等。总之,坑是一定会有的,不要侥幸,认真踩坑,方为正路。
TOP100组委会:听闻林老师是多个优秀开源项目的贡献者,例如Elastic job、Sharding-Sphere、SkyWaking等。您觉得做这些开源项目的动力是什么?又在其中收获了什么呢?
林嘉琦:这有些过奖了,我确实参与了开源Sharding-Sphere、SkyWalking的代码贡献,Elastic job也在维护中。参与这些开源项目离不开优秀的开源前辈引路,尤其是架构部前总监张亮老师。我切身感受到他对开源的极致追求与超凡境界,以及他对开源圈的技术影响力,确实是深受触动且受益良多。像Sharding-Sphere、Elastic job这样的优秀开源项目,也都是张亮老师在架构部时主导负责的,在开源圈有很广泛的知名度与使用度。此外参与SkyWalking的贡献,也要感谢吴晟老师、彭勇升老师的支持,可以说当当既是SkyWalking的使用者与受益者,也是贡献者与回馈者。坦率讲,对于开源我还是个学生,能够参与到这些优秀的开源产品,认识到优秀的开源人,已使我受益良多,促使我不断提升自己。
TOP100组委会:林老师一路经历很多、成长很多。在当今高速发展的互联网行业里,哪些领域可以让我们站在风口,快速发展呢?能否为大家介绍一些林老师今后的规划、发展让读者朋友借鉴下?
林嘉琦:正因为每个人的发展都是独特的、个性化的,这个世界才会变得丰富多彩,谈规划也只能算个人观点,很可能会一叶障目,对大家来讲也仅供参考而已。在我看来,目前技术正在向云计算化、物联网化、人工智能化变革,这也正是目前行业发展的一个大趋势,每一种技术都可以成为你潜心研究的方向。此外在开源界,国内优秀的开源产品越来越多,这也代表了对国内技术的认可,这也可以成为你发展的方向。
而我,可能想去传道解惑当老师。对于教师和医生职业,我有特殊的认同感,一个是人类灵魂的工程师,一个是拯救生命的白衣天使。考虑到实际情况,我去当老师可行性更大一些。通过自己的知识积累和经历经验去影响别人,如果能给别人开一扇窗,我会觉得人生更有价值和意义。
TOP100组委会:最后,恭喜林老师入选由msup主办的第七届TOP100全球软件案例研究峰会!作为讲师,您对本届TOP100大会有什么期望或建议吗?
林嘉琦:很荣幸我提交的案例能够入选TOP100全球软件案例研究峰会。通过主办方征集当年度优秀的企业案例,并经由行业资深技术专家组成的出品人团队筛选,最终甄选出最具分享价值的100个代表性案例。我相信这些案例一定颇具启迪性和价值。他山之石,可以攻玉,期望能够与大家交流共享,共同学习业内的优秀实践成果,才会不虚此行。也祝愿TOP100能够再接再厉,为我们提供更有价值的案例分享!
以上内容来自林嘉琦老师的分享,也祝愿他在TOP100大会能够有精彩的表现,TOP100大会9折倒计时优惠报名中!爆款架构/架构演进/工程实践专场部分精彩议题如下:
爆款架构/架构演进/工程实践
除以上精彩案例外,我们还邀请了百度、腾讯、阿里、京东、美团、华为等一流公司精英人士参与。
购票咨询:赵丹丹 158-0221-7295
赞助合作:sissi 130-4321-8801
志愿者招募:沙乐乐 186-2276-6683
【TOP100案例专访】当当网工程师林嘉琦谈双11大促经验及APM实践的更多相关文章
- 双11电商剁手节,最全的H5互动营销案例合集
距离双11不足一个月! 是否准备好为双十一疯狂剁手! 自从天猫2009年首创双11购物节以来双十一不仅成为了消费者的"剁手日" 更是每年企业营销的"狂欢节" 各 ...
- [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素-CSDN.NET
Women Techmaker 北京站 [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素-CSDN.NET [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素 发表于2 ...
- scrapy获取当当网中数据
yield 1. 带有 yield 的函数不再是一个普通函数,而是一个生成器generator,可用于迭代 2. yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yiel ...
- Python爬虫库Scrapy入门1--爬取当当网商品数据
1.关于scrapy库的介绍,可以查看其官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/ 2.安装:pip install scrapy 注意这 ...
- 为什么在我眼里你是一只傻逼——傻逼“常所用”句型之(2)——“当当网的就有XXX人评论,YYY%的推荐”
A:这东西里面尽是大粪. B:这东西当当网的就有325人评论,98.8%的推荐.京东的整体评论是五星,37人评价,31人给好评,1人差评,5人中评:亚马逊有6条好评,1条中评. http://news ...
- 当当网开源Dubbox,扩展Dubbo服务框架支持REST风格远程调用
当当网近日开源了Dubbox项目,可为Dubbo服务框架提供多项扩展功能,包括REST风格远程调用.Kryo/FST序列化等等. 当当网架构部和技术委员会架构师沈理向InfoQ中文站介绍了Dubbox ...
- 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)
做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...
- 转 当当网资深DBA:DB运维四大现代化的实现
位好,今天我的主题是 <DB运维的四个现代化> ,看标题就能明白,是关于DBA自动化运维平台的事情.http://dbaplus.cn/news-21-855-1.html 主要是分享下我 ...
- java爬虫,爬取当当网数据
背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...
随机推荐
- ANTLR flex/bison
https://stackoverflow.com/questions/29971097/how-to-create-ast-with-antlr4 这个很值得仔细看 https://github.c ...
- SoapUI Pro Project Solution Collection –Easy develop Groovy Script to improve SoapUI ability
As you know the groovy script and java script language is the soapui supported .but unfortunately So ...
- 一道笔试题:给定编码规则,实现decode()方法
public class CodeDecode { /*变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串: (1)若已知字符串的当前字符不是大于0的数字 ...
- 让div获取焦点
DIV获取焦点有两种方法: tabindex="0" contenteditable="true" ①:设置div为可编辑状态,则可点击获取焦点,同时div的内 ...
- [转]设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识
原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
- 浅析Mysql的my.ini文件
转载:http://hunanpengdake.iteye.com/admin/blogs/1647725 今天闲的蛋疼,没事想了解mysql,大家都知道在配置Mysql的过程中,my.ini非常重要 ...
- Multiplication of numbers
Questin: There is an array A[N] of N numbers. You have to compose an array Output[N] such that Outpu ...
- java框架篇---hibernate之CRUD操作
CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写. 下面列举实例来讲解这几个操作: 实体类: ...
- 模仿CyclicBarrier,自定义自己屏障类
简介 在这里模仿CyclicBarrier,自定义一个自己多线程屏障类,里面有个计时器count,count为0时,才唤醒线程,否则就await挂起,(没错就是用的object类的挂起和唤醒全部线程方 ...
- JVM 内部原理(五)— 基本概念之 Java 虚拟机官方规范文档,第 7 版
JVM 内部原理(五)- 基本概念之 Java 虚拟机官方规范文档,第 7 版 介绍 版本:Java SE 7 每位使用 Java 的程序员都知道 Java 字节码在 Java 运行时(JRE - J ...