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

升级目标

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.mzph.cn/news/1445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】杨氏矩阵中寻找元素

题目名称: 杨氏矩阵 题目内容: 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从下到上递增的(杨氏矩阵的定义),请编写程序在这样的矩阵中查找某个数字是否存在。 形如这样的矩阵就是杨氏…

chatglm微调

chatGML 看到 【【官方教程】ChatGLM-6B 微调:P-Tuning,LoRA,Full parameter】 【精准空降到 15:27】 https://www.bilibili.com/video/BV1fd4y1Z7Y5/?share_sourcecopy_web&vd_sourceaa8c13cff97f0454ee41e1f609a655f1&t927 记得看…

一文了解Docker之网络模型

目录 1.Docker网络 1.1 Docker网络模型概述 1.2 Docker网络驱动程序 1.2.1 host模式 1.2.2 bridge模式 1.2.3 container模式 1.2.4 none模式 1.3 Docker网络命令示例 1.3.1 创建一个自定义网络 1.3.2 列出所有网络 1.3.3 连接容器到网络 1.3.4 断开容器与网络的连接…

SpringCloud(三)LoadBalancer负载均衡

一、负载均衡 实际上,在添加LoadBalanced注解之后,会启用拦截器对我们发起的服务调用请求进行拦截(注意这里是针对我们发起的请求进行拦截),叫做LoadBalancerInterceptor,它实现ClientHttpRequestIntercep…

Android 系统的分区介绍

由于Android系统采用Linux架构,所以Android的系统分区可以类比同样采用Linux架构的操作系统(如Windows)。 Android系统分区分类 现在一般常见的Android分区方式共有三种,在不同的Android系统版本上会采用不同的分区方式。 1、传…

Postman接口自动化之postman脚本编写

这是之前搞的接口自动化方案,已经在业务测试中实现了使用postman编写接口脚本,通过GitHubJenkinsemail html report实现了接口自动化,现在分块整理一下。 postman脚本编写 1、创建集合 和 目录: 一条业务线下的接口可以放到一个…

sonarqube安装并配置CI/CD

sonarqube安装使用 目录 简介效果(配置在下面查看)官方文档环境准备配置compose-sonarqube.yml启动登录集成Gitlab 获取私钥sonarqube配置gitlab查看项目 配置 手动方式Gitlab CI/CD 自动检测 简介 SonarQube是一个开源的代码质量管理平台,用于对代码进行静态代…

【数学建模】——相关系数

第一部分:皮尔逊相关系数的计算以及数据的描述性统计 本讲我们将介绍两种最为常见的相关系数:皮尔逊person相关系数和斯皮尔曼spearman等级相关系数。它们可以用来衡量两个变量之间的相关性的大小,根据数组满足的不同条件,我们要选…

Monocular 3D Object Detection with Depth from Motion 论文学习

论文链接:Monocular 3D Object Detection with Depth from Motion 1. 解决了什么问题? 从单目输入感知 3D 目标对于自动驾驶非常重要,因为单目 3D 的成本要比多传感器的方案低许多。但单目方法很难取得令人满意的效果,因为单张图…

QT之智能指针

如果没有智能指针,程序员必须保证new对象能在正确的时机delete,四处编写异常捕获代码以释放资源,而智能指针则可以在退出作用域时(不管是正常流程离开或是因异常离开)总调用delete来析构在堆上动态分配的对象。 来看看一个野指针例子 程序将会…

java学习路程之篇三、知识点、类、模块、项目、操作、下载、安装、IDEA

文章目录 1、IDEA开发工具2、IDEA的下载和安装3、IDEA中的第一个代码4、IDEAZ中的类、模块、项目的操作 1、IDEA开发工具 2、IDEA的下载和安装 3、IDEA中的第一个代码 4、IDEAZ中的类、模块、项目的操作

【计算机视觉 | 图像分类】arxiv 计算机视觉关于图像分类的学术速递(7 月 17 日论文合集)

文章目录 一、分类|识别相关(11篇)1.1 Multimodal Distillation for Egocentric Action Recognition1.2 Dual-Query Multiple Instance Learning for Dynamic Meta-Embedding based Tumor Classification1.3 Interactive Spatiotemporal Token Attention Network for Skeleton-…

基于ClickHouse解决活动海量数据问题 | 京东云技术团队

1、背景 魔笛活动平台要记录每个活动的用户行为数据,帮助客服、运营、产品、研发等快速处理客诉、解决线上问题并进行相关数据分析和报警。可以预见到需要存储和分析海量数据,预估至少几十亿甚至上百亿的数据量,所以需要选择一款能存储海量数…

会议音响系统麦克风阵列波束形成算法C语言实现

一 应用麦克风阵列波束成形算法做的项目产品 二 麦克风波束形成技术应用领域? 麦克风波束形成技术是一种利用多个麦克风阵列来实现声音定向捕捉和增强的技术。通过对多个麦克风信号进行处理和合成,可以使麦克风系统在特定方向上具有更高的灵敏度和抑制非期望方向上的噪…

机器学习(13)--支持向量机

目录 一、支持向量机概述 二、Sklearn中的SVM概述 三、线性SVM损失函数 四、sklearn中进行可视化 1、导入模块 2、实例化数据集,可视化 3、网格点制作 4、建立模型并绘制决策边 目录 一、支持向量机概述 二、Sklearn中的SVM概述 三、线性SVM损失函数 四…

机器学习技术(三)——机器学习实践案例总体流程

机器学习实践案例总体流程 文章目录 机器学习实践案例总体流程一、引言二、案例1、决策树对鸢尾花分类1.数据来源2.数据导入及描述3.数据划分与特征处理4.建模预测 2、各类回归波士顿房价预测1.案例数据2.导入所需的包和数据集3.载入数据集,查看数据属性&#xff0c…

四个按键控制led的四种变化(按键控制led)(附源码)

文章目录 一、实验任务二、系统框图三、代码实现四、引脚分配五、总结 一、实验任务 使用开发板上的四个按键控制四个LED灯。按下不同的按键时,四个LED灯显示不同效果。本实验是在EP4CE6F17C8开发板上实现,仿真请用modelsim Altera 二、系统框图 三、代…

揭秘GPT-4;Adobe Firefly AI 扩大测试规模

🦉 AI新闻 🚀 Adobe Firefly AI 扩大测试规模,支持100多种语言的输入 摘要:Adobe宣布扩大测试规模,Adobe Firefly AI现在支持100多种语言的 prompts 输入。网页测试版Firefly已经扩充了罗马尼亚语等多种语言&#xf…

MacOS使用USB接口与IPhone进行Socket通信

演示效果如下: 开源地址: GitHub - rsms/peertalk: iOS and Mac Cocoa library for communicating over USB 克隆源码: git clone https://github.com/rsms/peertalk.git 克隆后打开peertalk然后启动xcode工程 先启动MacOS服务端工程,再启动iOS客户端工程 客户端 服务端

微信小程序安装和使用 Vant Weapp 组件库

微信小程序安装和使用 Vant Weapp 组件库 1. Vant Weapp 介绍2. Vant Weapp 的 安装2.1. 通过npm安装2.2. 构建npm2.3. 修改 app.json2.4. 修改 project.congfig.json2.5. 测试一下,使用Vant Weapp提供的组件 1. Vant Weapp 介绍 Vant 是一个轻量、可靠的移动端组件…