【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践-阿里云开发者社区

开发者社区> 云栖小秘书> 正文

【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践

简介: 在首届阿里巴巴在线峰会上,阿里巴巴中间件技术部专家魏鹏为大家带来了题为《基于Java容器的多应用部署技术实践》的分享,主要分享内容首先是阿里Java容器的发展历程,接着与大家分享目前Java容器的基础架构,最后与大家探讨经过这样的改变之后,它能够完成的一些高阶的特性。
+关注继续查看

本文首先向大家介绍阿里Java容器的发展历程,整个Java容器从开始到现在经历了哪些阶段,接着给大家分享目前Java容器的基础架构,最后与大家探讨经过这样的改变之后,它能够完成的一些高阶的特性,比如合并部署和多版本部署等对于我们的效率提升有明显的帮助的技术。

直播视频:点此进入

PDF下载:点此进入

以下为整理内容:

 

阿里Java容器的发展历程

ce9f6acb50ed35d888826be03200a5fd0403e5d5

阿里巴巴在开始阶段,就像普通的网站一样,通过前端的http的流量进来完成数据库的查询、调用,然后把数据反馈回去。当网站变得很大的时候,不能再像过去一样,只是通过单个系统就能够完成多个业务功能,我们需要把系统做拆分,服务化就是必由之路,Java容器诞生于服务框架的编写过程中,随着阶段不断的向前演进,陆续接入了很多其它的中间件,整个过程升级非常便利,直接替换部署的目录即可完成升级。阿里系发展迅猛,我们也将面临一些挑战,比如网站的链路越来越长,调用错综复杂,怎样通过应用容器的部署方式的改变使我们的性能提升,这是容器需要考虑的问题。

 

容器架构

20ce3ad464d0b34c3ab859bc8fb5f34a111834cc

Java容器的标准架构如图所示,在应用容器Tomcat基础上,我们抽象出一套Java容器,可以理解为在Tomcat中的一个固定子系统,在这个子系统中,我们会切割出两块内容,一是容器,一是插件,服务框架、消息组件、配置组件等都是按照标准的方式接入进去,都被封闭在自己的类加载器中,不会和应用之间产生冲突,这样就使得各个中间件的发展不会受制于其它中间件版本的选择。同时,容器会提供这些插件标准的部署方式、生命周期和事件体系,使得中间件的起停能够被我们所控制,这些中间件能够知道应用的上下线的一些过程,使得整个中间件和应用的关系变得更加自然。任何的插件都可以轻松的接入到整个容器体系中,把这些能力带给应用。

 

合并部署

68dd17ddb6de2b2bfcd2c14c652c295cdee62e43

横轴代表规模,纵轴代表部署复杂度,部署复杂度其实是人为造成的,用户可能把公司内部的应用割裂成多个,每个需要完成不同的工作,这种逻辑应用数量的上升必然会造成部署复杂度会变得很高。当应用变得复杂后,公司的业务提升了,就会引入服务的概念,我们需要把不同的业务进行拆分,机器数量就会相应变多,应用数也会增加。用户依然去访问页面,但可能穿过很多系统,这就需要远程调用,远程调用把两个系统进行连接去满足用户的请求,这样的结构确定后,它的规模会不断的向上攀升,会变得更加复杂,用户请求会随着网站规模的不断扩大,导致用户的请求离实际的数据源越来越远,远程调用在任何一个点都是不可靠的,用户在这个过程中承担的失败的概率会越来越高,访问的速率会越来越慢。

那么,怎样改变这个状况呢?我们可以在部署时利用Java容器把不同的应用部署在一起,是否会有效果呢?

确定优化路径

我们的核心链路是确定的,不论你的网站多大,真正用户去访问的系统的某一个功能是非常火热的,在核心链路中热点也是已知的,最关键的是我们的流量入口是固定的,从流量入口下手,优化核心链路中的热点线路。

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

ca444ed529daee51acb43fa8a132e36bfbe04794

左侧是传统的样方式,前台应用、服务应用A和服务应用B都是通过远程调用来连接的。多应用部署的方式就是把这些在开发带是不同隔离的应用在部署时放在同一个JVM去做,放在一起后就把整个系统的远程调用转化成本地调用,这个过程就是服务框架能够根据Java容器提供的信息完成调用方式的转变,把不同的强关联的应用部署在同一个Java容器里,使得整个流程更加的顺畅。

远程调用转本地调用

03dbe60b0323434bb7885634f36a351e37280fd2

容器提供给服务框架当前部署的应用信息,调用时“查表”,当进行调用时,首先看调用的服务在本地是否有另外一个应用提供,如果有则不进行网络调用,直接把对应参数进行转移完成本地调用;如果没有,就从远端随机选一个地址发起远程调用。本地调用需要进行“深拷贝”。

“深拷贝”

我们需要将我们去请求一个应用的参数转化成另外一个类加载器能消化的数据,同时要把反馈回的数据消化成本加载器能够理解的数据,这个过程称为深拷贝。

f319151e5444a85432040b330328fedf1569d52c

深拷贝的性能对比可以看出,深拷贝的耗时平均只有Hessian的15%,并且没有统计网络开销。面对越来越大的数据结构,深拷贝的优势会愈加明显。

合并部署的效果

fcdab2783397a33d45db2e8e8d29ceb0f74747b4

越来越多的访问数据来自于无线,可以看出QPS提升超过50%,数据越大提升越发明显。合并部署后性能衰减不是很明显,趋势非常柔性。

e68bd6948a189f679882332b39c4e4fbe9f6f673

实际情况来看,Rt下降了50%,毛刺基本消失,链路更加平稳。

合并部署带来了什么

合并部署技术降低了成本,使相同的机器提供更大的数车,不需要增加机器。成本的降低也就意味着性能的提升,RT下降明显。

 

多版本部署

534ecb1f49ce87f77f230612a93d6c15a3f26735

发布的本质即重启,那么,能不能不重启就发布呢?运用多版本部署方式能够避免用户进行重启。将两个版本的应用都部署到容器中后,对外提供服务的链接是不断的,对外提供的HTTP流量、TomCat流量是不变的,远程服务框架、消息处理也是不变的,当外界给予切流命令的时候,就把对应的旧版本的处理逻辑向新有版本进行跃迁,就完成对应版本的发布了,整个过程是非常流畅、柔性的。

事件体系

如果高维度的组件不去释放掉对应的应用和扩展,对应的应用资源就没有办法释放,同一个应用的多个版本都在一个机器上运行着,此时我们通过事件体系来解决这个问题。

8402c5b8362c7ed33e53c3d3eb5fa1d400fce880

通过响应事件来释放资源,事件类型有:应用部署事件、应用退部署事件、流量关闭事件、流量开启事件。

容器不仅提供了多应用的部署能力,同时把事件做了一定的统一的抽象,事件能够直达所有的中间件,所有的中间件都会去响应容器发布的事件,我们会告诉所有中间件,某个应用上线了或者下线了,流量开始进入或者切出应用,这些事件的发送,使得中间件可以从容的响应所有的变更。

多租户JVM

Java容器能够做到类型隔离,却做不到资源隔离,我们需要完成对应的资源的隔离,CPU、内存、I/O带宽等都需要隔离。怎么办呢?

5203c10433bde7e0d2b9f387900c0df86a857b5c

阿里特有的多租户JVM,支持多租户部署的AliJDK,包含多租户API,创造一个独立的容器,在这个容器里面的资源是隔离的,在这个隔离的区域纵使出现内存泄漏,也不会影响到另外一个区域,在这个区域运作的CPU的消耗也不会影响到另一区域对应的执行逻辑,这就完成多版本部署里的资源隔离需要使用的技术。

7afc74aa8c745cea84121a74a0bbcddef94abd20

依靠Tenant做到资源隔离。

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

多版本部署带来了什么

  • 发布速度非常快:实现了全量发布,自由切流。
  • 秒级回滚:旧版本暂时不下线,极速回滚。


总结与展望

  • 多应用部署是我们在应用部署方式和思考维度的改变。
  • 通过合并部署把链路上强相关的应用进行部署后,使得性能有所提升。
  • 多版本部署与发布提速。
  • 模块化应用的支持。
  • 高密度部署。

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

相关文章
在 Intellij IDEA 中部署 Java 应用到 阿里云 ECS
在 Intellij IDEA 中,部署 Java 应用程序到阿里云 ECS
18051 0
一文读懂阿里云直播技术是如何实现的
东京奥运会正如火如荼举行中,全球亿万观众蜂拥至各大转播平台观看奥运赛事,此时平台直播能力显的尤为重要。阿里云作为视频直播平台的技术提供商,凭借在产品技术、资源带宽、服务保障等方面优势,可为各大转播平台提供全链路技术支持和保障,确保极致观赛体验。下面,小编就带大家了解阿里云视频直播技术是如何实现的:
477 0
阿里园区生态技术联盟启动大会
2017年11月28-29日,来自全国六大城市的九位生态技术联盟成员齐聚阿里巴巴杭州西溪园区,开展启动大会。首届生态技术联盟成员有上海驻云信息科技、杭州数梦工场科技有限公司、杭州玳数科技有限公司、广东创云科技有限公司、四川捷云信通信息技术有限公司、天津云顶云科技有限公司、浙江卓见云科技有限公司、北京青苔数据科技有限公司、广州青莲网络科技有限公司。
2757 0
阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性| 9月9号栖夜读
今天的首篇文章,讲述了:如何治理测试稳定性问题?很多人会说:环境、流程管控、监控、工具化、加机器、专人负责、等等。这些都是对的。不过这些都是解决方案层面的,而不是方法论和理论体系层面的。今天,阿里研究员郑子颖来说说测试稳定性的三板斧。
3878 0
【阿里云资讯】Docker首个国内合作商,阿里云何以认定容器技术将成主流?
10月13日,在2016杭州·云栖大会上,全球知名的容器技术公司Docker与阿里云宣布达成战略合作,双方将在容器服务领域进行紧密合作,阿里云称其将为客户提供更加先进的云上应用管理服务。双方称在开源容器技术以及其发展方向共同努力,为客户提供本地化Docker的企业级支持和咨询服务。
4646 0
混合现实手术规划模拟系统——阿里云资源+MR技术在医疗行业的典型应用
混合现实手术规划模拟系统是一款主要用于外科手术方案规划和模拟的现代医学影像控制系统,以及与之配套的云服务平台和数据服务的总称。借助三维图像技术、混合现实技术、人机交互技术等一系列前沿计算机科技,将患者身体的各个组织、器官,以直观、准确的可视化三维图形呈现在混合现实设备中,并提供了一系列数字模拟工具,使手术医生可以在此数据的基础上,对即将进行的手术进行模拟,从而更好的制定手术方案并与他人交流沟通。
2925 0
谷歌助力,快速实现 Java 应用容器化
原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」。一群同频者,一起成长,一起精进,打破认知的局限性。 Google 在 2018 年下旬开源了一款新的 Java 工具 Jib,可以轻松地将 Java 应用程序容器化。
1172 0
阿里云弹性容器实例产品 ECI ——云原生时代的基础设施
本文介绍了弹性容器实例 ECI 的技术优势,特别介绍了 ECI 在弹性、Serverless、安全和易用性等方面技术上的方案和采取的优化措施。
5612 0
202
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载