【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践
对于公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我。以下是阿里对公开课的整理
摘要: 在首届阿里巴巴在线峰会上,阿里巴巴中间件技术部专家魏鹏为大家带来了题为《基于Java容器的多应用部署技术实践》的分享,主要分享内容首先是阿里Java容器的发展历程,接着与大家分享目前Java容器的基础架构,最后与大家探讨经过这样的改变之后,它能够完成的一些高阶的特性。
本文首先向大家介绍阿里Java容器的发展历程,整个Java容器从开始到现在经历了哪些阶段,接着给大家分享目前Java容器的基础架构,最后与大家探讨经过这样的改变之后,它能够完成的一些高阶的特性,比如合并部署和多版本部署等对于我们的效率提升有明显的帮助的技术。
以下为整理内容:
阿里Java容器的发展历程
阿里巴巴在开始阶段,就像普通的网站一样,通过前端的http的流量进来完成数据库的查询、调用,然后把数据反馈回去。当网站变得很大的时候,不能再像过去一样,只是通过单个系统就能够完成多个业务功能,我们需要把系统做拆分,服务化就是必由之路,Java容器诞生于服务框架的编写过程中,随着阶段不断的向前演进,陆续接入了很多其它的中间件,整个过程升级非常便利,直接替换部署的目录即可完成升级。阿里系发展迅猛,我们也将面临一些挑战,比如网站的链路越来越长,调用错综复杂,怎样通过应用容器的部署方式的改变使我们的性能提升,这是容器需要考虑的问题。
容器架构
Java容器的标准架构如图所示,在应用容器Tomcat基础上,我们抽象出一套Java容器,可以理解为在Tomcat中的一个固定子系统,在这个子系统中,我们会切割出两块内容,一是容器,一是插件,服务框架、消息组件、配置组件等都是按照标准的方式接入进去,都被封闭在自己的类加载器中,不会和应用之间产生冲突,这样就使得各个中间件的发展不会受制于其它中间件版本的选择。同时,容器会提供这些插件标准的部署方式、生命周期和事件体系,使得中间件的起停能够被我们所控制,这些中间件能够知道应用的上下线的一些过程,使得整个中间件和应用的关系变得更加自然。任何的插件都可以轻松的接入到整个容器体系中,把这些能力带给应用。
合并部署
横轴代表规模,纵轴代表部署复杂度,部署复杂度其实是人为造成的,用户可能把公司内部的应用割裂成多个,每个需要完成不同的工作,这种逻辑应用数量的上升必然会造成部署复杂度会变得很高。当应用变得复杂后,公司的业务提升了,就会引入服务的概念,我们需要把不同的业务进行拆分,机器数量就会相应变多,应用数也会增加。用户依然去访问页面,但可能穿过很多系统,这就需要远程调用,远程调用把两个系统进行连接去满足用户的请求,这样的结构确定后,它的规模会不断的向上攀升,会变得更加复杂,用户请求会随着网站规模的不断扩大,导致用户的请求离实际的数据源越来越远,远程调用在任何一个点都是不可靠的,用户在这个过程中承担的失败的概率会越来越高,访问的速率会越来越慢。
那么,怎样改变这个状况呢?我们可以在部署时利用Java容器把不同的应用部署在一起,是否会有效果呢?
确定优化路径
我们的核心链路是确定的,不论你的网站多大,真正用户去访问的系统的某一个功能是非常火热的,在核心链路中热点也是已知的,最关键的是我们的流量入口是固定的,从流量入口下手,优化核心链路中的热点线路。
核心链路上强相关的多应用部署
左侧是传统的样方式,前台应用、服务应用A和服务应用B都是通过远程调用来连接的。多应用部署的方式就是把这些在开发带是不同隔离的应用在部署时放在同一个JVM去做,放在一起后就把整个系统的远程调用转化成本地调用,这个过程就是服务框架能够根据Java容器提供的信息完成调用方式的转变,把不同的强关联的应用部署在同一个Java容器里,使得整个流程更加的顺畅。
远程调用转本地调用
容器提供给服务框架当前部署的应用信息,调用时“查表”,当进行调用时,首先看调用的服务在本地是否有另外一个应用提供,如果有则不进行网络调用,直接把对应参数进行转移完成本地调用;如果没有,就从远端随机选一个地址发起远程调用。本地调用需要进行“深拷贝”。
“深拷贝”
我们需要将我们去请求一个应用的参数转化成另外一个类加载器能消化的数据,同时要把反馈回的数据消化成本加载器能够理解的数据,这个过程称为深拷贝。
深拷贝的性能对比可以看出,深拷贝的耗时平均只有Hessian的15%,并且没有统计网络开销。面对越来越大的数据结构,深拷贝的优势会愈加明显。
合并部署的效果
越来越多的访问数据来自于无线,可以看出QPS提升超过50%,数据越大提升越发明显。合并部署后性能衰减不是很明显,趋势非常柔性。
实际情况来看,Rt下降了50%,毛刺基本消失,链路更加平稳。
合并部署带来了什么
合并部署技术降低了成本,使相同的机器提供更大的数车,不需要增加机器。成本的降低也就意味着性能的提升,RT下降明显。
多版本部署
发布的本质即重启,那么,能不能不重启就发布呢?运用多版本部署方式能够避免用户进行重启。将两个版本的应用都部署到容器中后,对外提供服务的链接是不断的,对外提供的HTTP流量、TomCat流量是不变的,远程服务框架、消息处理也是不变的,当外界给予切流命令的时候,就把对应的旧版本的处理逻辑向新有版本进行跃迁,就完成对应版本的发布了,整个过程是非常流畅、柔性的。
事件体系
如果高维度的组件不去释放掉对应的应用和扩展,对应的应用资源就没有办法释放,同一个应用的多个版本都在一个机器上运行着,此时我们通过事件体系来解决这个问题。
通过响应事件来释放资源,事件类型有:应用部署事件、应用退部署事件、流量关闭事件、流量开启事件。
容器不仅提供了多应用的部署能力,同时把事件做了一定的统一的抽象,事件能够直达所有的中间件,所有的中间件都会去响应容器发布的事件,我们会告诉所有中间件,某个应用上线了或者下线了,流量开始进入或者切出应用,这些事件的发送,使得中间件可以从容的响应所有的变更。
多租户JVM
Java容器能够做到类型隔离,却做不到资源隔离,我们需要完成对应的资源的隔离,CPU、内存、I/O带宽等都需要隔离。怎么办呢?
阿里特有的多租户JVM,支持多租户部署的AliJDK,包含多租户API,创造一个独立的容器,在这个容器里面的资源是隔离的,在这个隔离的区域纵使出现内存泄漏,也不会影响到另外一个区域,在这个区域运作的CPU的消耗也不会影响到另一区域对应的执行逻辑,这就完成多版本部署里的资源隔离需要使用的技术。
依靠Tenant做到资源隔离。
- Context对应Webapp
- Tenant中创建Context
- 销毁Context时销毁Tenant
多版本部署带来了什么
- 发布速度非常快:实现了全量发布,自由切流。
- 秒级回滚:旧版本暂时不下线,极速回滚。
总结与展望
- 多应用部署是我们在应用部署方式和思考维度的改变。
- 通过合并部署把链路上强相关的应用进行部署后,使得性能有所提升。
- 多版本部署与发布提速。
- 模块化应用的支持。
- 高密度部署。
参考:https://yq.aliyun.com/articles/57826
【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践的更多相关文章
- 基于Java语言开发jt808、jt809技术文章精华索引
很多技术开发人员喜欢追逐最新的技术,如Node.js, go等语言,这些语言只是解决了某一个方面,如只是擅长异步高并发等等,却在企业管理后台开发方面提供的支持非常不够,造成项目团队技术选项失败,开发后 ...
- 《CNCF × Alibaba云原生技术公开课》知识点自测(二):容器基本概念
(单选)1.已运行 docker run -d -t —name demo ubuntu top 和 docker run --name demo-x --pid container:demo ubu ...
- 自己开发的在线视频下载工具,基于Java多线程
比如这个在线视频: 我们可以正常播放,但是找不到下载按钮. 打开Chrome开发者工具,在Network标签页里能看到很多网络传输请求: 随便看一个请求的响应,发现类型为video,大小为500多k. ...
- struts采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架
今天我用Ecipse搭建Struts框架,并且使用Struts框架编写一个最简单的例子,相信读者能够很容易的明白. Struts是当今Java比较流行的三大框架之一,三大框架是Struts,sprin ...
- 课程设计-基于SSM的在线课程教学系统代码-基于java的线上课程资源共享论坛系统
注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架:SSM 前端框架:vue 数据库:MySQL 设计模式:MVC 架构:B/S 源码类型: Web 编 ...
- 首届阿里巴巴在线技术峰会,9位大V演讲整理!
https://yq.aliyun.com/articles/57826 感谢参加阿里巴巴在线技术峰会.7月19日的3场专家分享:Blink.Docker.电商互动:7月20日的云数据库十大经典案 例 ...
- 活动招募 HUAWEI HiAI公开课·北京站-如何在4小时把你的APP变身AI应用
人工智能和机器学习是全球关注的新趋势,也是当前最火爆.最流行的话题.当你拿手机用语音助手帮你点外卖,智能推荐帮你把周边美食一网打尽:当你拿起P20拍照时,它将自动识别场景进行最美优化,让你成为摄影大师 ...
- WOT2016大数据技术峰会——千人技术盛宴
WOT2016大数据技术峰会是一场聚焦大数据领域最前沿的的技术及经验分享.2016年11月25-26日北京粤财JW万豪酒店如约而至,会议规模达到1000人! 由51CTO主办的千人技术盛宴--WOT2 ...
- 【公开课】【阿里在线技术峰会】何登成:AliSQL性能优化与功能突破的演进之路
MySQL的公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 本文根据阿里高级数据库专家何登成在首届阿里巴巴在线技术峰会上的分享整理而成.他主要介 ...
随机推荐
- Programming In Scala笔记-第十九章、类型参数,协变逆变,上界下界
本章主要讲Scala中的类型参数化.本章主要分成三个部分,第一部分实现一个函数式队列的数据结构,第二部分实现该结构的内部细节,最后一个部分解释其中的关键知识点.接下来的实例中将该函数式队列命名为Que ...
- 自定义View实现五子棋游戏
成功的路上一点也不拥挤,因为坚持的人太少了. ---简书上看到的一句话 未来请假三天顺带加上十一回家结婚,不得不说真是太坑了,去年婚假还有10天,今年一下子缩水到了3天,只能赶着十一办事了. 最近还在 ...
- 深入了解UIViewController控制器与对应的View类的详解
ViewController是iOS开发中MVC模式中的C(视图控制器),ViewController是view的controller,ViewController的职责主要包括管理内部各个view的 ...
- SQLite Select 语句(http://www.w3cschool.cc/sqlite/sqlite-select.html)
SQLite Select 语句 SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据.这些结果表也被称为结果集. 语法 SQLite 的 SELECT ...
- UE4 读取本地图片
参考链接:https://answers.unrealengine.com/questions/235086/texture-2d-shows-wrong-colors-from-jpeg-on-ht ...
- 用Maven打包成EAR部署JBoss
基于原理的架构里面,考虑这次升级版本,可谓是一步一个脚印的向上走啊,可以说步步为坎,别人的知识,和自己的知识,相差很多啊,什么都懂点,但是具体没有使用,就理解不深刻了,心有余而力不足,所以一切我们自己 ...
- Spring Boot微服务架构入门
概述 还记得在10年毕业实习的时候,当时后台三大框架为主流的后台开发框架成软件行业的标杆,当时对于软件的认识也就是照猫画虎,对于为什么会有这么样的写法,以及这种框架的优势或劣势,是不清楚的,Sprin ...
- Android JavascriptBridge 详解(二)
原文出自:http://blog.csdn.net/sk719887916/article/details/47189607 Android开发目前现状来说,开发者大部分时间花在UI的屏幕适配上,使用 ...
- Linux系统调用的实现机制分析
API/POSIX/C库的关系 系统调用的实现 3.1 系统调用处理程序 添加新系统调用 给Linux添加一个新的系统调用是件相对容易的工作.怎样设计和实现一个系统调用是难题所在, ...
- CMake搜索Boost1.57失败及解决
CMake更新到3.1.0,Boost更新到1.57,结果CMake搜索Boost失败: Unable to find the Boost header files. Please set BOOS ...