当前位置: 首页 > news >正文

【实践篇】一次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中增加对应的包路径的排除配置,这样就屏蔽了所有前台包的重名类,就能正常执行了。

作者:京东零售 姜波

来源:京东云开发者社区 转载请注明来源

相关文章:

  • 图像切分:将一张长图片切分为指定长宽的多张图片
  • element-ui 表格 点击选中
  • 中文大语言模型汇总
  • 城市内涝解决方案:实时监测,提前预警,让城市更安全
  • ESXi配置两个不同网段虚拟机互通
  • 考研408-计算机网络 第一章-计算机网络体系结构学习笔记及习题
  • 工具介绍——第三方软件远程连接(工具:Rustdesk)
  • 长短期神经网络LSTM的博文分类,长短期神经网络的原理分析
  • 【开题报告】基于uniapp的在线考试小程序的设计与实现
  • Python武器库开发-常用模块之subprocess模块(十九)
  • 技术分享 | App常见bug解析
  • CVE-2023-34040 Kafka 反序列化RCE
  • 【GEE】7、利用GEE进行遥感影像分类【随机森林分类】
  • 10 路由协议:西出网关无故人,敢问路在何方
  • 2、Sentinel基本应用限流规则(2)
  • Linux下Jenkins自动化部署SpringBoot应用
  • Java - Hutool 获取 HttpRequest:Header、Body、ParamMap 等利器
  • WebSocket Day03 : SpringMVC整合WebSocket
  • 如何实现合同字段快速选择填充
  • Latex中摘要格式(无大标题)
  • 山西晋城一网红徒步野游线路据传发生驴友坠崖,当地已宣布封路
  • 复旦兼职教授高纪凡首秀,勉励学子“看三十年才能看见使命”
  • 交响4K修复版《神女》昨晚上演,观众听到了阮玲玉的声音
  • 复旦建校120周年大型义诊举行,百余名专家服务市民超三千人次
  • 见微知沪|科学既要勇攀高峰,又要放低身段
  • 网易有道一季度净利润同比增长247%:有能力在今年实现更强劲的利润增长