并行类加载——让tomcat玩转双十一 @双十一实战-阿里云开发者社区

开发者社区> 开发与运维> 正文

并行类加载——让tomcat玩转双十一 @双十一实战

简介: 今年双十一,是应用容器的最新版本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会在开断等方面继续发力,帮助业务提升开发诊断效率!




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章