【实战总结】SpringMVC架构升级SpringCloudAlibaba

news/2025/2/22 8:54:17/

升级目标

SpringMVC+Dubbo+Zookeeper分布式架构改为Spring Cloud Alibaba微服务

技术框架:Spring Boot 2.7.2、Spring Cloud 2021.0.3 & Alibaba 2021.0.1.0

容器:Tomcat 9.0.65

JDK:1.8

配置中心:Nacos 2.0.4

消息队列:RocetMQ 4.9.3

配置中心:Apollo 11.0

缓存: Redis 4.0.14

接口服务:Swagger 3.0

数据源:Druid 支持多数据源,通过@Master和@Slave控制

远程调用:OpenFeign 11.8

APM工具:SkyWalking 9.2.0,包括分布式日志收集和链路追踪,性能指标分析和服务依赖分析等

升级背景

1. 产品方面:统一各系统框架和组件,封装通用功能,同时保持未来的高扩展性。Spring Cloud Alibaba生态更完善,功能更新更快,利于产品宣传,对产品进行长远布局。

2. 运维方面:提高部署和投产效率,目前架构与Docker、k8s集成不方便,Spring Cloud Alibaba天然支持CI、CD和Docker、k8s集成。

3. 业务方面:核心业务系统比较庞大,各模块耦合严重,不够灵活。考虑将按技术分层改为按业务领域拆分微服务,各微服务修改、部署互不影响,某个微服务停止服务不影响整体系统,容错性更高。

4. 架构设计:目前垂直架构存在弊端,重复代码多,系统间没有统一的注册中心,接口调用繁琐。Spring Cloud Alibaba统一使用Nacos集群注册中心,打破系统间壁垒。

升级原则

1. 所有架构设计以产品和业务为第一优先级,保证业务稳定、不受影响,同时提升系统性能和产品价值。

2. 以业务领域和业务量为基准拆分微服务。

3. 适当追新,新技术要适合业务和产品,并且收益大于成本可以考虑使用。

4. 尽量控制升级工作量。

5. 通用功能封装公共模块,避免重复造轮子。

架构图

升级收益

1.减少服务器成本。

2.视图层与业务层在同一个微服务,不再使用分布式调用,提高运行效率和可用性。

3.支持Docker、k8s运维管理。

升级步骤

1.pom依赖版本升级,解决jar包冲突,在root中统一维护依赖版本。

2.将SpringMVC XML配置文件修改为@Configration注入。

3.删除dubbo相关代码,将service服务作为依赖供web服务引用。

4.将log4j修改为logback,新增skywalking链路日志,并与logback集成。

5.ActiveMQ修改为RocketMQ。

6.新增异常统一处理、参数统一校验及日志切面。

7.兼容原Filter及Interceptor。

8.新增Swagger、Feign等。

9.将老旧的Redis客户端底层修改为RedisTemplate。

10.将各组件所有配置及业务配置兼容Apollo配置中心。

11.运维同步构造Docker容器、Jenkins流水线发布、各中间件集群。

升级过程

1.从现有系统git版本拉取升级分支。

2.升级过程中如果有新功能上线及时合并到升级分支。

3.基于升级分支版本对架构进行升级,保留原始提交记录。

4.本地调试完成后,发布测试环境时merge其他在途分支。

5.测试完成,准备上线。

上线方式

理想状态下应该是将新旧服务做集群,上线后将流量切到新服务上,如果有问题能随时切回原服务。

但实际上系统不断有迭代功能,这就意味着新旧服务要都要经过测试才能保证都能在生产环境可用,这次升级因资源限制,结合系统的重要性不是太高,最终决定使用新服务直接替代旧服务,有一定风险,幸好没有出现什么大问题。

注意事项

1.由于代码改动太大,合并代码后要逐一比对,防止处理冲突过程中代码丢失。

2.上线前逐一比对各项业务配置,防止遗漏。


http://www.ppmy.cn/news/947312.html

相关文章

el-table组件插槽“slot-scope”

目录 一、代码展示 二、返回的数组对象不含value或者ispass&#xff0c;不会报错 三、插槽里面放的是要手动输入的值时 一、代码展示 <el-table v-loading"loading" :data"checklistList" selection-change"handleSelectionChange"><…

新学期新flag

大家好我是通信2202的吴蕊&#xff0c;新学期新气象&#xff0c;希望自己在新的四年里可以勇往直前&#xff0c;做最好的自己&#xff0c;尽管进入大学生活没有高中老师说的那样轻松容易&#xff0c;但新的事物新的环境依旧让我感到新奇。 在这里希望自己可以完成以下几点&…

第十一节课国旗文化

第十一节课国旗文化 一、国旗讲解 小朋友们今天教官要给大家上一堂不一样的课&#xff0c;在我身后有一面旗帜&#xff0c;教官想问一下这个是什么有没有小朋友知道的&#xff1f;“五星红旗”对&#xff0c;他上面有五颗五角星&#xff0c;是五星红旗&#xff0c;除了是五星红…

我的世界服务器头顶显示,我的世界怎么把旗帜带在头上

1. 我的世界旗帜怎么戴在背后 其中steve换成自己的游戏百id&#xff1b;物品为旗帜&#xff0c;示例中是戴灾厄旗帜到背后(单人游戏度需开作弊命令方块&#xff0c;服务器可以在控问制台输命令或找管理员) 标斜答体的是灾厄旗帜在命令方块中的表述。 从服务器控制台输入命版令戴…

新学期 新FLAG

日月其迈&#xff0c;时盛岁新。九月&#xff0c;我们踏进了安信工的大门&#xff0c;迎接属于自己的大学生活。东野圭吾说“你很自由&#xff0c;充满无限可能”。我们将面临更多可能和更多挑战。 新学期是新的企盼、新的希望&#xff0c;新的征程&#xff0c;新的收获。新学期…

Python-turtle模块绘图(升国旗)

Python-turtle模块绘图&#xff08;升国旗&#xff09; 画国旗 import turtle turtle.bgcolor(wheat)turtle.speed(6)def down(x,y):turtle.up()turtle.goto(x,y)turtle.down()turtle.begin_fill()turtle.fillcolor("yellow")turtle.pencolor("yellow")f…