【实践篇】一次Paas化热部署实践分享 | 京东云技术团队
前言
本文是早些年,Paas化刚刚提出不久时,基于部门内第一次Paas化热部署落地经验所写,主要内容是如何构建一些热部署代码以及一些避雷经验。
一、设计-领域模型设计
1.首先,确定领域服务所属的领域
2.其次,确定垂直业务身份
3.再次,提炼领域能力及扩展点
【实际工作中,我们已经把下面这个图作为领域服务设计文档进行了留存,用Paas化的方式实现需求,代码分布在中台、各个前台,所以整体管理代码就需要以文档形式进行统一记录,不然随着时间流逝,开发人员就无法全盘管理代码了】
二、代码结构设计
1.中台-扩展点jar
2.中台 - 领域服务、领域能力、水平实现
3.前台-由中台人员管理的前台包工程示例
4.前台-包内结构示例
5.前台-打包和部署的一些注意点
1.热部署jar包要打fat jar;
2.前台包jar上线版本只能打release版本,而且要注意版本管理
3.matrix-ext.json文件最好在前台中进行保留,实际热部署只需要在cjg部署时写明即可
4.biz-module.json文件是前台包调用外部jsf接口的配置文件,最好在前台包中也保留一份,便于代码管理
5.前台包调用外部jsf接口时,中台需要在cjg我的应用增加对应接口的允许权限,不然调用会报错
6.前台包中完全使用水平实现,无前台个性化实现是,也需要写一个占位的假实现类,不然热部署会报找不到实现类而失败
7.matrix2-core不要放到扩展点jar中,建议只放在中台应用中,不然会出现中台实际依赖到低版本matrix.jar的问题
三、部署流程
一、建应用:能力发布->我的应用->新增
二、中台应用发布:正常发布中台工程
三、创建水平业务身份:能力发布->我的水平业务身份->创建水平业务身份->审批
四、申请/创建垂直业务身份
五、垂直身份申请使用水平身份:能力集成->垂直业务身份->水平业务身份->申请使用-审批
六、需求能力拆解:能力集成->需求能力拆解->需求拆解
七、发布垂直业务包:能力集成->垂直业务身份->业务包->新增业务包/业务包详情->按流程走即可
四、踩坑和一些经验总结
1、水平业务身份抽取,先明确的抽取垂直,再从垂直的实现里抽取水平
2、前中台部署执行逻辑,未命中垂直身份,直接执行默认逻辑,命中垂直身份,根据matrix-ext.json执行
3、垂直业务包中未实现任何扩展点时,热部署无法发布,需要写一个默认占位实现
4、垂直业务包只能发布,没有下线功能
5、中台 – deployGroupName可以搭配预发分组、线上分组进行使用,可以用来区分环境,也可以用来区分机房
6、前台 – 前台调用JSF接口时,仅支持“serialization”:“hessian”模式,使用时最好都显式加上
7、热部署中台分组中的一台机器,此时其他中台机器冷启动,则冷启动机器执行最新版本的垂直业务包
8、由于matrix框架的实现方式是将前台包加载到中台应用的BizClassLoader中,不同的垂直业务身份之间对于类的相同的全限定名是隔离的,但是与中台本身的AppClassLoader是共同工作的,所以如果垂直业务包中存在与中台包中类全限定名一致的代码,就会出现各种异常,例如:
【ClassCastException: com.jd.ofw.opi.ws.jsf.Result cannot be cast to com.jd.ofw.opi.ws.jsf.Result】
【IllegalArgumentException: object is not an instance of declaring class】
等等,解决方法也比较简单,只需要在中台的藏经阁配置文件的exportClassConfig中增加对应的包路径的排除配置,这样就屏蔽了所有前台包的重名类,就能正常执行了。
作者:京东零售 姜波
来源:京东云开发者社区 转载请注明来源
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Databend + lakeFS:将数据版本控制嵌入你的分析工作流
作者:尚卓燃(PsiACE) 澳门科技大学在读硕士,Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer https://github.com/PsiACE 云计算为以数据为中心的应用提供了廉价、弹性、共享的存储服务,这为现代数据处理工作流提供了显而易见的好处:海量数据、高并发访问、大吞吐量,越来越多的案例开始将旧有的技术栈向数据湖架构进行迁移。 当我们将数据湖置于云端之后,新的问题随之而来: 旧有的数据仓库/大数据分析技术可能并不是专为云和对象存储设计的,性能和兼容性可能不太理想,需要投入大量的资源进行维护,如何为数据湖提供真正现代的、低成本、高性能、高质量的分析服务? 对数据管理的需求仅一步加强,对分析结果的可复现性、数据源的可共享性提供了更高的要求,如何为数据提供弹性和可管理性,让数据科学家、数据分析师和数据工程师在逻辑一致的视图下紧密协作? 有问题,就会有答案! Databend 基于云上的对象存储打造了真正跨云且原生的数据仓库。采用 serverless 理念设计,提供分布式、弹性可拓展、运维方便的高性能查询引擎,支持常...
- 下一篇
jar包的精细化运营,Java模块化简介 | 京东云技术团队
图:模块化手机概念 一、什么是Java模块化 Java模块化(module)是Java9及以后版本引入的新特性。 官方对模块的定义为:一个被命名的,代码和数据的自描述集合。( the module, which is a named, self-describing collection of code and data)。 早在Java7的时候就被提出,但由于其复杂性,不断跳票,直到Java9才有,那么Java模块化到底是什么,在实际开发中又有什么用呢? 简单来说,就是把jar进一步掰碎。 一个jar可以有多个module,一个module可以有多个package。 从代码结构上看,jar > module > package > class/interface。 那么怎么掰碎Jar包呢? Java从自身做了一个典范,把JDK里面大部分Jar都掰成了一个个module JDK1.8结构: JDK17将其拆成一个一个jmod: 而且,官方提供了文档对每一个模块进行了介绍: 模块 描述 java.base 定义 Java SE 平台的基础 API。 java.compi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,8上快速安装Gitea,搭建Git服务器