当前位置: 首页 > news >正文

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

有没有用到事务 比如说操作多个表 多个库

改造单机分布式登录

好的,单机分布式登录是一个结合了单机和分布式系统特点的登录方式。我们可以从以下几个方面来理解:

  1. 定义

  • 单机登录:指的是在单个服务器上进行用户认证和登录的过程,所有的用户信息和认证逻辑都集中在一台机器上。这种方式简单,适合小规模应用,但在负载增加时容易成为瓶颈。

  • 分布式登录:指的是用户认证和登录过程分布在多个服务器上,可以通过负载均衡、微服务等架构来实现。这种方式可以处理更高的并发请求,并提高系统的可用性和可靠性。

  1. 应用场景

  • 单机分布式登录通常用于需要在局部区域(如小型企业或特定功能模块)内实现简单的用户认证,而后端则可以与分布式系统对接,进行数据同步和共享。

  • 例如,一个小型的电商网站可能最初只在一台服务器上进行用户登录,但随着业务扩展,可能逐步引入微服务架构,其他服务(如商品、订单)部署在不同的服务器上。

  1. 技术原理

  • Session管理:在单机环境中,用户登录后可以在服务器上创建Session,存储用户信息。而在分布式环境中,可能需要使用分布式缓存(如Redis)来管理Session,以确保不同服务器之间能共享用户状态。

  • 数据库设计:单机时,用户信息存储在本地数据库中;分布式时,可能需要使用主从数据库、分片等技术来保证数据的一致性和可用性。

  • 负载均衡:在分布式环境中,使用负载均衡器将用户请求分发到不同的服务器上,提高并发处理能力。

  1. 优缺点

  • 优点

    • 扩展性:可以根据需求逐步扩展,添加更多的服务器。

    • 可靠性:分布式架构可以避免单点故障,提高系统的可用性。

  • 缺点

    • 复杂性:引入分布式架构后,系统设计和管理会变得复杂。

    • 一致性问题:在分布式环境中,需要额外处理数据一致性和同步的问题。

总结

单机分布式登录是一种灵活的认证方案,可以在单机环境中实现基本的用户管理,同时具备向分布式架构演进的潜力。适合于逐步扩展的应用场景,能够平衡初期简单与后期复杂的需求。

单机分布式登录与Redis的关系主要体现在Session管理和数据存储上。以下是具体的关联点:

  1. Session管理

在分布式登录架构中,用户的登录状态通常需要在多个服务器之间共享。Redis可以作为一个高效的分布式缓存来存储Session信息,确保不同服务器可以访问到相同的用户状态。

  1. 高性能

Redis是一个内存数据库,具有快速的数据读写能力,这使得它非常适合用来存储频繁访问的Session数据,能够显著提高用户登录的响应速度。

  1. 数据一致性

使用Redis可以帮助在分布式环境中保持数据的一致性。通过设置合适的过期时间,可以确保Session在一段时间后失效,从而避免因长时间未使用而造成的安全风险。

  1. 支持多种数据结构

Redis支持多种数据类型(如字符串、哈希、列表等),可以灵活地存储用户信息和相关数据,适应不同的业务需求。

  1. 分布式架构

在分布式系统中,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改造单机分布式锁登录

单体项目改造为微服务 什么是微服务 服务&#xff1a;提供某类功能的代码 微服务&#xff1a;专注于提供某类特定功能的代码 而不是把所有的代码放到同一个项目里 会把一个大的项目按照一定的功能逻辑进行划分 拆分成多个子模块 每个子模块可以独立运行 独立负责一类功能 …...

【机器学习】网络安全——异常检测与入侵防御系统

我的主页&#xff1a;2的n次方_ 随着全球互联网和数字基础设施的不断扩展&#xff0c;网络攻击的数量和复杂性都在显著增加。从传统的病毒和蠕虫攻击到现代复杂的高级持续性威胁&#xff08;APT&#xff09;&#xff0c;网络攻击呈现出更加智能化和隐蔽化的趋势。面对这样的…...

【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…...

文件丢失一键找回,四大数据恢复免费版工具推荐!

丢失数据的情况虽然不经常出现&#xff0c;但一旦出现都会让人头疼不已&#xff0c;而这时候&#xff0c;要如何恢复丢失的数据呢&#xff1f;一款免费好用的数据恢复工具就派上用场了&#xff01;接下来就为大家推荐几款好用的数据恢复工具&#xff01; 福昕数据恢复 直达链…...

【学习笔记】手写一个简单的 Spring MVC

目录 一、什么是Spring MVC &#xff1f; Spring 和 Spring MVC 的区别&#xff1f; Spring MVC 的运行流程&#xff1f; 二、实现步骤 1. DispatcherServlet 1. 创建一个中央分发器 拦截所有请求 测试 2. 接管 IOC 容器 1. 创建配置文件 2. 修改 web.xml 配置文件 …...

编程究竟难在哪里?

目录 一、将现实问题转化为代码二、应对需求的不断变化三、设计新算法的挑战结语 编程之难&#xff0c;常被概括为三个方面&#xff1a;首先&#xff0c;是将现实世界的问题转化为计算机语言的挑战&#xff1b;其次&#xff0c;是需求不断变化所带来的适应性难题&#xff1b;最…...

C#医学影像分析源码,医院影像中心PACS系统源码

医学影像系统源码&#xff0c;影像诊断系统PACS源码&#xff0c;C#语言&#xff0c;C/S架构的PACS系统全套源代码。 PACS系统是医院影像科室中应用的一种系统&#xff0c;主要用于获取、传输、存档和处理医学影像。它通过各种接口&#xff0c;如模拟、DICOM和网络&#xff0c;以…...

WooCommerce与wordpress是什么关系

WooCommerce与WordPress之间的关系非常紧密&#xff0c;因为WooCommerce实际上是一个为WordPress设计的插件。WordPress是一个内容管理系统(CMS)&#xff0c;广泛用于创建各种类型的网站&#xff0c;包括博客、企业网站等。而WooCommerce则是一个免费且开源的电子商务插件&…...

Web常见的攻击方式及防御方法

Web常见的攻击方式及防御方法如下&#xff1a; 1. 跨站脚本&#xff08;XSS&#xff09; 攻击方式&#xff1a;恶意代码被注入到网页中&#xff0c;用户浏览时执行该代码&#xff0c;导致窃取用户信息、伪造页面等。防御&#xff1a; 对用户输入严格过滤、转义。使用安全的编…...

基于STM32的超声波测距仪设计

引言 本项目将基于STM32微控制器设计一个超声波测距仪&#xff0c;通过超声波传感器实现距离测量&#xff0c;并将结果显示在液晶屏上。该项目展示了STM32微控制器与超声波传感器、LCD显示器的接口通信&#xff0c;以及信号处理和距离计算的过程。 环境准备 1. 硬件设备 ST…...

【数据库】Java 集成mongodb— MongoTemplate 详解

MongoTemplate 是 Spring Data MongoDB 提供的核心类&#xff0c;用于简化与 MongoDB 数据库的交互。它封装了许多常见的数据库操作&#xff0c;使开发者能够轻松执行 CRUD&#xff08;创建、读取、更新、删除&#xff09;操作&#xff0c;处理复杂查询和聚合等。本文将详细介绍…...

腿和脚的动作透露出你的内心“世界”

离大脑越近的部位越容易受大脑控制&#xff0c;而腿脚离大脑最远&#xff0c;想要在第一时间进行伪装是很难的。当危险靠近时&#xff0c;我们的双腿会自然而然地进入戒备状态&#xff0c;产生一些不自觉的动作。因此&#xff0c;观察一个人的腿脚&#xff0c;可以帮助我们了解…...

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&#xff08;大约$70&a…...

已解决:org.springframework.web.HttpMediaTypeNotAcceptableException

文章目录 写在前面问题描述报错原因分析&#xff1a; 解决思路解决办法1. 确保客户端请求的 Accept 头正确2. 修改 Controller 方法的 produces 参数3. 配置合适的消息转换器4. 检查 Spring 配置中的媒体类型5. 其他解决方案 总结 写在前面 在开发过程中&#xff0c;Spring 框…...

C/C++简单编译原理

我们写的头文件和.cpp文件究竟是如何在电脑中运行的&#xff1f; 先明确几个文件类型&#xff1a; 1、头文件&#xff08;.h .hpp&#xff09; 第三方头文件、系统头文件、自编头文件…… 2、编译单位&#xff08;.cpp .c cu&#xff09; 自己写的脚本文件 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 泛型单例 单例模式 单例模式是一种创建型设计模式&#xff0c;能够保证一个类只有一个实例&#xff0c;提供访问实例的全局节点。 通常会把一些管理类设置成单例&#xff0c;例如 GameManager、UIManager 等&#xff0c;可以很方便地使用这些管理类单例&#xff0c;…...

解析TMalign文本文件中的转换矩阵

TM-align 将两个蛋白质结构通过旋转和位移对齐后&#xff1a; TMalign test1.pdb test2.pdb -m mtx.txt 输出转换矩阵&#xff0c;文件内容为&#xff1a; ------ The rotation matrix to rotate Chain_1 to Chain_2 ------ m t[m] u[m][0] u[…...

vue.js组建开发

Vue.js是一个用于构建用户界面的渐进式JavaScript框架。它采用了组件化的开发方式&#xff0c;将UI界面拆分成多个可重用的组件&#xff0c;通过组合这些组件来构建复杂的应用程序。在本文中&#xff0c;我们将探讨Vue.js组件开发的相关概念和技术。 一、组件化开发的优势 组件…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...

DeepSeek越强,Kimi越慌?

被DeepSeek吊打的Kimi&#xff0c;还有多少人在用&#xff1f; 去年&#xff0c;月之暗面创始人杨植麟别提有多风光了。90后清华学霸&#xff0c;国产大模型六小虎之一&#xff0c;手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水&#xff0c;单月光是投流就花费2个亿。 疯…...

起重机起升机构的安全装置有哪些?

起重机起升机构的安全装置是保障吊装作业安全的关键部件&#xff0c;主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理&#xff1a; 一、超载保护装置&#xff08;核心安全装置&#xff09; 1. 起重量限制器 功能&#xff1a;实时监测起升载荷&a…...

基于Uniapp的HarmonyOS 5.0体育应用开发攻略

一、技术架构设计 1.混合开发框架选型 &#xff08;1&#xff09;使用Uniapp 3.8版本支持ArkTS编译 &#xff08;2&#xff09;通过uni-harmony插件调用原生能力 &#xff08;3&#xff09;分层架构设计&#xff1a; graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起&#xff0c;为了跨网段推流&#xff0c;千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...

【见合八方平面波导外腔激光器专题系列】用于干涉光纤传感的低噪声平面波导外腔激光器2

----翻译自Mazin Alalus等人的文章 摘要 1550 nm DWDM 平面波导外腔激光器具有低相位/频率噪声、窄线宽和低 RIN 等特点。该腔体包括一个半导体增益芯片和一个带布拉格光栅的平面光波电路波导&#xff0c;采用 14 引脚蝶形封装。这种平面波导外腔激光器设计用于在振动和恶劣的…...