目录

分布式集群中的线程安全问题

解决方法

串行化

分布式锁

Redis如何实现呢?

问题:setnx刚好获取到锁,业务逻辑出现异常,导致锁无法释放

问题:可能会释放其他服务器的锁。

问题:删除操作缺乏原子性。


分布式环境下,怎么保证线程安全 - 一中晴哥威武 - 博客园

分布式集群中的线程安全问题

相比于单一部署的服务器来说,分布式架构同一个模块的系统部署了多台;对于单一服务来说,只要保证一台机器上的对于共享资源的访问是同步进行的就能保证线程安全了;

但是对于分布式系统而已,保证一台服务器的同步,并不能保证访问共享资源是同步的;

比如机器A里面采用了锁的方式进行数据的读写,机器B也是,但是它们锁住的对象不相同,导致线程不安全。

所以可以考虑使用分布式锁的方式来保证分布式中的线程的安全线,这样不同的服务不同的线程通过竞争分布式锁来获取共享资源的操作权限;

例如redis的分布式锁、zookeeper锁,都可以作为分布式线程安全的手段。

解决方法

串行化

有的时候可以通过串行化可能产生并发问题操作,牺牲性能和扩展性,来满足对数据一致性的要求。比如分布式消息系统就没法保证消息的有序性,但可以通过变分布式消息系统为单一系统就可以保证消息的有序性了。另外,当接收方没法处理调用有序性,可以通过一个队列先把调用信息缓存起来,然后再串行地处理这些调用。

分布式锁

为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件

- 互斥性。在任意时刻,只有一个客户端能持有锁。

- 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。

- 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。

- 加锁和解锁必须具有原子性。

Redis如何实现呢?

相当于把Redis当做一个锁的中心,所有的服务器如果有加锁的需求,都需要通过这个“中心”实现。

set lock uuid nx ex 12

设置lock 的值为uuid

nx 表示为不允许再设置

ex 表示过期时间 12s

比如在一台机子上 运行时 一个线程 在Redis中设置了 lock

其他机子如果想要执行程序 但是无法拿到这个锁

set 成功就会返回1 不成功就会返回0

问题:setnx刚好获取到锁,业务逻辑出现异常,导致锁无法释放

解决:设置过期时间,自动释放锁。

所以必须设置过期时间 否则别的线程无法拿到锁了

问题:可能会释放其他服务器的锁。

一台服务器做完需要同步的操作后就可以 del 锁了 让别的服务器去用

所须在删除锁之前先进行判断 看是不是自己的锁,通过 uuid进行锁的标识

如果是自己的锁 那么删除 别人在set lock 为自己的uuid,如果不是自己的说明 已经过了过期时间 则自动释放。

问题:删除操作缺乏原子性。

在判断是自己的uuid 后准备删除 这时候正好过期,被另一个线程拿到了这把锁。

也会误删 所以需要使得判断和删除时原子性的,可以使用Lua脚本实现判断和删除操作的原子性。

分布式集群中如何保证线程安全?相关推荐

  1. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    Hadoop学习笔记-13.分布式集群中节点的动态添加与下架 开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如 ...

  2. PHP 分布式集群中session共享问题以及session有效期的设置

    一.Session的原理 以下以默认情况举例: session_start();之后,会生成一个唯一的session_id,每一个用户对应唯一一个session_id,每一个session_id对应服 ...

  3. 分布式集群架构场景化解决方案相关

    文章目录 前言 一.一致性Hash算法 1.1 Hash算法应用场景 1.2 普通Hash算法存在的问题 1.3 一致性Hash算法 二.集群时钟同步问题 2.1 时钟不同步导致的问题 2.2 集群时 ...

  4. tcp out of order解决_分布式集群解决方案 学习笔记

    回到目录: OrangeZh:拉勾教育:JAVA高薪训练营 学习技术篇​zhuanlan.zhihu.com 介绍 文章内容输出来源:拉勾教育 Java高薪训练营 分布式集群解决方案相关 什么是分布式 ...

  5. NOSQL,MongoDB分布式集群架构

    MongoDB分布式集群架构 看到这里相信你已经掌握了 MongoDB 的大部分基本知识,现在在单机环境下操作 MongoDB 已经不存在问题,但是单机环境只适合学习和开发测试,在实际的生产环境中,M ...

  6. 搭建Hadoop分布式集群的详细教程

    目录 写在前面 一.创建虚拟机,安装Centos 二.VMware VMnet8模式共享主机网络配置 三.克隆集群节点HadoopSlave1与HadoopSlave2 四.Linux系统配置 五.H ...

  7. 百度开源联邦学习框架 PaddleFL:简化大规模分布式集群部署

    百度开源联邦学习框架 PaddleFL:简化大规模分布式集群部署 作者 | 钰莹近两年,联邦学习技术发展迅速.作为分布式的机器学习范式,联邦学习能够有效解决数据孤岛问题,让参与方在不共享数据的基础上联 ...

  8. hadoop slaves文件_hadoop:分布式集群参数master节点的配置!

    之前的文章中我们已经将master节点的网络IP.hostname文件.hosts文件配置完成,接下来还有hadoop相关配置文件需要修改.今天我们来讲master节点hadoop的配置. 1.hdf ...

  9. CentOS 7 + Hadoop3 伪分布式集群配置

    转自:https://www.cnblogs.com/thousfeet/p/8618696.html ps:本文的步骤已自实现过一遍,在正文部分避开了旧版教程在新版使用导致出错的内容,因此版本一致的 ...

  10. 【集群分布式问题】分布式集群时钟同步问题及解决方案

    文章目录 一. 时钟不同步导致的问题 二.集群时钟同步配置 1. 分布式集群中各个服务器节点都可以连接互联⽹ 2. 分布式集群中一个节点或每个节点都不能访问互联网 一. 时钟不同步导致的问题 时钟此处 ...

最新文章

  1. HTTP 三次握手  建立连接 和  四次握手断开连接
  2. fluent计算进出口的流量差
  3. 骄傲的代价_JAVA
  4. SpringMVC(十一) RequestMapping获取Cookie值
  5. 机器学习入门必备的13张“小抄”(附下载)
  6. H3C交换机配置命令
  7. c语言广播程序,C语言socket编程---udp通信及广播
  8. sql语句中表格缩写命名_数据库表、字段命名规范
  9. 光大银行引入USB Server实现虚拟机调用Ukey
  10. 如何用用计算机名访问共享打印机,局域网怎么连接共享打印机共享
  11. 阿里云储道深度解析存储系统设计——NVMe SSD性能影响因素一探究竟
  12. 郭麒麟任《最强大脑》见证官,住杭州的台湾人清华学霸吴哲维来了
  13. 【Java】一文秒懂http请求获取FlexManager平台FBox盒子信息
  14. 关于项目部署在Tomcat中使用软连接之坑
  15. 喝一碗孟婆汤,走一回奈何桥(FLASH转载)
  16. php portal 接口,WIFI Portal登录(示例代码)
  17. UDP 不阻塞的原因
  18. DIV+CSS布局实战---海南旅游网
  19. 193页5万字智慧物流园解决方案
  20. Ubuntu18.4使用SystemMonitor实时查看CPU温度、内存、网速...

热门文章

  1. 创业公司一年工作总结
  2. android与ios设计规范,Android和ios设计规范
  3. KendoGrid的使用
  4. 计算机表格中格式隐藏了怎么办,excel表格第一列被隐藏起来了怎么办
  5. win10如何开启自带虚拟机
  6. 【转】java将excel文件转换成txt格式文件
  7. openlayer 图层上下_OpenLayers 之 图层(Layers) 详解
  8. 商业的本质 + 社交电商思考
  9. 北邮“一号邮路”上的数学体验
  10. word压缩软件,免费