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

分布式场景中的常见的技术问题及解决,如分布式锁、分布式事务、分布式 session、分布式任务调度

目录

一、分布式锁

二、分布式事务

三、分布式Session

四、分布式任务调度


在分布式场景中,常见的技术问题及其解决方案涉及多个方面,包括分布式锁、分布式事务、分布式session和分布式任务调度。以下是对这些问题的详细探讨:

一、分布式锁

常见问题

  1. 锁的唯一性:确保分布式环境下同一资源只能被一个进程或线程访问。
  2. 死锁问题:客户端异常或网络问题可能导致锁无法释放,形成死锁。
  3. 锁的续期问题:业务逻辑执行时间可能超过锁的有效期,需要续期。

解决方案

  1. 使用Redis实现分布式锁
    • 利用Redis的SETNX(Set if Not eXists)命令实现加锁,同时设置锁的过期时间,避免死锁。
    • 使用Lua脚本保证加锁和设置过期时间的原子性。
    • 解锁时检查锁是否由当前客户端持有,防止误解锁。
  2. 使用ZooKeeper实现分布式锁
    • 利用ZooKeeper的临时有序节点实现锁机制,节点自动删除机制可以避免死锁。
    • 通过事件回调机制通知等待的客户端获取锁。

二、分布式事务

常见问题

  1. 数据一致性问题:多个服务或数据库之间的数据需要保持一致性。
  2. 事务的隔离性:确保事务之间的隔离程度,避免脏读、不可重复读和幻读。

解决方案

  1. 两阶段提交(2PC)
    • 准备阶段:参与者执行事务操作,并返回执行结果给协调者。
    • 提交阶段:协调者根据参与者执行结果通知参与者进行提交或回滚。
    • 缺点:同步阻塞、单点问题、数据一致性问题。
  2. 三阶段提交(3PC)
    • 在2PC基础上增加预提交阶段,以更好地处理协调者故障。
    • 但仍未完全解决数据一致性问题。
  3. 补偿事务(TCC)
    • Try阶段:检测及预留资源。
    • Confirm阶段:对业务系统做确认提交。
    • Cancel阶段:出现错误时回滚。
  4. 本地消息表+消息队列
    • 节点完成操作后发送消息到本地消息表,确保消息一定能写成功。
    • 本地消息表将消息转发到消息队列,其他节点从消息队列中读取消息并执行。
  5. MQ事务消息
    • 利用RocketMQ等消息队列实现最终一致性分布式事务。

三、分布式Session

常见问题

  1. Session共享问题:在分布式系统中,不同服务器之间的Session需要共享。

解决方案

  1. 使用数据库存储Session
    • 将Session信息存储在数据库中,通过数据库共享Session。
  2. 使用Redis存储Session
    • 利用Redis的分布式特性,将Session信息存储在Redis中,实现快速访问和共享。
  3. Session同步工具
    • 使用Tomcat自带的Session同步工具,但需注意性能和延时问题。

四、分布式任务调度

常见问题

  1. 任务重复执行:在分布式系统中,同一定时任务可能被多个节点重复执行。
  2. 任务执行顺序:需要保证任务之间的执行顺序和依赖关系。

解决方案

  1. 使用分布式任务调度框架
    • 如Quartz、XXL-JOB、LTS-admin等,这些框架支持分布式部署,能够统一管理和调度任务。
  2. 任务去重
    • 在任务执行前进行去重检查,确保同一任务不会被重复执行。
  3. 任务依赖管理
    • 在任务调度框架中配置任务之间的依赖关系,确保任务按预期顺序执行。

综上所述,分布式场景中的常见技术问题及其解决方案需要综合考虑系统的具体需求和场景,采用合适的技术和工具来实现。

参考:

分布式事务、分布式锁与分布式任务调度纪要-CSDN博客

分布式问题,你知道几个?-CSDN博客

分布式事务常见解决方案(2024.4.18)-CSDN博客

分布式系统常见的问题和解决办法 - 简书

相关文章:

分布式场景中的常见的技术问题及解决,如分布式锁、分布式事务、分布式 session、分布式任务调度

目录 一、分布式锁 二、分布式事务 三、分布式Session 四、分布式任务调度 在分布式场景中,常见的技术问题及其解决方案涉及多个方面,包括分布式锁、分布式事务、分布式session和分布式任务调度。以下是对这些问题的详细探讨: 一、分布式…...

Android笔试面试题AI答之Kotlin(9)

文章目录 39.Kotlin中List与MutableList的区别?ListMutableList使用场景示例 40. Kotlin中实现单例的几种常见方式?1. 懒汉式(线程不安全)2. 懒汉式(线程安全)3. 饿汉式4. 双重校验锁(DCL, Doub…...

C# 不一样的洗牌算法---Simd指令

洗牌算法&#xff0c;以随机打乱数组中元素的位置 测试数据创建 int[] _data; Random rng new Random(); protected override void CreateData() {_data new int[_size];for (int i 0; i < _data.Length; i){_data[i] i;} } 普通打乱数组元素位置 protected overrid…...

LVGL系列3--纯物理(外部)按键,数字键盘控制控件

LVGL系列 一、LVGL移植 LVGL系列1–AT32移植LVGL_V8具体步骤 LVGL系列2–linux lvglv8 vscode 移植 LVGL系列3–纯物理(外部)按键&#xff0c;数字键盘控制控件 文章目录 LVGL系列一、LVGL移植 一、背景方式一&#xff1a;自定义事件发送与处理函数方式二&#xff1a;利用l…...

FPGA开发——UART回环实现之接收模块的设计

一、简介 因为我们本次进行串口回环的实验的对象是FPGA开发板和PC端&#xff0c;所以在接收和发送模块中先编写接收模块&#xff0c;这样可以在后面更好的进行发送模块的验证。&#xff08;其实这里先编写哪个模块&#xff09;都不影响&#xff0c;这里看自己心情&#xff0c;反…...

Debezium系列之:记录一次SQLServer数据库数据不采集,恢复采集造成下游承压的情况,以及相对应的详细解决方案

Debezium系列之:记录一次SQLServer数据库数据不采集,恢复采集造成下游承压的情况,以及相对应的详细解决方案 一、背景二、查看CDC表情况三、 排查数据库是否开启代理四、排查表是否开启CDC五、下游承压情况六、解决方案一、背景 Connector状态正常,但几十台SQLServer数据库…...

Linux线程基础学习记录

0.线程特点 &#xff08;1&#xff09;.线程共享资源&#xff1a;一个进程下的多个线程共享以下资源 可执行的指令 静态数据 进程中打开的文件描述符 当前工作目录 用户ID 用户组ID &#xff08;2&#xff09;.线程私有资源&#xff1a; 线程ID PC(程序计数器&#xff09;和相…...

【Python学习-UI界面】PyQt5 小部件12-QStackedWidget 多页显示

功能和 QTabWidget 类似&#xff0c;它也有助于高效利用窗口的客户区域。 QStackedWidget 提供了一个窗口堆栈&#xff0c;每次只能查看一个窗口。它是建立在 QStackedLayout 之上的一个有用的布局。 样式如下: 右键可以变型为QTabWidget...

Mybatis中好用的元对象反射工具类 - MetaObject

一、前言 在获取map对象或者是其他深层嵌套对象&#xff0c;如果你的做法是挨个取出判空然后继续再向下查找&#xff0c;那么可以看看本文的方案&#xff0c;它或许能让你打开新的思路。 作为一名java开发人员&#xff0c;Mybatis几乎是我们无法避开的ORM框架&#xff0c;如果你…...

javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级,nginx配置跨域

文章目录 1. 前置知识2. 原理和解决方案总结2.1. 跨域不通过原理流程图2.2. 实现原理&#xff1a;添加以下http响应头2.3. 四种跨域实现方式及优先级&#xff08;从高到低&#xff09; 3. 具体实现代码3.1. 跨域全局配置方式-Filter(全适用)3.2. 跨域全局配置方式-SpringMvc3.3…...

深入理解JavaScript性能优化:从基础到高级

引言 在当今快速发展的Web世界中,性能已经成为衡量应用质量的关键指标。随着Web应用复杂度的不断提升,JavaScript作为前端开发的核心语言,其性能优化变得尤为重要。本文旨在全面深入地探讨JavaScript性能优化的各个方面,从基础概念到高级技巧,帮助开发者构建高效、流畅的Web应用…...

java+springboot实现定时任务

由于是初级程序员&#xff0c;基于注解的形式实现了一个简单的定时任务&#xff1b; 1. 使用Scheduled注解 Spring的Scheduled注解是一种非常简单和便捷的实现定时任务的方式。通过在方法上添加Scheduled注解&#xff0c;我们可以指定方法在特定的时间间隔或固定的时间点执行…...

1.3 数据库的发展历史与演变

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…...

The field file exceeds its maximum permitted size of 1048576 bytes

场景: 再系统后台上传解析对账文件时大小超过1M就会报错 分析: 排查错误时了解MultipartFile默认上传大小就是1M,但是发现项目配置文件配置了上传大小100M,但是这个大小没有生效 因为项目启动并没有使用到这个配置大小并把他应用到file配置里面,经过测试发现只需要增加配置…...

【Es】python es操作

表 因为es是集群所以es_hosts是列表 from elasticsearch import Elasticsearch ES_HOSTS ["127.0.0.1:9200"] ES_HTTP_AUTH "******************"# 连接Es es Elasticsearch(hostsES_HOSTS ,http_authES_HTTP_AUTH ,maxsize60,timeout30,max_retries3…...

吃透前端文件上传与文件相关操作 多文件上传 大文件切片上传 拖拽上传 后续还会更新 断点续传等等

最近在学文件上传的操作,所以想把学习到东西写成一文章 这片文章是我以小白视角 慢慢学习并熟悉前端文件相关操作的流程总结出来的 前端文件上传 我首先想到是 <input type"file">**选择文件**</input>如果我们想限制上传文件的格式,大小或进行裁剪分片…...

用python制作88键赛博钢琴(能用鼠标键盘进行弹奏)

用python制作88键赛博钢琴 前言 恭喜这位博主终于想起了自己的账号密码&#xff01; 时光荏苒&#xff0c;转眼间已逾一年未曾在此留下墨香。尽管这一年间&#xff0c;博主投身于无尽的忙碌与挑战之中&#xff0c;但令人欣慰的是&#xff0c;那份初心与热情似乎并未因岁月的流…...

zdpgo_gin_login 框架20240815更新,增加注册路由的功能,一个方法自动拥有注册和登录两个API接口

zdpgo_gin_login 适配gin框架的登录注册功能组件&#xff0c;通过本框架轻松拥有登录注册相关的API接口 特性&#xff1a; 自动生成注册接口&#xff0c;具备密码加密的功能自动生成登录接口&#xff0c;具备JWT Token生成的功能 安装 go get github.com/zhangdapeng520/z…...

搭配Intel第13代酷睿处理器

高性能内存硬盘这么买 intel第13代酷睿已经于2022年10月底正式上市。相比于第12代酷睿性能大涨,内置20条PCle通道(16条PCle 5.0和4条PCle 4.0)、可最多支持128GB DDR5 5600/DDR4 3200双通道内存,搭配Z790系列主板组建高端性能平台,满足未来设计、游戏、专业应用等需求。如…...

uniapp快速回顾,新学websocket连接和BLE连接

Uni APP的学习 官方文档 uni-app官网 (dcloud.net.cn) 任何的博客都不如官方文档 一、快速复习 文件结构 main.js 功能&#xff1a;项目的入口文件&#xff0c;初始化 Vue 实例。 App.vue功能&#xff1a;根组件&#xff0c;包含应用的基本结构和全局样式。 manifest.js…...

激光测距传感器

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、产品原理&#xff1a;二、产品介绍&#xff1a;三、应用特点四、应用案例&#xff1a;1.冶金钢铁板卷材开卷工…...

从数据分析到智能生产:AI在工业中的应用与未来

导语 | 人工智能技术的迅猛发展&#xff0c;正在引领第四次工业革命悄然而至。尽管 AI 技术在工业领域的部署仍有诸多难题亟待解决&#xff0c;但这并不能阻挡历史趋势的车轮滚滚向前&#xff0c;AI 正在为工业领域带来新的变革。今天&#xff0c;我们特邀了上海腾展长融董事 &…...

讲讲android art虚拟机的内存

Android 的 ART&#xff08;Android Runtime&#xff09;虚拟机的内存管理是一个复杂但重要的部分。 ART 虚拟机的内存主要包括以下几个关键区域&#xff1a; Java 堆&#xff08;Java Heap&#xff09;&#xff1a; 这是存储 Java 对象实例的主要区域。堆内存被进一步划分为不…...

构建高效社群生态:探索社群系统的力量与未来

在数字化时代的大潮中&#xff0c;社群系统作为连接人与人、促进信息交流与资源共享的重要平台&#xff0c;正日益成为企业、组织乃至个人不可或缺的一部分。它不仅为成员提供了展示自我、学习成长的舞台&#xff0c;更为社群管理者创造了高效管理、精准运营的工具。今天&#…...

数据结构——排序(3):交换排序(续)

目录 一、快速排序 (1)hoare版本 ①思路 ②过程图示 ③思考 ④代码实现 ⑤代码解释 &#xff08;2&#xff09;挖坑法 ①思路 ②过程图示 ③思考 ④代码实现 ⑤代码解释 &#xff08;3&#xff09;lomuto前后指针 ①思路 ②过程图示 ③思考 ④代码实现 ⑤代…...

2024最新版本Python安装及开发环境配置(vscodepython)

python安装 去Python官网下载最新版本&#xff1a; 接下来请一步步按照图片操作&#xff1a; 这样子就安装完成了 测试Python安装是否成功 先打开终端 右键Windows徽标&#xff0c;点击终端 然后输入python&#xff0c;如果如下图所示&#xff0c;就说明安装成功&#xff0…...

机器学习的定义

机器学习 机器学习的定义 机器学习是人工智能的一个分支&#xff0c;它使计算机系统能够从经验中学习并改进&#xff0c;而无需进行明确的编程。机器学习算法分析和解释数据&#xff0c;然后使用该数据来做出预测或决策&#xff0c;随着时间的推移&#xff0c;它们会变得更加准…...

2024-08-05升级问题:Android中ScrollView嵌套listview并解决listview显示问题

问题&#xff1a; 当ScrollView嵌套ListView时&#xff0c;ListView的高度设置为wrap_content时出现ListView的高度不能完全展开&#xff0c;而只显示的第一个Item。 解决方法&#xff1a; 按item的个数乘以高度计算出listview的总高度&#xff0c;并在数据变化时直接设置lis…...

【热度文章】Java设计模式之中介者模 式

ava 中的中介者模式 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为型设计模式&#xff0c;它通过一个中介对象来封装一系列对象之间的交互&#xff0c;使这些对象之间不需要显式地相互引用&#xff0c;从而降低了对象之间的耦合度。 中介者模式的主要角色&…...

【3.0】vue3语法

【3】vue3语法 【一】vue前提 【1】定义变量 # 1 const是常量--》不允许变的 # 2 咱们用 ref包裹后&#xff0c;是个对象&#xff0c;虽然对象是常量&#xff0c;对象不能变&#xff0c;对象.value可以变化 # 3 之所以定义成const原因是&#xff0c;后期不能修改对象 【对象.…...