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

假山设计制作网络优化师

假山设计制作,网络优化师,西安网站建设制作价格,郑州网站建设 服务创业分布式是现在的比较主流的技术,常常和微服务一起出现。那么对于多个实例之间,如何证分布式系统中多个进程或线程同步访问共享资源呢?我们其实一想到的就是锁,我们在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.ysxn.cn/news/2823.html

相关文章:

  • 南宁建行 网站网站外链优化方法
  • 上海专做特卖的网站广告代理
  • 网站优化公司电话今天实时热搜榜排名
  • 做网站的色彩搭配的小知识电商sem是什么意思
  • 做网站开发怎么接单外链代发免费
  • 找人做网站需要花多少钱百度推广后台登陆入口
  • 龙采做网站要多少钱推广软文发稿
  • wordpress 同步微信素材seo快速优化软件网站
  • 衡阳哪有做网站推广的怎么创建网站赚钱
  • 创意合肥网站建设世界比分榜
  • wordpress手机h5主题沈阳网络seo公司
  • 网站建设中有关数据库问题aso优化什么意思是
  • 临沂网站开发技术员江苏免费关键词排名外包
  • 福田网站建设电话朋友圈的广告推广怎么弄
  • 做网站要服务器和什么实体店营销策划方案
  • 网站霸屏怎么做seo优化报告
  • 分类网站怎么做项目seo关键词布局技巧
  • 博客社区类网站模板网络推广发展
  • 青海做网站哪家好优化设计答案六年级上册语文
  • 经典语录网站做合格党员网站建设哪家好
  • 不用购买域名做网站seo搜索引擎优化工具
  • 织梦做商城网站互联网运营推广公司
  • 棕色网站模板广州seo推广优化
  • 石嘴山北京网站建设seo刷关键词排名优化
  • 微信扫码即可打开的网站如何做班级优化大师网页版
  • 潍坊做网站教程芜湖seo
  • 个人业务网站建设企业网站建设方案策划
  • 网站asp.net安装有哪些实用的网络推广方法
  • 如何利用源码做网站成都网站建设方案服务
  • 上海建筑网站设计windows优化大师卸载不了