【实践篇】一次Paas化热部署实践分享

京东云开发者
• 阅读 53

作者:京东零售 姜波

前言

本文是早些年,Paas化刚刚提出不久时,基于部门内第一次Paas化热部署落地经验所写,主要内容是如何构建一些热部署代码以及一些避雷经验。



一、设计-领域模型设计

1.首先,确定领域服务所属的领域

【实践篇】一次Paas化热部署实践分享

2.其次,确定垂直业务身份

【实践篇】一次Paas化热部署实践分享

## 3.再次,提炼领域能力及扩展点

【实际工作中,我们已经把下面这个图作为领域服务设计文档进行了留存,用Paas化的方式实现需求,代码分布在中台、各个前台,所以整体管理代码就需要以文档形式进行统一记录,不然随着时间流逝,开发人员就无法全盘管理代码了】

【实践篇】一次Paas化热部署实践分享

二、代码结构设计

1.中台-扩展点jar

【实践篇】一次Paas化热部署实践分享

2.中台 - 领域服务、领域能力、水平实现

【实践篇】一次Paas化热部署实践分享

3.前台-由中台人员管理的前台包工程示例

【实践篇】一次Paas化热部署实践分享

4.前台-包内结构示例

【实践篇】一次Paas化热部署实践分享

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的问题 【实践篇】一次Paas化热部署实践分享

【实践篇】一次Paas化热部署实践分享

三、部署流程

藏经阁URL:http://cjg.jd.com/web

一、建应用:能力发布->我的应用->新增

二、中台应用发布:正常发布中台工程

三、创建水平业务身份:能力发布->我的水平业务身份->创建水平业务身份->审批

四、申请/创建垂直业务身份: https://cf.jd.com/pages/viewpage.action?pageId=274946163

五、垂直身份申请使用水平身份:能力集成->垂直业务身份->水平业务身份->申请使用-审批

六、需求能力拆解:能力集成->需求能力拆解->需求拆解

七、发布垂直业务包:能力集成->垂直业务身份->业务包->新增业务包/业务包详情->按流程走即可



四、踩坑和一些经验总结

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

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
NB
该部分分享的是物联网各垂直应用领域里,NBIoT技术的部署,看看适合NBIoT技术的垂直应用场景有哪些?垂直应用服务商又该如何部署?1NBIoT适合的垂直应用场景有哪些?!(https://oscimg.oschina.net/oscnet/7c6f57c0fb1d2ca73fbee60ac13d31bf20f.jpg)
Stella981 Stella981
3年前
Spring Boot(十三):实现热部署
一、前言在实际开发过程中,每次修改代码就得将项目重启,重新部署,对于一些大型应用来说,重启时间需要花费大量的时间成本。对于一个后端开发者来说,重启过程确实很难受。在java开发领域,热部署一直是一个难以解决的问题,目前的java虚拟机只能实现方法体的热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。!(htt
【实践篇】一次Paas化热部署实践分享 | 京东云技术团队
前言本文是早些年,Paas化刚刚提出不久时,基于部门内第一次Paas化热部署落地经验所写,主要内容是如何构建一些热部署代码以及一些避雷经验。一、设计领域模型设计1.首先,确定领域服务所属的领域2.其次,确定垂直业务身份3.再次,提炼领域能力及扩展点【实际工
京东云开发者 京东云开发者
11个月前
聊一聊大模型 | 京东云技术团队
本文对大模型从原理及结构上做了简单的介绍,希望能给各位在了解大模型的路上提供一些帮助。个人经验有限,说的不对的地方还请及时提出宝贵的意见,也可以联系本人线下讨论。下期会结合我们在财富领域训练大模型的经验写一篇偏实践的文章出来。
爱学it学无止境 爱学it学无止境
4个月前
Go 开发者的涨薪通道:自主开发 PaaS 平台核心功能无密分享
PaaS:云计算服务中的平台即服务深度解析在云计算的广阔领域中,PaaS(PlatformasaService,平台即服务)作为一种重要的服务模式,正逐步成为企业数字化转型的关键推手。PaaS位于IaaS(基础设施即服务)和SaaS(软件即服务)之间,为开
京东云开发者 京东云开发者
3个月前
电商搜索革命:大模型如何重塑购物体验?
自我介绍:京东零售搜推算法部算法工程师,专注于大模型技术以及在AI助手搜推等领域的应用探索和实践。在AI助手,NLP和搜索领域有十多年研发实践经验,在AI/NLP领域申请超过15项发明专利并出版两部著作。随着电商行业的蓬勃发展,搜索技术作为连接用户与商品的
京东云开发者 京东云开发者
2个月前
京东广告投放平台整洁架构演进之路
作者:京东零售赵嘉铎前言从去年开始京东广告投放系统做了一次以领域驱动设计为思想内核的架构升级,在深入理解DDD思想的同时,我们基于广告投放业务的本质特征大胆地融入了自己的理解和改造。新架构是从设计思想到落地框架都进行了彻底的革新,涉及内容比较多,因此我们希
京东云开发者 京东云开发者
1个月前
【理论篇】关于聚合根,领域事件的那点事---深入浅出理解DDD
作者:京东物流赵勇萍前言最近有空会跟同事讨论DDD架构的实践落地的情况,但真实情况是,实际中对于领域驱动设计中的实体,值对象,聚合根,领域事件这些战术类的实践落地,每个人理解依然因人而异,大概率是因为这些概念还是有一些抽象,同时有有别于传统的MVC架构开发
京东云开发者 京东云开发者
1星期前
探索设计稿自动生成Flutter代码的技术方案
作者:京东物流冷先锋近年来,随着人工智能和大模型技术的发展,设计稿(UI视图)自动生成代码的技术也在不断进步。本文将探讨几家知名企业在这一领域的探索和实践,包括美团、京东、微软等,以及一些常见的工具和方法,最后尝试大模型生成flutter代码在项目中的实践
精彩分享 | 欢乐游戏 Istio 云原生服务网格三年实践思考
作者吴连火,腾讯游戏专家开发工程师,负责欢乐游戏大规模分布式服务器架构。有十余年微服务架构经验,擅长分布式系统领域,有丰富的高性能高可用实践经验,目前正带领团队完成云原生技术栈的全面转型。导语欢乐游戏这边对istio服务网格的引进,自2019开始,从调研到规模化落地,至今也已近三年。本文对实践过程做了一些思考总结,期望能给对网格感兴趣的同学们以参考