袋鼠云平台代码规范化编译部署的提效性改进实践

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 在大型客户场景下,经常面临着增量产品包内存过大影响平台部署效率的问题,袋鼠云从平台对编译策略的优化出发,结合内部产品包出包优化探索,来探讨如何在增量策略下,更优的解决产品包的内存大小问题,以解决增量升级的效率性。想知道袋鼠云具体是怎么做的吗?欢迎点击下文了解详情

一、前言
作为全链路数字化技术与服务提供商,袋鼠云提供了从数据湖、大数据基础平台、离线开发、实时开发、数据服务、数据治理、指标管理、客户数据洞察、数据孪生可视化等全产品体系的服务。

image.png

围绕着 “行业应用” 及 “通用应用”,袋鼠云聚焦数智提供全维数字解决方案,帮助企业实现降本增效、快捷转型,迄今为止袋鼠云已服务超过 5000 家的客户。

面对如此庞大的客户,平台需要不断更新迭代,以适应最新的产品特性,给客户呈现更完备的功能,以达到客户使用平台的极佳体验效果。

为了高效部署和监控袋鼠云平台中的各个产品,袋鼠云自研了新产品大数据基础平台 EasyMR,提供快速构建和运维大数据集群的能力,帮助提升大数据平台运维与交互能力。平台层的代码在面向客户升级部署时,需要定义标准化打包规范,以快速和标准化的输出平台层面代码的标准包,借助于大数据基础平台 EasyMR,可进行一站式产品包服务的部署、升级、卸载、配置等操作,解放人工运维的成本。

在 ToB 的客户环境下,我们需要考虑从产品功能迭代到运维出包再到部署的提效优化。面对大型客户的场景,局域网化的部署必然涉及到平台增量包的传输大小限制,特别是在不断增量部署的情况下,客户需要不断审核产品包,而又因为产品包过大而耗费大量时间,大大影响了平台部署产品的效率

基于产品包内存过大影响平台部署效率的问题,袋鼠云技术团队不断探索实践,从平台对编译策略的优化,结合袋鼠云内部产品包的出包优化,来探讨如何在增量策略下,更优的解决产品包的内存大小问题,以解决增量升级的效率性。

二、代码编译优化策略
1、编译
袋鼠云平台层代码使用 java 开发语言,基于 maven 的 module 进行各个平台产品的模块划分,平台层关注的是代码层面功能性,产品的编译包通常基于简单的如:

image.png

编译方式,通过内部的 maven-shard-plugin 插件编译 executable shard jar。

maven-shade-plugin 内含有大量的资源转换器(Resource Transformers),可以通过追加的策略来避免因不版本相同属性资源的覆盖错误。

官方参考文档:

https://maven.apache.org/plugins-archives/maven-shade-plugin-3.3.0/examples/resource-transformers.html#AppendingTransformer

image.png

2、产品包
运维基于平台编译的可执行的 jar 包例如:

{project.name}-{project-version}-jar-with-dependency.jar

需要整合 shell 启停脚本和配置资源以及 sql 等输出标准的适配 EasyMR 部署的标准 tar 包,大致的整个平台编译的策略如下图:

image.png

通过上面的编译到产品包的具体步骤,我们会发现,平台层通过 maven-shade-plugin 编译为一个 executable shard jar 的策略下,我们可以思考下面几个问题:

漏洞修复

增量发布包的 tar 包大小

平台与 EasyMR 的直接联通

● 漏洞修复问题
针对这个问题,目前的编译策略无法解决,只能在面对客户漏洞修复的场景下,将整体 shade jar 做整体产品部署包输出,进行全量升级来解决。

● 增量发布包的 tar 包大小问题
针对这个问题:通过编译可执行 jar 包的策略,即依赖 jar 和平台自身 jar 编译为一个整体的 jar 包的策略是无法解决最小代价的增量升级一个单一 jar 的问题,该问题势必会导致在 toB 客户升级场景下的增量 jar 升级的传包大小的问题。实际上在增量升级的策略下,对于不变的 jar 包无需做升级替换,对可变的 jar 包才需要做增量升级替换。

● 平台与 EasyMR 的直接联通的问题
目前平台基于 EasyMR 部署的策略下,还需要通过运维层去出标准的产品包,这个内部无形增加了开发到部署的能力,未来平台会基于 EasyMR 的标准打包规范,直接能够联通 EMR 做标准产品 tar 的产品包编译。

本文主要针对目前平台的第一个问题,即通过拆分平台产品层面的的自身 jar 和第三方依赖 jar 的策略来解决。

三、优化策略设计原则
1、规范目录
基于拆分各个平台自身的 jar 和第三方依赖的 jar 的原则,我们可以约定平台层输出的编译包的制定统一路径,以便运维统一路径下的产品包的输出。

image.png

规范化的编译指定目录,将对于的平台服务层面的配置文件、脚本、依赖等相关的核心内容进行目录拆解,这个也是平台层面去统一抽离编译目录的核心部分。

2、平台编译
基于规范化的编译目录的制定,我们通过 assembly maven:

(https://maven.apache.org/plugins-archives/maven-assembly-plugin-LATEST/examples/single/including-and-excluding-artifacts.html)

做指定依赖包的隔离,最终通过 java -cp CLASSPATH 类加载器加载路径策略将对应的不同隔离 jar 加载到类加载器中。例如:

image.png

3、增量策略
全量包策略下,目录下的 lib 和 dtstack 都需要加载到对应的 classpath 下。

下面分析在增量出包的前提下,一种基于项目为纬度产品出包策略:

image.png

即:基于客户 A 出增量包场景下,对于下次的增量升级策略下,我们可以通过 MD5 增量比对上次系统出包的 lib/dtstack 依赖的 md5 值,增量打包变更 / 新增的 jar 包。

基于增量打包的策略能更细粒度的对于升级包的大小和增量升级的维护,需要注意的是,系统运维出包需要维护当前内部 jar 包的 md5 值,以作为下次增量产品包输出的依据。

四、总结
基于规范编译目录到平台编译策略的小优化小改造,再到从增量的角度去探讨增量包的出包策略,我们可以均衡的抽离出平台自研的 jar 包和平台依赖的 jar 包。

基于此我们能够为未来更细粒度的升级和部署运维袋鼠云平台产品打下基础,同时也是在 toB 场景下,对于运维部署效率的小提升。无论从引擎层面,平台层面或者是运维层面,袋鼠云持续的产品迭代以及功能特定的增强都是为了面向客户达到更好的运维,部署,以及平台使用的最好的体验。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
网络协议 Linux 网络安全
openstack 云平台一体化部署(超详细)
openstack 云平台一体化部署(超详细)
1349 0
openstack 云平台一体化部署(超详细)
|
2月前
|
Cloud Native 持续交付 云计算
云端新纪元:探索云原生技术的奥秘在当今数字化时代,云计算已成为推动企业创新和增长的关键动力。随着云平台的不断成熟,云原生技术应运而生,以其独特的优势引领着一场新的技术革命。本文将深入探讨云原生的核心概念、主要特点以及它如何改变现代软件开发和部署的方式,为您揭开云原生这一神秘面纱。
云原生是一种构建和运行应用程序的方法,充分利用了云平台的弹性、分布式本质以及声明式基础设施。本文将解析云原生的十二要素,微服务架构的优势,以及容器化、持续集成与持续部署(CI/CD)等核心技术的实践应用。通过深入浅出的方式,让读者理解云原生不仅是一种技术,更是一种文化和方法论,它正在重塑软件开发流程,提高资源利用率和应用系统的可扩展性与容错性。
|
7月前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用构建高效云原生应用:云平台的选择与实践
【5月更文挑战第31天】 随着人工智能技术的飞速发展,深度学习已经成为推动计算机视觉进步的关键力量。特别是在图像识别领域,通过模仿人脑处理信息的方式,深度学习模型能够从大量数据中学习并识别复杂的图像模式。本文将探讨深度学习技术在自动驾驶系统中图像识别方面的应用,重点分析卷积神经网络(CNN)的结构与优化策略,以及如何通过这些技术提高自动驾驶车辆的环境感知能力。此外,文章还将讨论目前所面临的挑战和未来的研究方向。
|
7月前
|
人工智能 监控 数据可视化
Java智慧工地云平台源码带APP SaaS模式 支持私有化部署和云部署
智慧工地是指应用智能技术和互联网手段对施工现场进行管理和监控的一种工地管理模式。它利用传感器、监控摄像头、人工智能、大数据等技术,实现对施工现场的实时监测、数据分析和智能决策,以提高工地的安全性、效率和质量(技术架构:微服务+Java+Spring Cloud +UniApp +MySql)。
138 4
|
NoSQL 关系型数据库 MySQL
Redis私有云平台-Cachecloud安装和部署手册
Redis私有云平台-Cachecloud安装和部署手册
|
消息中间件 SQL 存储
37手游基于云平台的大数据建设实践
37手游大数据平台资深开发工程师史飞翔在实时数仓 Workshop 广州站的演讲。
37手游基于云平台的大数据建设实践
|
7月前
|
传感器 人工智能 监控
【Java】智慧工地云平台源码-支持私有化部署+硬件设备
【Java】智慧工地云平台源码-支持私有化部署+硬件设备
51 0
|
机器学习/深度学习 运维 Dubbo
全国首个政企采购云平台:政采云基于 Dubbo 的混合云跨网方案实践
Apache Dubbo 是一款易用、高性能的 WEB 和 RPC 框架,同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。
346 3
全国首个政企采购云平台:政采云基于 Dubbo 的混合云跨网方案实践
|
开发框架 负载均衡 小程序
一款针对中小学研发的智慧校园云平台源码 SaaS私有云部署模式
系统后台采用Java开发语言,前端采用VUE开发框架 2、系统采用微服务springcloud架构的作为后台服务器架构 3、系统支持搭建开发具备服务注册发现、客户负载均衡、服务间通信的微服务架构 4、系统支持使用SpringCloud Eurek、SpringCloud Ribbon、restTemplate 等组件进行开发 5、数据库MySQL5.7 6、移动端小程序使用小程序原生语言开发 7、电子班牌固件安卓7.1;使用Java Android原生 8、elmentui ,Quartz,jpa,jwt
243 0
一款针对中小学研发的智慧校园云平台源码 SaaS私有云部署模式
|
小程序 安全 Java
智慧校园电子班牌系统全套源码,前后端分离架构,SaaS云平台,私有云部署
智慧校园电子班牌系统全套源码包含:电子班牌管理系统、成绩管理系统、考勤人脸刷卡管理系统、综合素养评价系统、请假管理系统、电子班牌发布系统、校务管理系统、小程序移动端、教师后台管理系统、SaaS运营云平台。 前后端分离架构,SaaS云平台,私有云部署。 1、使用springboot框架Java+vue2 2、数据库MySQL5.7 3、移动端小程序使用小程序原生语言开发 4、电子班牌固件安卓7.1;使用Java Android原生 5、elmentui ,Quartz,jpa,jwt
244 0
智慧校园电子班牌系统全套源码,前后端分离架构,SaaS云平台,私有云部署