AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

基于 Java 容器的多应用部署技术实践 by 魏鹏@阿里

发布者 docker
发布于 1470356461787  浏览 6687 关键词 Java, DevOps 
分享到

第1页

基于Java容器的多应用部署技术实践



第2页

2016-4-21



第3页

个人经历



魏鹏 花名:豫楚

阿里巴巴中国网站交易平台(2009-2013)

• 服务化 • 数据迁移

中间件技术部-容器与服务框架(2013-)

• 应用容器Pandora • 服务框架HSF

《Java并发编程的艺术》



第4页

目录



阿里Java容器的发展历程 容器架构 合并部署

多版本部署





第5页

阿里Java容器的发展历程 容器架构 合并部署

多版本部署





第6页

阿里Java容器的发展历程



起源(2009)

•服务框架的重构 •基于OSGi •隔离与应用之间 依赖 •基于Jboss部署



发展(2010)

•软负载组件 •配置组件 •单元化组件



新生(2013)

•基于Java类加载 器 •插件部署规范 •容器运维



升级(2015)

•多应用部署 •合并部署



挑战(2016) •多版本部署





第7页

阿里Java容器的发展历程 容器架构 合并部署

多版本部署





第8页

容器架构

Java容器(2015.05)

• 多应用部署 • 生命周期 • 事件体系



Ali-Tomcat



Ali-Java容器



插件部署 生命周期



类加载器 事件体系



服务框架 消息组件 配置组件 数据访问



提供中间件 的服务



使用所需 的服务

部署



应用生命周期 的事件通知





第9页

阿里Java容器的发展历程 容器架构 合并部署

多版本部署





第10页

调用链路长

部 署 复 杂 度

用户请求



用户请求



用户请求









规模

红色:远程调用





第11页

如何优化



线路热 点已知



核心链 路确定



流量入 口固定



从流量入口下手,优化 核心链路中的热点线路





第12页

合并部署

核心链路上强相关的多应用部署



第13页

远程调用转本地调用

容器提供给服务框架当前部署的应用信息,调用时“查表”, 本地调用需要进行“深拷贝”

服务框架



远程调用 用户请求



消费服务C 消费服务B 提供服务A



本 消费服务D

地 调

用 提供服务C



深拷贝



消费服务E



提供服务D



远程调用



Ali-Tomcat





第14页

“深拷贝”

跨类加载器对象深拷贝的示例:

public Object deepClone(Object instance, ClassLoader Loader2) { 1. 以目标Loader2创建类型实例



Loader1



2. 返回Object实例clone 3. 按照instance进行反射拷贝



Loader2



return clone; }





第15页

“深拷贝”性能对比

• 平均只有Hessian的15% • 没有统计网络开销



10W次测试,单位:毫秒





第16页

合并部署的效果

• QPS提升超过50% • 数据越大提升越发明显



其中合并部署的机器配置为基准环境的4倍





第17页

实际情况

• Rt下降了50% • 毛刺基本消失,链路更加平稳

商品详情页合并部署改造前后Rt对比

改造前后不同周六上午6时到12时的数据



第18页

合并部署带来了什么



降低成本



双十一没有增加 机器

• 商品详情 • 交易开放平台



提升性能



RT下降明显

• 50% • 丝般顺滑





第19页

目录



阿里Java容器的发展历程 容器架构 合并部署

多版本部署





第20页

时间哪里去了

Electric Cloud在2013年3月发起一项调查,抽取了443名软件工程师,每周19个小时用于开发



第21页

当前的发布方式

• 多批次 • 一个接一个 • 回滚也是按批次

100台 验证通过 100台 验证通过 100台 验证通过 100台



30分钟



平均1-2小时,长的也有4小时

发布日意味着一下午没了…



第22页

批次的矛盾



发布问题



扛流量的机器减少

前一批次的负载升 高

客户端调用失败概 率升高



批次内机器变多 发布总时间下降



能不重启就发布吗?



减少批次





第23页

多版本部署



• 多应用部署

• 一个应用多个版本

• Ali-Tomcat的多版本 切流命令

• App##Version2.war • App##Version1.war

• 应用区分维度

• 应用名 • 版本号

• 外部链接不断



HTTP



远程调用

Ali-Tomcat



消息处理



服务框架



数据访问



消息组件



提供中间件 的服务

部署

版本切换





第24页

资源释放的问题





第25页

事件体系



响应事件来释放资源, 事件类型:

• 应用部署事件 • 应用退部署事件 • 流量关闭事件 • 流量开启事件



切流 部署 停止



Ali-Tomcat

事件通知 服数 配 数消 务据 置 据息 框组 组 访组 架件 件 问件

提供中间件 的服务

部署





第26页

资源隔离的问题



应用版本1

内存 CPU I/O带宽



应用版本2

内存 CPU I/O带宽 系统变量





第27页

多租户JVM



数据隔离 资源配额 资源隔离 多租户API AliJDK8





第28页

Tenant与Context



依靠Tenant做到资源隔离。

• Context对应Webapp • Tenant中创建Context • 销毁Context时销毁Tenant



Ali-Tomcat



部署



Context 版本1



Context 版本2





第29页

多版本部署带来了什么



发布提速



全量发布

• 商品详情应用 • 2小时到10分钟



自由切流

• 按比例



秒级回滚



旧版本暂时不 下线

• 回滚不是即刻发 生的



极速回滚

• 1小时到30秒





第30页

总结与展望

应用部署方式和思考维度的改变 合并部署与性能提升 多版本部署与发布提速 模块化应用的支持 高密度部署





第31页

29



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。