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

news2024/10/7 8:31:26

升级目标

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.coloradmin.cn/o/767719.html

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

相关文章

大华智慧园区综合管理平台存在任意文件上传漏洞

大华智慧园区综合管理平台存在任意文件上传漏洞 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作…

Ceph

Ceph简介 Ceph使用C语言开发,是一个开放、自我修复和自我管理的开源分布式存储系统。具有高扩展性、高性能、高可靠性的优点。Ceph目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack,Kubernetes都可与Ceph整合以支持虚拟机镜像的后端存储…

CMake:设置语言标准(一)

CMake:设置语言标准(一) 导言C标准历史C11版本特性介绍类型推导之auto和decltypeC返回值类型后置对模板实例化中连续尖括号>>的改进使用using定义别名(替代typedef)支持函数模板的默认参数在函数模板和类模板中使用可变参数…

接下来讲一讲Vue的数据代理

首先讲一下原生js的数据代理 原生的 Object.defineProperty() let aa wewewlet person {name: "王李斌",age: 12} Object.defineProperty(person, "address", {// value: 14, 给字段设置值//enumerable:true, 设置动态设置的字段为可以遍历/…

Docker 镜像解密:分层存储与构建原理多角度解析

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

超声波水表的优势

超声波水表是一种新型的水表,它采用超声波测流技术,能够实现对水流的非接触式测量,具有许多优势。下面将从多个方面来介绍超声波水表的优势。 一、高精度 由于超声波测流技术采用的是非接触式测量,因此不会受到水流的摩擦、涡流等…

【C++】C++11 (3): lambda表达式和包装器

一、lambda表达式 C98中的一个例子 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法。 #include <algorithm> #include <functional> int main() {int a[] { 4,1,8,5,3,7,0,9,2,6 };// 默认按照小于比较&#xff…

S32 Design Studio for ARM(S32DS)下载和安装

1. S32 Design Studio for ARM 介绍 S32 Design Studio for ARM&#xff08;下面简称S32DS&#xff09;&#xff0c;是 NXP 官方在 2014 年官方推出的&#xff0c;专门面向 S32K、KEA、MAC57D54H等系列微控制器的集成开发环境。 S32DS是由Eclipse和一些插件集成而来的开发平台…

自来水收费系统适合应用于哪些场景?

自来水收费系统是一种用于自来水公司或供水管理部门的软件系统&#xff0c;旨在帮助自动化自来水的收费和管理过程。该系统可以帮助自来水公司更好地管理水资源&#xff0c;提高供水质量和效率&#xff0c;同时也可以为用户提供更加便捷和安全的用水服务。下面将从多个方面来介…

centos7通过epel源安装redis

目录 一、下载epel源 二、下载并且启动 一、下载epel源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 二、下载并且启动 yum install redis systemctl enable --now redis

c代码和c++代码互相调用

note 不管是c代码调用c代码&#xff0c;还是c代码调用c代码&#xff0c;本质上都是g兼容gcc的功能 c代码调用c代码 lib.h #ifndef _LIB_H_void libfun(void);#endif lib.c #include <stdio.h> #include "lib.h"void libfun(void) {printf("this is i…

Intel nuc 清除cmos密码

设备为intel nuc7&#xff0c;其他版本可以参考&#xff0c;步骤如下 1、找到主板上的bios_sec的三针跳线 2、将跳线开关取下 3、按住电源键3秒&#xff0c;电源指示灯变为橙色后松手 4、耐心等待显示器显示bios recovery倒计时画面 5、按esc取消bios recovery 6、显示器显…

Oss文件上传-简化版

这里使用的是element的上传组件&#xff0c;相关上传钩子看官网 一、获取到oss后台相关的签名数据 建议通过接口获取 二、上传 //获取oss相关参数// getOsstokenasync beforeUploadMasterImg(file) {console.log("点击上传");await this.getOssSingnature(file);},…

这7款UI设计工具值得一试!

在设计工作中&#xff0c;UI设计更注重于人和产品互动式时的交互效果&#xff0c;也就是页面内容丰富程度。无论是想打造哪种风格的UI设计界面&#xff0c;这个过程都离不开好用的UI设计工具&#xff0c;本文总结了7款年度好用的UI设计工具&#xff0c;能帮助设计师更轻松地创作…

压裂工艺原理简述

一、压裂程序 1. 压裂概念 在石油领域&#xff0c;压裂是指采油或采气过程中&#xff0c;利用水力作用&#xff0c;使油气层形成裂缝的一种方法&#xff0c;又称水力压裂。压裂是人为地使地层产生裂缝&#xff0c;改善油在地下的流动环境&#xff0c;使油井产量增加&#xff…

【kubernetes系列】kubernetes之计算资源管理

资源类型 在 Kubernetes 中&#xff0c;Node 提供资源&#xff0c;而 Pod 使用资源。其中资源分为计算&#xff08;CPU、Memory、GPU&#xff09;、存储&#xff08;Disk、SSD&#xff09;、网络&#xff08;Network Bandwidth、IP、Ports&#xff09;。这些资源提供了应用运行…

DIN - 序列模型之深度兴趣网络(阿里)

&#x1f525; DIN来自于 阿里 盖坤团队 在 KDD-2018 发的论文《Deep Interest Network for Click-Through Rate Prediction》。该模型在当时已经应用于阿里的电商广告推荐业务&#xff0c;效果不错。 文章目录 1、介绍&#xff1a;2、单值特征 & 多值特征&#xff1a;3、动…

共筑信创生态!亚信科技AntDB数据库与用友、东方通、星辰天合达成兼容互认

近日&#xff0c;亚信科技AntDB数据库与用友U8 cloud、东方通应用服务器TongWeb V7.0、星辰天合全产品体系完成兼容适配。经测试&#xff0c;AntDB数据库与U8 cloud产品&#xff0c;TongWeb V7.0服务器&#xff0c;星辰天合天合翔宇分布式存储系统、统一数据平台XEDP、超融合平…

分析分布式架构-技术

分布式系统的主要目的 提高系统的性能 提高吞吐量&#xff0c;服务更多的客户。提高并发和流量。 通过以下的技术提高处理高并发场景的能力 缓存系统&#xff0c;更快的响应客户端的请求。降低对数据库的压力(提高响应速度) 前端浏览器&#xff0c;网络&#xff0c;后端服务&a…

深入理解Linux网络——TCP连接的开销

文章目录 一、相关实际问题二、Linux内核如何管理内存1&#xff09;node划分2&#xff09;zone划分3&#xff09;基于伙伴系统管理空闲页面4、slab分配器5&#xff09;小结 三、TCP连接相关内核对象1&#xff09;socket函数直接创建1. sock_inode_cache对象申请2. tcp对象申请3…