“二方包升级难!”
“XXX 升级后,项目起不来了!”
“这次就升级了 XXX,外网运行就报错了!”
推动应用升级二方包困难,应用本身升级困难,这是 19 年 H1 在推动中间件二方包升级过程最大的槽点,那么升级过程究竟碰到了什么问题呢?从上面的截图看主要归类为 2 点
我们不妨看看背后类的选择和加载做了什么工作
1.对于 java 应用来说,一般是使用 maven 来做依赖管理的,maven 的特性说明 3 点
多个版本存在时,采用最短路径原则和优先声明原则,如果两个依赖版本在依赖树里的深度是一样的时候,第一个被声明的依赖将会被使用
直接的指定手动创建的某个版本被使用
2.完成类的选择,类是如何加载的呢?
class 字节码通过 ClassLoader 被转换成内存中的对象,这个转换过程采用按需加载的原则,即用到该类才加载
JVM 运行实例会存在多个 ClassLoader,这些 ClassLoader 是如何加载类的呢?
所以,二方包升级过程碰到的 ClassNotFoundException、NoClassDefFoundError、NoSuchMethodError、ClassCastException、LinkageError 问题都可以解释了,加载了非预期的二方包导致的各种冲突和异常
有了上面的铺垫,回归主题,二方包稳定性测试特性在哪里呢?一样的方面就不再赘述了如研发单测、监控手段等
我们已经了解了二方包在升级过程中存在的问题,那么有什么方法来降低升级的成本,提前测试二方包的兼容性呢
运行前
版本依赖检查
运行期
上面提到的测试手段,本质并不能解决中间件二方包和业务二方包冲突的问题,因此中间件团队已经在调研实现类隔离的方法,从本质上解决这个问题
业界主流的测试覆盖率工具 jacoco 用于应用的测试覆盖率的收集,这个能不能收集二方包的测试覆盖率呢?答案是可以的!此处感谢 @ 石塘一起验证二方包覆盖率过程
方法
会有同学疑问,二方包是怎么做性能测试的,二方包性能测试的关注点在哪里?这个问题可以从一个 P0 故障开始说起...
首先需要说明,中间件的二方包使用是基于应用的,所以性能测试也是基于应用的。目前在做的二方包的性能测试主要是 soa 和 hunter,测试应用是网关 site & 被测应用 soatest
测试路径
测试指标,重点需要关注内存,进程内存和机器内存的使用情况,内存使用逻辑非常复杂。如果在测试发现问题,需要根据问题具体分析,这里说的是二方包性能测试,就需要关注有没有因为二方包引起类似这个故障的内存泄露问题
业务同学实际故障演练时,可以 review 对应的测试结果,参考故障发生时的解决方案 (重要,重要,重要!)
酷家乐质量效能团队热衷于技术的成长和分享,几乎每个月都会举办技术分享活动(海星日),每半年举办一次技术专题竞赛分享(火星日),并将优秀内容写成技术文章。
我们尽可能保障分享到社区的内容,是我们用心编写、精心挑选的优质文章。如果您想更全面地阅读我们的文章,请您关注我们的微信公众号"酷家乐技术质量"。
如果您有兴趣了解我们的职位和团队情况,请参考最新职位招聘,并联系 caibao@qunhemail.com。感谢您的阅读!