OJ在线评测系统 微服务技术入门 单体项目改造为微服务 用Redis改造单机分布式锁登录
单体项目改造为微服务
什么是微服务
服务:提供某类功能的代码
微服务:专注于提供某类特定功能的代码 而不是把所有的代码放到同一个项目里
会把一个大的项目按照一定的功能逻辑进行划分
拆分成多个子模块 每个子模块可以独立运行 独立负责一类功能
子模块之间相互调用 互不影响
微服务只是一个思想
微服务的实现技术
Spring Cloud
Spring Cloud Alibaba
Dubbo (DubboX)
RPC (GRPC TRPC)
本质上是通过HTTP 或者其他的网络协议进行通讯来实现的
服务之间的相互拆分 服务间的相互调用
Spring Cloud Alibaba
https://sca.aliyun.com/
微服务几个重要的实现概念
服务管理 服务调用
本质是在Spring Cloud的基础上
进行了增强
补充了一些额外的能力
根据阿里多年的业务沉淀做了一些额外的开发
Spring Cloud Gateways 网关
Nacos 服务注册和配置中心
Sentinel 熔断限流
Seata 分布式事务
RocketMQ 消息队列 削峰填谷
Docker 进行容器化部署
Kubernetes 使用k8s进行容器化部署
改造前 我们思考
从业务需求出发 首先分布式和单机有什么区别
我们之前的登录数据库数据是放在本台服务器上的
如果我们把我们的后端项目换到另一台服务器上 我们的数据就会消失
我们需要把用户登录功能需要改造为分布式登录
用到单机锁 我们要改造成分布式锁
有没有用到本地的缓存 改造为分布式缓存 redis
有没有用到事务 比如说操作多个表 多个库
改造单机分布式登录
好的,单机分布式登录是一个结合了单机和分布式系统特点的登录方式。我们可以从以下几个方面来理解:
-
定义
-
单机登录:指的是在单个服务器上进行用户认证和登录的过程,所有的用户信息和认证逻辑都集中在一台机器上。这种方式简单,适合小规模应用,但在负载增加时容易成为瓶颈。
-
分布式登录:指的是用户认证和登录过程分布在多个服务器上,可以通过负载均衡、微服务等架构来实现。这种方式可以处理更高的并发请求,并提高系统的可用性和可靠性。
-
应用场景
-
单机分布式登录通常用于需要在局部区域(如小型企业或特定功能模块)内实现简单的用户认证,而后端则可以与分布式系统对接,进行数据同步和共享。
-
例如,一个小型的电商网站可能最初只在一台服务器上进行用户登录,但随着业务扩展,可能逐步引入微服务架构,其他服务(如商品、订单)部署在不同的服务器上。
-
技术原理
-
Session管理:在单机环境中,用户登录后可以在服务器上创建Session,存储用户信息。而在分布式环境中,可能需要使用分布式缓存(如Redis)来管理Session,以确保不同服务器之间能共享用户状态。
-
数据库设计:单机时,用户信息存储在本地数据库中;分布式时,可能需要使用主从数据库、分片等技术来保证数据的一致性和可用性。
-
负载均衡:在分布式环境中,使用负载均衡器将用户请求分发到不同的服务器上,提高并发处理能力。
-
优缺点
-
优点:
-
扩展性:可以根据需求逐步扩展,添加更多的服务器。
-
可靠性:分布式架构可以避免单点故障,提高系统的可用性。
-
-
缺点:
-
复杂性:引入分布式架构后,系统设计和管理会变得复杂。
-
一致性问题:在分布式环境中,需要额外处理数据一致性和同步的问题。
-
总结
单机分布式登录是一种灵活的认证方案,可以在单机环境中实现基本的用户管理,同时具备向分布式架构演进的潜力。适合于逐步扩展的应用场景,能够平衡初期简单与后期复杂的需求。
单机分布式登录与Redis的关系主要体现在Session管理和数据存储上。以下是具体的关联点:
-
Session管理
在分布式登录架构中,用户的登录状态通常需要在多个服务器之间共享。Redis可以作为一个高效的分布式缓存来存储Session信息,确保不同服务器可以访问到相同的用户状态。
-
高性能
Redis是一个内存数据库,具有快速的数据读写能力,这使得它非常适合用来存储频繁访问的Session数据,能够显著提高用户登录的响应速度。
-
数据一致性
使用Redis可以帮助在分布式环境中保持数据的一致性。通过设置合适的过期时间,可以确保Session在一段时间后失效,从而避免因长时间未使用而造成的安全风险。
-
支持多种数据结构
Redis支持多种数据类型(如字符串、哈希、列表等),可以灵活地存储用户信息和相关数据,适应不同的业务需求。
-
分布式架构
在分布式系统中,Redis可以作为中央存储解决方案,帮助实现数据的快速访问和共享,适合高并发场景。
总之,Redis在单机分布式登录中起到了提升性能、管理Session和确保数据一致性的关键作用。
Session是指在用户与服务器之间保持的状态信息,用于跟踪用户的会话。它允许服务器在用户访问不同页面或进行多个请求时,识别用户并存储相关信息,比如登录状态、购物车内容等。Session通常通过一个唯一的标识符(如Session ID)来实现,服务器在创建Session时会为每个用户分配一个ID,并将相关数据保存在服务器端。这样,当用户再次发送请求时,服务器可以通过这个ID找到对应的Session数据,保持用户体验的一致性。
首先打开redis
我们在启动类里面打个注解
主类取消Redis自动配置的移除
补充依赖
<!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency>
分布式session
session:# todo 取消注释开启分布式 session(须先配置 Redis)store-type: redis# 30 天过期timeout: 2592000
使用redis-cli或者是redis管理工具 查看信息
相关文章:

OJ在线评测系统 微服务技术入门 单体项目改造为微服务 用Redis改造单机分布式锁登录
单体项目改造为微服务 什么是微服务 服务:提供某类功能的代码 微服务:专注于提供某类特定功能的代码 而不是把所有的代码放到同一个项目里 会把一个大的项目按照一定的功能逻辑进行划分 拆分成多个子模块 每个子模块可以独立运行 独立负责一类功能 …...

【机器学习】网络安全——异常检测与入侵防御系统
我的主页:2的n次方_ 随着全球互联网和数字基础设施的不断扩展,网络攻击的数量和复杂性都在显著增加。从传统的病毒和蠕虫攻击到现代复杂的高级持续性威胁(APT),网络攻击呈现出更加智能化和隐蔽化的趋势。面对这样的…...
【C语言】基础篇续
最大公约数HCF与最小公倍数LCM #include<stdio.h> int main(){int n1,n2,i,hcf,lcm;printf("Enter two numbers:");scanf("%d %d",&n1,&n2);for(i 1;i < n1 & i < n2;i){if(n1 % i 0 & n2 % i 0){hcf i;lcm (n1*n2)/hc…...

文件丢失一键找回,四大数据恢复免费版工具推荐!
丢失数据的情况虽然不经常出现,但一旦出现都会让人头疼不已,而这时候,要如何恢复丢失的数据呢?一款免费好用的数据恢复工具就派上用场了!接下来就为大家推荐几款好用的数据恢复工具! 福昕数据恢复 直达链…...

【学习笔记】手写一个简单的 Spring MVC
目录 一、什么是Spring MVC ? Spring 和 Spring MVC 的区别? Spring MVC 的运行流程? 二、实现步骤 1. DispatcherServlet 1. 创建一个中央分发器 拦截所有请求 测试 2. 接管 IOC 容器 1. 创建配置文件 2. 修改 web.xml 配置文件 …...
编程究竟难在哪里?
目录 一、将现实问题转化为代码二、应对需求的不断变化三、设计新算法的挑战结语 编程之难,常被概括为三个方面:首先,是将现实世界的问题转化为计算机语言的挑战;其次,是需求不断变化所带来的适应性难题;最…...

C#医学影像分析源码,医院影像中心PACS系统源码
医学影像系统源码,影像诊断系统PACS源码,C#语言,C/S架构的PACS系统全套源代码。 PACS系统是医院影像科室中应用的一种系统,主要用于获取、传输、存档和处理医学影像。它通过各种接口,如模拟、DICOM和网络,以…...
WooCommerce与wordpress是什么关系
WooCommerce与WordPress之间的关系非常紧密,因为WooCommerce实际上是一个为WordPress设计的插件。WordPress是一个内容管理系统(CMS),广泛用于创建各种类型的网站,包括博客、企业网站等。而WooCommerce则是一个免费且开源的电子商务插件&…...
Web常见的攻击方式及防御方法
Web常见的攻击方式及防御方法如下: 1. 跨站脚本(XSS) 攻击方式:恶意代码被注入到网页中,用户浏览时执行该代码,导致窃取用户信息、伪造页面等。防御: 对用户输入严格过滤、转义。使用安全的编…...

基于STM32的超声波测距仪设计
引言 本项目将基于STM32微控制器设计一个超声波测距仪,通过超声波传感器实现距离测量,并将结果显示在液晶屏上。该项目展示了STM32微控制器与超声波传感器、LCD显示器的接口通信,以及信号处理和距离计算的过程。 环境准备 1. 硬件设备 ST…...
【数据库】Java 集成mongodb— MongoTemplate 详解
MongoTemplate 是 Spring Data MongoDB 提供的核心类,用于简化与 MongoDB 数据库的交互。它封装了许多常见的数据库操作,使开发者能够轻松执行 CRUD(创建、读取、更新、删除)操作,处理复杂查询和聚合等。本文将详细介绍…...
腿和脚的动作透露出你的内心“世界”
离大脑越近的部位越容易受大脑控制,而腿脚离大脑最远,想要在第一时间进行伪装是很难的。当危险靠近时,我们的双腿会自然而然地进入戒备状态,产生一些不自觉的动作。因此,观察一个人的腿脚,可以帮助我们了解…...
Oracle架构之用户,权限,角色讲解
文章目录 1 用户1.1 简介1.1.1 定义1.1.2 用户相关信息1.1.2.1 用户默认表空间1.1.2.2 用户临时表空间1.1.2.3 用户资源文件1.1.2.4 用户表空间限额1.1.2.5 用户管理有关的数据字典 1.1.3 用户、模式、模式对象1.1.4 实例模式 SCOTT1.1.5 各个角色区别 1.2 用户管理1.2.1 创建用…...

Unity_Obfuscator Pro代码混淆工具_学习日志
Unity_Obfuscator Pro代码混淆工具_学习日志 切勿将密码或 API 密钥存储在您附带的应用程序内。 混淆后的热更新暂时没有想到怎么办 Obfuscator 文档 https://docs.guardingpearsoftware.com/manual/Obfuscator/Description.html商店链接Obfuscator Pro(大约$70&a…...

已解决:org.springframework.web.HttpMediaTypeNotAcceptableException
文章目录 写在前面问题描述报错原因分析: 解决思路解决办法1. 确保客户端请求的 Accept 头正确2. 修改 Controller 方法的 produces 参数3. 配置合适的消息转换器4. 检查 Spring 配置中的媒体类型5. 其他解决方案 总结 写在前面 在开发过程中,Spring 框…...
C/C++简单编译原理
我们写的头文件和.cpp文件究竟是如何在电脑中运行的? 先明确几个文件类型: 1、头文件(.h .hpp) 第三方头文件、系统头文件、自编头文件…… 2、编译单位(.cpp .c cu) 自己写的脚本文件 3、目标文件&…...

文件处理不再难:带你轻松攻克C语言文件操作
嘿嘿,家人们,今天咱们来详细剖析C语言中的文件操作,好啦,废话不多讲,开干! 目录 1:为什么使用文件 2:文件的概念 2.1:程序文件 2.2:数据文件 2.3:文件名 3:二进制文件与文本文件 4:文件的打开与关闭 4.1:流与标准流 4.1.1:流 4.1.2:标准流 4.2:文件指针 4.3:文件的…...

Unity3D 单例模式
Unity3D 泛型单例 单例模式 单例模式是一种创建型设计模式,能够保证一个类只有一个实例,提供访问实例的全局节点。 通常会把一些管理类设置成单例,例如 GameManager、UIManager 等,可以很方便地使用这些管理类单例,…...
解析TMalign文本文件中的转换矩阵
TM-align 将两个蛋白质结构通过旋转和位移对齐后: TMalign test1.pdb test2.pdb -m mtx.txt 输出转换矩阵,文件内容为: ------ The rotation matrix to rotate Chain_1 to Chain_2 ------ m t[m] u[m][0] u[…...
vue.js组建开发
Vue.js是一个用于构建用户界面的渐进式JavaScript框架。它采用了组件化的开发方式,将UI界面拆分成多个可重用的组件,通过组合这些组件来构建复杂的应用程序。在本文中,我们将探讨Vue.js组件开发的相关概念和技术。 一、组件化开发的优势 组件…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...