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

新乡网站设计公司佛山建站模板

新乡网站设计公司,佛山建站模板,程序员做网站外快,wordpress 分类页 获取别名分布式是现在的比较主流的技术,常常和微服务一起出现。那么对于多个实例之间,如何证分布式系统中多个进程或线程同步访问共享资源呢?我们其实一想到的就是锁,我们在java里边有 synchronized, 在python里有lock,但是这个…

分布式是现在的比较主流的技术,常常和微服务一起出现。那么对于多个实例之间,如何证分布式系统中多个进程或线程同步访问共享资源呢?我们其实一想到的就是锁,我们在java里边有 synchronized, 在python里有lock,但是这个只能到证在单机的时候不会出现线程安全问题,但是在分布式的环境下,这种方式就没有任何的作用了。shigen在实习的时候就遇到了这样的问题,最开始还不知道分布式锁。但是今天,这篇文章将会带你读懂分布式锁和它的实现方式。

题外话

先来题外话引入今天的话题哈,现在的面试,八股文总会提到超卖问题怎么解决,恰恰在昨天下班的时候看到了这样的一篇文章。背景我也不想去研究了,毕竟咱也不是重度的吃瓜群众,比较吸引我的事超额超卖问题。当时不由得一惊:擦,这不就是面试经常问的问题吗?要是同行写出的程序问题,这不得去祭天。

超额超卖新闻

吓得我赶紧回来研究一下分布式锁。

分布式锁

概念是这样的:分布式锁是一种用于保证分布式系统中多个进程或线程同步访问共享资源的技术

同我们认识的synchronized锁和其它的lock锁一样,分布式锁也是有要求的:

分布式锁要求
  1. 互斥性:在任意时刻只能有一个客户端持有锁。
  2. 不会发生死锁:即使持有锁的客户端发生故障,也能保证锁最终会被释放。
  3. 具有容错性:分布式锁需要能够容忍节点故障等异常情况,保证系统的稳定性。
实现方案

1.基于数据库实现的分布式锁

可以通过数据库的乐观锁或悲观锁实现分布式锁,但是由于数据库的操作比较慢,不适合高并发场景。

2.基于 ZooKeeper 实现的分布式锁

ZooKeeper 是一个高可用性的分布式协调服务,以前在微服务中也作为注册中心使用,是CP的。可以通过它来实现分布式锁。但是使用 ZooKeeper 需要部署额外的服务,增加了系统复杂度。所以,shigen也很少使用这个。

3.基于 Redis 实现的分布式锁

Redis支持分布式部署,可以通过Redis的原子操作实现分布式锁,而且具有高性能和高可用性。

具体实现

mysql

这里需要注意:不要小瞧了数据库,数据库可以实现悲观锁和乐观锁

悲观锁

悲观锁的概念可以理解为:不管是谁来操作数据,我都要上一把锁!

乐观锁

其实就是在数据修改的时候加上一个版本号,我们在修改的时候加上版本号作为去修改的条件。这一点shigen是使用elasticSearch的时候也遇到过。

其实这样看起来,mysql实现分布式锁还是比较简单的。但是你想想,都上分布式了,肯定对性能上有要求。这样的操作,DB上的压力很大,mysql需要不断的从磁盘中加载数据到内存中,性能上的提升不是很明显的。

zookeeper

实现稍微的复杂,这里不讲,目前也没有接触到这样的项目。不过它在CAP理论中是CP理论,对于数据的一致性要求高的可以考虑采取它作为解决方案。

redis

最后讲一下给予内存的数据库redis,提到redis,就不得不提到redLock,俗称的红锁。我们在Spring boot的项目中配置好redisson即可使用。

其实写法上和Java的lock锁差不多,都有获得锁、释放锁的过程。

总结

在文章的最后我们来一波小总结, 即:Redis VS Zookeeper。

Redis 和 ZooKeeper 都可以用来实现分布式锁,它们在实现分布式锁的机制和原理上有所不同,具体区别如下:

  1. 数据存储方式:Redis 将锁信息存储在内存中,而 ZooKeeper 将锁信息存储在 ZooKeeper 的节点上,占用的是磁盘的空间。
  2. 锁的释放:Redis 的锁是通过设置锁的过期时间来自动释放的,而 ZooKeeper 的锁需要手动释放,如果锁的持有者出现宕机或网络中断等情况,需要等待锁的超时时间才能自动释放。
  3. 锁的竞争机制:Redis 使用的是单机锁,即所有请求都直接连接到同一台 Redis 服务器,容易发生单点故障;而 ZooKeeper 使用的是分布式锁,即所有请求都连接到 ZooKeeper 集群,具有较好的可用性和可扩展性——集群的优势。
  4. 一致性:Redis 的锁是非严格意义下的分布式锁,因为在多台机器上运行多个进程时,由于 Redis 的主从同步可能会存在数据不一致的问题;而 ZooKeeper 是强一致性的分布式系统,保证了数据的一致性。
  5. 性能:Redis 的性能比 ZooKeeper 更高,数据的存储位置不同,一个是内存,另一个是在磁盘中。

总之,Redis 适合实现简单的分布式锁场景,而 ZooKeeper 适合实现复杂的分布式协调场景,也就是 ZooKeeper 适合强一致性的分布式系统。具体场景具体的分析。


以上就是《分布式锁如何实现》的全部内容了,觉得不错的话,记得点赞支持一下哈!

shigen一起,每天不一样!

http://www.yayakq.cn/news/675326/

相关文章:

  • 东莞专业拍摄做网站照片网站建设新报价图片欣赏
  • 农业推广新网seo关键词优化教程
  • 骗子会利用钓鱼网站做啥遵义住建局查询网站
  • 网站制作动网页版传奇开服
  • 江门网站建设系统电商网站开发设计文档
  • 如何百度搜索到自己的网站线上卖货平台有哪些
  • 纯html网站模板wordpress超级大菜单如何使用
  • 顺德网站找人做建筑施工的网站
  • 青岛制作网站哪家公司好wordpress 设置首页
  • 建设银行网站ie11打不开百度云视频 wordpress
  • 手机网站推广法上海网络推广外包
  • php网站怎么用mysql新建数据库网站建设咨询
  • 万网域名跳转到指定网站wordpress sharethis
  • 在什么网站做公司人员增减大型网站开发流程和步骤
  • 网站icp备案需要多久山东网站推广营销设计
  • 建设网站的意义知乎个人网页制作成品整页
  • 中国最大的网站建设入门网站分析应该怎么做
  • 枣庄市建设局网站网站公司
  • 农业网站建设的特点是排名点击软件
  • 做企业网站怎么收费的做公司网站别人能看到吗
  • 如何做网站拥有自己的地址免费建站平台官网
  • wap网站 微信登录网站建设技术支持 会天下
  • 评价中国建设银行网站做优惠券网站要多少钱
  • 汕头企业网站建设流程专门做网站开发的公司
  • 广西网站建设设计电子商务网站的建设费用案例
  • 建设产品网站网站登录慢
  • 如何开wordpress网站网站开发的阶段流程图
  • 公司网页网站建设 ppt软件最全的网站
  • 做一个网站得做多少个页面网络网站开发设计
  • 成都网站设计费用广告公司排行榜