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管理工具 查看信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1556852.html

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

相关文章

UDP协议【网络】

文章目录 UDP协议格式 UDP协议格式 16位源端口号&#xff1a;表示数据从哪里来。16位目的端口号&#xff1a;表示数据要到哪里去。16位UDP长度&#xff1a;表示整个数据报&#xff08;UDP首部UDP数据&#xff09;的长度。16位UDP检验和&#xff1a;如果UDP报文的检验和出错&…

代码随想录--字符串--重复的子字符串

题目 给定一个非空的字符串&#xff0c;判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母&#xff0c;并且长度不超过10000。 示例 1: 输入: "abab" 输出: True 解释: 可由子字符串 "ab" 重复两次构成。示例 2: 输入: "…

小米路由器ax1500+DDNS+公网IP+花生壳实现远程访问

有远程办公的需求&#xff0c;以及一些其他东西。 为什么写&#xff1f; ax1500路由器好像没搜到相关信息。以及其中有一点坑。 前置 公网ip Xiaomi路由器 AX1500 MiWiFi 稳定版 1.0.54 实现流程 花生壳申请壳域名https://console.hsk.oray.com/ 这里需要为域名实名认证 …

Sleuth、Zipkin学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程&#xff1a;封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

【Qt】控件概述(7)—— 布局管理器

布局管理器 1. 布局管理器2. QVBoxLayout——垂直布局3. QHBoxLayout——水平布局4. QGridLayout——网格布局5. QFormLayout——表单布局6. QSpacer 1. 布局管理器 在我们之前值ui界面进行拖拽设置控件时&#xff0c;都是通过手动的控制控件的位置的。同时每个控件的位置都是…

aws(学习笔记第三课) AWS CloudFormation

aws(学习笔记第三课) 使用AWS CloudFormation 学习内容&#xff1a; AWS CloudFormation的模板解析使用AWS CloudFormation启动ec2 server 1. AWS CloudFormation 的模版解析 CloudFormation模板结构 CloudFormation是AWS的配置管理工具&#xff0c;属于Infrastructure as Co…

鸽笼原理与递归 - 离散数学系列(四)

目录 1. 鸽笼原理 鸽笼原理的定义 鸽笼原理的示例 鸽笼原理的应用 2. 递归的定义与应用 什么是递归&#xff1f; 递归的示例 递归与迭代的对比 3. 实际应用 鸽笼原理的实际应用 递归的实际应用 4. 例题与练习 例题1&#xff1a;鸽笼原理应用 例题2&#xff1a;递归…

Nginx02-安装

零、文章目录 Nginx02-安装 1、Nginx官网 Nginx官网地址&#xff1a;http://nginx.org/ 2、Nginx下载 &#xff08;1&#xff09;Nginx下载 下载页地址&#xff1a;http://nginx.org/en/download.html &#xff08;2&#xff09;更老版本下载 下载页地址&#xff1a;http…

模型漫谈:图神经网络(GNN)是什么样的存在

文章大纲&#xff1a; 从生活中的例子谈图与图神经网络 什么是图神经网络&#xff1f;它如何起源&#xff1f; 图神经网络的基本原理和原则 图神经网络的应用方向&#xff1a;以环境科学为例 公众号推荐 在现代科技迅速发展的今天&#xff0c;许多看似复杂的概念其实都有…

【GitHub】上传文件到GitHub

参考视频&#xff1a;手把手教你在github上传文件_哔哩哔哩_bilibili 1.找到文件夹右键&#xff0c;选择open git bash here 2.完成指令 git initgit add *git commit -m "first commit"3.打开该文件夹&#xff0c;打开隐藏文件.git/config 编辑输入邮箱和GitHub用…

python全栈学习记录(二十三)反射、内置方法、类相关的函数、元类

反射、内置方法、类相关的函数、元类 文章目录 反射、内置方法、类相关的函数、元类一、反射二、内置方法1.__str__2.__repr__3.__del__4.__getattr__5.__setattr__ 三、类相关的函数四、元类1.python中类的产生过程2.元类控制类的产生 一、反射 反射的意思是通过字符串来操作…

大模型应用探讨,免费AI写作、一键PPT、免费PDF百种应用、与AI对话

大模型应用平台知识普及, 应用可见评论区 我们生活在一个充满无限可能的数字时代&#xff0c;人工智能技术正在推动着各种创新的边界。大模型应用平台一般包含以下功能。 ## 1. 一键生成论文 写作是学生、研究人员和职场人士都无法避免的任务。大模型应用平台拥有强大的文本生…

Lesson3 - 操作系统软件视角和系统调用

文章目录 硬件支持系统 系统管理硬件异步行为中断的分类 同步行为虚拟地址空间shell系统调用与软中断区分系统调用trace 命令 硬件支持系统 系统管理硬件 计算机硬件由三样东西组成&#xff1a;CPU、内存、I/O设备。为了更有效地管理这些硬件资源&#xff0c;系统设计者引入了…

使用bert模型进行命名实体识别任务

一、实验内容 本实验使用预训练的 BERT 模型进行命名实体识别&#xff08;NER&#xff09;任务&#xff0c;并且使用 Hugging Face 的 Transformers 库完成模型的训练、验证和测试。最后&#xff0c;使用测试集评估模型性能&#xff0c;计算NER指标。 二、算法介绍 Bert是一种…

Observability:使用 OpenTelemetry 自动检测 Go 应用程序

作者&#xff1a;来自 Elastic Damien Mathieu 使用 OpenTelemetry 检测 Go 应用程序可以深入了解应用程序的性能、依赖项和错误。我们将向你展示如何使用 Docker 自动检测 Go 应用程序&#xff0c;而无需更改应用程序代码。 在快节奏的软件开发领域&#xff0c;尤其是在云原生…

分治算法(3)_快速选择_数组中的第K个最大元素

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 分治算法(3)_快速排序_数组中的第K个最大元素 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#…

【原创】Anaconda+VScode+PySide6 完美配置Python开发环境,亲测!

准备工作 下载安装 Anaconda 下载安装Visual Studio Code 配置系统环境变量 配置Anaconda环境变量 将Anaconda安装目录及Scripts 、Library\bin 两个子目录添加到用户变量或系统变量的Path变量中。 Anaconda自带最新版Python&#xff0c;如果已经安装Python&#xff0c;建议…

Mybatis测试案例

1.创建springboot工程 创建实体类user和接口 user类 注意&#xff1a;java和mysql的对象的属性数据类型要一致 mapper接口 2.配置mybatis(连接数据库信息) # spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #地址url spring.datasource.urljdbc:mysql://localho…

【Python】Mistune:高效的 Python Markdown 解析器

Mistune 是一个轻量且强大的 Python Markdown 解析器。它的设计目标是兼顾速度和扩展性&#xff0c;同时兼容 CommonMark 标准。Mistune 支持多种渲染器&#xff08;Renderers&#xff09;和插件&#xff0c;能够根据需求将 Markdown 转换为 HTML、LaTeX 或自定义格式。此外&am…