听云&运维帮技术沙龙——创新与挑战背后的技术实践之路

10月17日,听云&运维帮联合举办的技术沙龙在北辰泰岳大厦精彩上演,来自网易的技术专家王斌、听云研发总监杨金全、滴滴打车运维架构师俞进秋、去哪儿网运维开发工程师徐磊为在场近200位参会者带来分享。

10.png

《服务器开发人员如何不犯低级失误》

网易王斌老师作为开场首先为参会者带来了分享,如何确保自己开发的系统,不会因为低级失误而毁掉,王老师提出了以下几点策略

1、代码审查

2、设计大量测试用例

3、学习服务器各种知识

4、回放线上业务,提前暴露线上各种bug

5、运维层面补救措施

作为服务器开发人员,一直有这样一个梦想:像足球守门员一样一生不犯低级失误。但是理想和现实往往会有差距,仅凭借经验和日志很难在第一时间发现系统性能的短板,这时候就需要一个完善的应用性能管理方案。第二位出场的听云研发总监杨金全先生便带来了有关应用性能管理相关分享。

《字节码技术在应用性能领域的实践》

10.1.png

应用性能管理的必要性

杨老师讲到,APM这种新的网络管理方向越来越普及,它主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本。

对于一个服务端应用来说,为什么要监测性能,又能带来什么呢?一个系统在运行过程当中很容易出现故障,网络、存储、系统负载、软件Bug,任何方面出现问题都有可能影响到整个系统的稳定运行。

而一个完善的系统监控方案会提供:

  • 不断检查各项服务的稳定性,出现问题第一时间通知相关人员,在故障第一时间进行告警,从而能让运维人员迅速恢复服务。

  • 记录系统、应用运行的各项指标,帮助运维人员全面掌握系统、应用运行状况。

应用性能问题的监测过程当中,很多指标都能够衡量性能的质量。

  • 响应时间也就是通俗来讲的用户感知反馈的时间,包括阻塞时间、应用层时间、数据库时间、NoSQL时间、Web Service时间

  • 吞吐率

    rpm -- requests per minute

    cpm-- calls per minute

  • 错误率(可用性)

  • CPU利用率

  • 内存使用率

  • 线程数量

随后,杨金全老师详细的讲解了Java应用性能的影响因素以及工具技术。业务代码的响应时间、数据库是否做了良好的扩容、拆分、后台Job、异常和错误等都决定服务的水平。

服务端如何发现性能问题?

早期,大范围使用Logs,通过数据库的日志去查询,研发运维需要去处理各种各样的日志格式,应用代码要加入Error-log, Slow Log, SQL Slow Log等导致了额外的代码开发量,本身logs输出过多,也会影响性能,同时时间成本加大,无法快速串联业务组件消耗时间。

Java本身提供了用于性能管理的技术,例如JMX,即Java扩展管理,通过它提供的接口可以得到应用内部的一些性能情况 ,像内存、GC的相关参数,可以通过自定义MBean将应用本身的参数暴露出来,内置的MBean有Memory、MeroryPool、OperatingSytstem、ThreadMX等。也可以自定义一些MBean来获取希望得到的数据。通过Java提供的Jconsloe工具同样也能获知一系列性能数据。除此之外例如jmxtrans + Ganglia,jmxtrans是一款第三方的性能检测工具,Ganglia是一个图表工具,两个工具配合以可视化的方式直观的呈现出Java应用的性能画像。类似的工具和技术还有很多,例如Metrics + Graphite,Spring Insight等。

10.2.png

20.3.png

Java还提供一种字节码技术,是指Java会将源码编译成class文件,class文件就是字节码,它包含class的源信息,通常通过AOP的方式注入到代码中来获得执行的开始时间和结束时间。从底层来说就是对于字节码的操作技术,它主要包含BCEL、SERP、Javassit、ASM等技术。同时JDK还为我们提供了Java Instrumentation。

ASM是一个字节码操作框架,它可以直接产生二进制class文件,也可以在类被加载入Java 虚拟机之前动态改变类行为。Java class被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,根据用户需求改变类行为。

Instrumentation 是 Java 5 提供的新特性。它允许class加载的时候去改变一些类的行为, 使用 Instrumentation,开发者可以构建一个Agent,用来监测运行在 JVM 上的程序。监测一般是通过在执行某个类文件之前,对该类文件的字节码进行适当修改进行的。

下面是运用字节码技术实现性能监控的部署架构和实现原理

20.4.png


20.5.png

考虑到系统的消耗,自动嵌码秉承一个原则:只在必要的位置嵌入尽量简洁的代码。必要的位置是指可能形成性能瓶颈的代码和可能诱发其他性能问题的位置。

《自动化运维实践之路》

第三位出场的滴滴打车运维架构师俞进秋老师讲述了《自动化运维实践之路》,分为WorldTree、监控系统,故障处理三部分。其中俞老师重点介绍了滴滴内部监控系统的发展,从1.0到现在的3.0经历了彻底重构,现在的监控系统存储支持逻辑空间、Web配置监控、节点继承、Agent感知变化,谈到监控系统怎样保证线上业务稳定时,俞老师提到以下四点:

  • 架构设计无单点

  • 故障自动冗余

  • 监控系统自我监控

  • 外部系统相互监控

《大规模Mesos&Docker在去哪儿网的实践》

去哪儿网徐磊老师则带来了有关Mesos&Docker的技术干货,由于业务线的需求需要快速构建DEV环境、进行有效的版本控制,越来越多的人开始关注Docker,基于此去哪儿网综合各家的容器经验,选取实时日志解析作为落地的切入点

-计算节点无状态

-容器不依赖独立IP

-无文件写盘

-数据量巨大

从而衍生出基于Mesos+Marathon的实时日志平台:单日处理60亿+日志数据,提供实时运营数据报表,HTTP回放,BUG修复排期。在演讲最后,徐磊老师针对大规模Mesos&Docker提出了优化快速构建流程、启用Mysos解决DEV数据库资源紧张、基于日志自动化回归测试,继续容器化线上应用等建议。

至此,听云&运维帮技术沙龙落下帷幕,散场后程序员朋友们久久不愿离去,接下来将会有更多的技术沙龙与大家见面,听云也会持续带来福利提供给程序员朋友,敬请期待。

关于作者

许小午

不是一个没有故事的女同学

我要评论

评论请先登录,或注册