淘宝双11技术实践:tomcat并行类加载

14 篇文章 0 订阅
8 篇文章 0 订阅


https://yq.aliyun.com/articles/4227?spm=5176.100239.yqblog1.20.cfRztB


摘要 今年双十一,是应用容器的最新版本Ali-tomcat 7.0.59.x应对的第一次双十一。这个版本包含的一个主要功能是并行类加载,本文主要对并行类加载在双十一期间的支持做一个总结。 并行类加载在双十一期间最主要的业务系统,在双十一期间支撑了每秒14w订单创建,是一个非常了不起的成绩!

今年双十一,是用容器的最新版本Ali-tomcat 7.0.59.x应对的第一次双十一。个版本包含的一个主要功能是并行,本文主要并行在双十一期的支持做一个总结

并行在双十一期最主要的业务,在双十一期支撑了每秒14w订单创建,是一个非常了不起的成

 

业务背

由于各种原因,该业务较庞大,依赖较为了解决业务性,用引入了模化系,通化的方式抽象出一系列的bundle,而bundle互相隔离,享有独立的器。

由于bundle相互隔离,我自然就会想到,是否能用启动时线程并行的初始化bundle呢?

原来的用运行在JDK6上,Tomcat候,用的Classloader(WebappClassLoader)候是序加的,因JDK6Classloader.loadClass(String name)个方法是synchonized的,如果用里面有多个线程在同时调loadClass方法,那么争将会非常激烈。

大家知道在JDK7上,如果Classloader.registerAsParallelCapable方法,会开启并行功能,把级别ClassLoader象本身,降低要加级别话说只要多线程加的不是同一个loadClass方法都不会住。憾的是,开启并行要求一个路上所有器都registerAsParallelCapable,但tomcat7WebappClassLoader并没有registerAsParallelCapable,所以老版本的tomcat7即使运行在JDK7上,也无法利用并行的特性。

 

实现原

Ali-tomcat 7.0.59.2版本开始解决了问题,支持在WebappClassLoader中打开registerAsParallelCapable方法。但是情况没有那么简单需要解决的一个问题是如何兼容JDK6问题,因tomcat7.x版本是基于JDK6编译,同运行在JDK6JDK7+以上的。JDK6下是没有Classloader.registerAsParallelCapable个方法的,所以JDK6下必保持原有的行,在JDK7下才能支持并行功能。也就是,即使用配置了并行,那么tomcat也必根据运行JDK版本来决定是否开启并行功能。Ali-tomcat反射机制解决了问题,在运行对应用的WebappClassLoader尝试注册并行功能,当发现没有个方法,会自fall back到普通的,也就是线功能。

 

并行体系

aeea0b80848c211238cffb8fd8ad06ae58e3e2a0

可以看到,实际运行程中,tomcat会自根据JDK版本来选择是否启用并行功能。当然这项功能默是关的,需要用配置文件示开启。

 

双十一实际运行数据

84ba9197edc66785dd84b71fd7acd9e5fcfbb6ac

看到在实际线上机器的启动时间上,当开启并行功能后,模化系的启动时间提升了47%用整体启动时间提升了29%

 

配置方式

  1. tomcat的运行境是JRE7及以上。
  2. 安装ali-tomcat 7.0.59.3版本
    sudo yum install -b current taobao-tomcat-7.0.59.3
  3. 修改/home/admin/$APP/conf/tomcat/context.xml,如果个文件不存在,/opt/taobao/tomcat/conf/context.xml一份。添加如下配置:


    <Loader loaderClass="org.apache.catalina.loader.ParallelWebappClassLoader" />
  4. 重启Tomcat

  5. 成功启后,应该会在控制台看到似如下的日志:

    6.	2015-10-12 14:22:50,444 org.apache.catalina.loader.ParallelWebappClassLoader <clinit>

    INFO: ParallelWebappClassLoader registration succeeded.


开源社区

并行功能已在捐献Apache tomcat社区,并且被社区接受,在最新的Apache tomcat 7.0.65版本中已包含该项功能。

34c7d4c5112e7f5585e3f4da4a60b4b228e98206


结语

并行功能在模业务应用,以及合并部署等等景下于性能有大提升。后Ali-tomcat会在开断等方面继续发力,帮助业务提升开发诊断效率!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值