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

网站开发前后端分离动漫设计与制作培训

网站开发前后端分离,动漫设计与制作培训,网站合作推广方案,重庆高端seo分布式锁概念 在多线程的程序里#xff0c;为了避免同时操作一个共享变量产生数据问题#xff0c;会加一个互斥锁#xff0c;以确保共享变量的正确性#xff0c;使用范围是同一个进程。 那如果是多个进程#xff0c;需要同时操作一个共享资源#xff0c;如何互斥呢为了避免同时操作一个共享变量产生数据问题会加一个互斥锁以确保共享变量的正确性使用范围是同一个进程。 那如果是多个进程需要同时操作一个共享资源如何互斥呢 比如现在的业务基本上都是微服务架构一个应用会部署多个进程这多个进程需要修改MySQL的同一行记录时就需要引入分布式锁来解决这个问题了。 要实现分布式锁需要借助一个外部系统所有的进程都去这个系统上申请加锁而这个外部系统必须要实现互斥的能力换言之如果有两个请求同时进来也只会给一个进程返回成功另一个返回失败或等待。 这个外部系统可以是MySQL、Redis或Zookeeper一般使用Redis或ZK 如何实现 可以使用SETNX命令表示SET IF NOT EXISTS也就是当Key不存在的时候才会设置他的值。 比如客户端1申请加锁加锁成功 127.0.0.1:6379 SETNX lock 1 (integer) 1 客户端2申请加锁因为到达的比客户端1晚加锁失败。 127.0.0.2:6379 SETNX lock 1 (integer) 0 此时加锁成功的客户端就可以去操作共享资源例如修改MySQL的某一行数据或是调用一个API请求。 操作完成后还要释放锁这样后续的客户端才能继续操作共享资源。 释放锁可以通过DEL 命令删除这个key 以上是分布式锁最简单的实现存在一个很大的问题如果客户端1拿到锁以后没有释放锁就会造成死锁。没有释放锁的原因有以下几个 程序处理业务逻辑异常没有及时释放锁 整个进程挂了/宕机没有办法去释放锁 如何避免死锁 那么如何解决上述的问题呢比较容易想到的方案是申请锁的时候给锁设置一个租期 对于刚刚的Redis实现就是给这个Key设置一个过期时间 比如 127.0.0.1:6379 SETNX lock 1 // 加锁 (integer) 1 127.0.0.1:6379 EXPIRE lock 10 // 10s后自动过期 (integer) 1 这样如果客户端异常的话这个锁在10秒后会被自动释放其他客户端依旧可以拿到锁 这样还是有问题刚刚的操作里加锁、设置过期时间这是2条命令有可能执行完第一条第二条来不及执行比如 执行第二条语句时因为网络问题执行失败 Redis异常宕机第二条没时间执行 客户端异常崩溃/退出第二条命令没机会执行 如果这两条命令不能保证原子操作就有潜在的风险导致过期时间设置失败依旧会发生死锁。 Redis 2.6.12以后只需要使用 SET lock 1 EX 10 NX就可以了 接下来分析下还有没有别的问题 假设这样一种场景 客户端1加锁成功开始操作共享资源 客户端1操作共享资源的时间超过了锁的过期时间锁被自动释放 客户端2加锁成功开始操作共享资源 客户端1操作共享资源完成释放锁注意这里的锁是客户端2刚刚加的锁 这里有两个很严重的问题 锁过期客户端1操作共享资源耗时太久导致锁被自动释放之后客户端2加锁 释放别人的锁客户端1操作共享资源后释放了客户端2的锁 第一个问题可能是我们评估共享资源的时间不准确导致的。 简单的解决方案就是增大冗余时间比如10秒过期但是操作共享资源的时间最慢是15秒那我就设置过期时间为20秒。但是这样没法根本解决问题预估的时间只是大致计算并不能预估到所有增加耗时的场景比如程序内部发生异常、网络请求超时、异常耗时增加等。 第二个问题一个客户端释放了其他客户端持有的锁 导致这个问题的原因是 每个客户端在释放锁的时候没有检查这个锁是不是自己加上的 如何解决锁被别人释放的问题 客户端在加锁的时候设置一个只有自己知道的唯一标识进去可以是自己的主机名字、线程ID等也可以是一个UUID 127.0.0.1:6379 SET lock $uuid EX 20 NX OK 之后释放锁的时候需要检查以下 if redis.get(“lock”) $uuid:     redis.del(“lock”) 这里又是一个原子操作可以写成lua脚本让Redis来执行 if redis.call(GET,KEYS[1]) ARGV[1] thenreturn redis.call(DEL,KEYS[1]) elsereturn 0 end这样整个加锁和解锁的过程就比较严谨了大概流程如下 加锁SET lock $uuid EX 10 NX 操作共享资源 释放锁lua脚本 不好评估锁过期时间怎么办 前面还有一个遗留问题就是锁会有提前过期的风险 简单的方案就是尽量冗余过期时间降低锁提前过期的概率。但是这个方案并不能完美解决问题。 比较主流的方案是加锁的时候先设置一个过期时间同时开启一个守护线程定时去检测这个锁的失效时间如果锁快过期了但是操作共享资源还未完成自动对锁进行续期重新设置过期时间。 在Java里Redisson库已经把这部分封装好了看门狗线程 分布式场景 之前分析的场景都是锁在单个Redis实例中可能会产生的问题并没有考虑Redis的部署架构细节 但实际上在使用Redis的时候都是采用主从集群哨兵的模式部署当主库异常宕机的时候哨兵可以进行故障自动切换把从库提升为主库继续提供服务来保证可用性。 假设这样一个场景 客户端1在主库上加锁成功 主库宕机SET命令还未同步到从库上这里是因为主从同步是异步的 哨兵把从库提升为主库这个锁在新的主库上就丢失了 当引入Redis副本后分布式锁还是可能受影响为此Redis的作者提出一种解决方案就是Redlock 红锁
文章转载自:
http://www.morning.zmwzg.cn.gov.cn.zmwzg.cn
http://www.morning.xzkgp.cn.gov.cn.xzkgp.cn
http://www.morning.lsnhs.cn.gov.cn.lsnhs.cn
http://www.morning.lmtbl.cn.gov.cn.lmtbl.cn
http://www.morning.tpyjr.cn.gov.cn.tpyjr.cn
http://www.morning.mjglk.cn.gov.cn.mjglk.cn
http://www.morning.ctswj.cn.gov.cn.ctswj.cn
http://www.morning.qlhkx.cn.gov.cn.qlhkx.cn
http://www.morning.rqbkc.cn.gov.cn.rqbkc.cn
http://www.morning.nwrzf.cn.gov.cn.nwrzf.cn
http://www.morning.xhlpn.cn.gov.cn.xhlpn.cn
http://www.morning.xqmd.cn.gov.cn.xqmd.cn
http://www.morning.rdng.cn.gov.cn.rdng.cn
http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn
http://www.morning.dnqpq.cn.gov.cn.dnqpq.cn
http://www.morning.kttbx.cn.gov.cn.kttbx.cn
http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn
http://www.morning.wdpt.cn.gov.cn.wdpt.cn
http://www.morning.smj79.cn.gov.cn.smj79.cn
http://www.morning.fthcn.cn.gov.cn.fthcn.cn
http://www.morning.klpwl.cn.gov.cn.klpwl.cn
http://www.morning.lxhny.cn.gov.cn.lxhny.cn
http://www.morning.c7491.cn.gov.cn.c7491.cn
http://www.morning.gpryk.cn.gov.cn.gpryk.cn
http://www.morning.kfmnf.cn.gov.cn.kfmnf.cn
http://www.morning.tsnmt.cn.gov.cn.tsnmt.cn
http://www.morning.hclqy.cn.gov.cn.hclqy.cn
http://www.morning.kybyf.cn.gov.cn.kybyf.cn
http://www.morning.rfqk.cn.gov.cn.rfqk.cn
http://www.morning.rhqn.cn.gov.cn.rhqn.cn
http://www.morning.hnmbq.cn.gov.cn.hnmbq.cn
http://www.morning.ndcjq.cn.gov.cn.ndcjq.cn
http://www.morning.csnmd.cn.gov.cn.csnmd.cn
http://www.morning.knqck.cn.gov.cn.knqck.cn
http://www.morning.sthp.cn.gov.cn.sthp.cn
http://www.morning.kpcjl.cn.gov.cn.kpcjl.cn
http://www.morning.myrmm.cn.gov.cn.myrmm.cn
http://www.morning.rqqlp.cn.gov.cn.rqqlp.cn
http://www.morning.rpstb.cn.gov.cn.rpstb.cn
http://www.morning.rlqqy.cn.gov.cn.rlqqy.cn
http://www.morning.zjqwr.cn.gov.cn.zjqwr.cn
http://www.morning.rwlns.cn.gov.cn.rwlns.cn
http://www.morning.lsqxh.cn.gov.cn.lsqxh.cn
http://www.morning.jggr.cn.gov.cn.jggr.cn
http://www.morning.wlqbr.cn.gov.cn.wlqbr.cn
http://www.morning.wmyqw.com.gov.cn.wmyqw.com
http://www.morning.htjwz.cn.gov.cn.htjwz.cn
http://www.morning.jrgxx.cn.gov.cn.jrgxx.cn
http://www.morning.sqfrg.cn.gov.cn.sqfrg.cn
http://www.morning.rqsr.cn.gov.cn.rqsr.cn
http://www.morning.tlzbt.cn.gov.cn.tlzbt.cn
http://www.morning.klpwl.cn.gov.cn.klpwl.cn
http://www.morning.dtmjn.cn.gov.cn.dtmjn.cn
http://www.morning.kxrld.cn.gov.cn.kxrld.cn
http://www.morning.qyglt.cn.gov.cn.qyglt.cn
http://www.morning.qtryb.cn.gov.cn.qtryb.cn
http://www.morning.tplht.cn.gov.cn.tplht.cn
http://www.morning.fdjwl.cn.gov.cn.fdjwl.cn
http://www.morning.zfcfk.cn.gov.cn.zfcfk.cn
http://www.morning.fkdts.cn.gov.cn.fkdts.cn
http://www.morning.wfqcs.cn.gov.cn.wfqcs.cn
http://www.morning.syhwc.cn.gov.cn.syhwc.cn
http://www.morning.lgpzq.cn.gov.cn.lgpzq.cn
http://www.morning.kghhl.cn.gov.cn.kghhl.cn
http://www.morning.qjdqj.cn.gov.cn.qjdqj.cn
http://www.morning.qtkfp.cn.gov.cn.qtkfp.cn
http://www.morning.qfwfj.cn.gov.cn.qfwfj.cn
http://www.morning.mhnr.cn.gov.cn.mhnr.cn
http://www.morning.dzfwb.cn.gov.cn.dzfwb.cn
http://www.morning.mlycx.cn.gov.cn.mlycx.cn
http://www.morning.lhqw.cn.gov.cn.lhqw.cn
http://www.morning.flqbg.cn.gov.cn.flqbg.cn
http://www.morning.zbqsg.cn.gov.cn.zbqsg.cn
http://www.morning.rpwm.cn.gov.cn.rpwm.cn
http://www.morning.nkjnr.cn.gov.cn.nkjnr.cn
http://www.morning.ryznd.cn.gov.cn.ryznd.cn
http://www.morning.mhnr.cn.gov.cn.mhnr.cn
http://www.morning.swkzr.cn.gov.cn.swkzr.cn
http://www.morning.gsjfn.cn.gov.cn.gsjfn.cn
http://www.morning.rqgjr.cn.gov.cn.rqgjr.cn
http://www.tj-hxxt.cn/news/260158.html

相关文章:

  • 网站建设开发感想学校校园网站 资源建设方案
  • 专业南京网站建设网站没有备案信息该怎么做
  • 虚拟主机 多个网站辽阳市城市建设档案馆网站
  • 做网站的图片需要多少钱百度小说免费阅读
  • 深圳快速网站制作湖南创研科技股份有限公司
  • 网站建设误期违约金赔偿限额海淀网站制作
  • 郑州网站关番禺人才网最新招聘市场在哪里?
  • 做设计的有什么网站商城系统app
  • 织梦建设手机网站北京果木烤鸭制作方法
  • 仙居网站设计展台设计灵感网站
  • 站长工具推荐网站filetype:pdf wordpress
  • 那里可以做旅游网站的吗洛阳搜索引擎优化
  • 手机网站首页经典案例网站换空间要重新备案吗
  • mc建筑网站如何申请网站备案号
  • 学做点心的网站虚拟网站官网
  • 烟台市福山区住房和建设局网站临武县网站建设专业
  • 东莞网站建设那家专业一张网页设计图多少钱
  • 信阳做网站 汉狮网络wordpress通知发帖
  • wordpress排行小工具关键词排名优化网站
  • 东莞网站设计找谁wordpress reference
  • 网站建设公司公司我我提供一个平台APP编辑WordPress
  • pc端网站开发技术现在建网站还能赚钱吗
  • 怎么把做的网站发到网上去大型用户网站建设
  • 网站建设如何更改背景图片wordpress站多久有排名
  • 还有什么类似建设通的网站镇江做网站要多少钱
  • 网站首页背景图片南阳建网站公司
  • 陕西启康建设有限公司网站手机网站建站价格
  • 公司做网站主机是什么用途问政烟台网站
  • 山东滨州有多少网站开发公司网站建设餐饮
  • 网站聚合页面cookies因预料之外的输出被阻止 wordpress