分布式锁1java常用技术方案-编程开发技术

分布式锁1java常用技术方案-编程开发技术

ID:27822928

大小:104.23 KB

页数:7页

时间:2018-12-06

分布式锁1java常用技术方案-编程开发技术_第1页
分布式锁1java常用技术方案-编程开发技术_第2页
分布式锁1java常用技术方案-编程开发技术_第3页
分布式锁1java常用技术方案-编程开发技术_第4页
分布式锁1java常用技术方案-编程开发技术_第5页
资源描述:

《分布式锁1java常用技术方案-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、分布式锁1Java常用技术方案-编程开发技术分布式锁1java常用技术方案原文出处:Sky_YiBai前言:???由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题。所以自己结合实际工作中的一些经验和网上看到的一些资料,做一个讲解和总结。希望这篇文章可以方便自己以后查阅,同时要是能帮助到他人那也是很好的。的分割线正文:第一步,自身的业务场景:在我日常做的项目中,目前涉及了以卜•这些业务场景:场景一:?比如分配任务场景。在这个场景屮,由于是公司的业务后台系统

2、,主要是用于审核人员的审核工作,并发量并不是很高,而且任务的分配规则设计成了通过审核人员每次主动的请求拉取,然后服务端从任务池屮随机的选取任务进行分配。这个场景看到这里你会觉得比较单一,但是实际的分配过程中,由于涉及到了按用户聚类的问题,所以要比我描述的复杂,但是这里为了说明问题,大家可以把问题简单化理解。那么在使用过程屮,主要是为了避免同一个任务同时被两个审核人员获取到的问题。我最终使用了基于数据库资源表的分布式锁来解决的问题。场景二:?比如支付场景。在这个场景中,我提供给用户三个用于保护用户隐私的手机号码(这些号码是从运营商处获

3、取的,和真实手机号码看起来是一样的),让用户选择其中一个进行购买,用户购买付款后,我需要将用户选择的号码分配给用户使用,同时也要将没有选择的释放掉。在这个过程中,给用户筛选的号码要在一定时间内(用户筛选正常时间范围内)讣当前用户对这个产品具有独占性,以便保证付款后是100%可以拿到;同时由于产品资源池的资源有限,还要保持资源的流动性,即不能让资源长时间被某个用户占用着。对于服务的设计口标,一期项目上线的时候至少能够支持峰值qps为300的请求,同时在设计的过程屮要考虑到用户体验的问题。我最终使用了memecahed的add()方法和

4、基于数据库资源表的分布式锁来解决的问题。场景三:?我冇一个数据服务,每天调用量在3亿,每天按86400秒计算的qps在4000左右,由于服务的口天调用量要明显高于晚上,所以口天下午的峰值qps达到6000的,一共有4台服务器,单台qps要能达到3000以上。我最终使用了redis的setnx()和expire()的分布式锁解决的问题。????场景四:场景一和场景二的升级版。在这个场景屮,不涉及支付。但是由于资源分配一次过程屮,需要保持涉及一致性的地方增加,而且一期的设计目标要达到峰值qps500,所以需要我们对场景进一步的优化。我最

5、终使用了redis的setnx()、expire()和基于数据库表的分布式锁来解决的问题。看到这里,不管你觉得我提出的业务场景qps是否足够大,都希望你能继续看下去,因为无论你身处一个什么样的公司,最开始的工作可能都需要从最简单的做起。不要提阿里和腾讯的业务场景qps如何大,因为在这样的大场景中你未必能亲自参与项目,亲自参与项目未必能是核心的设计者,是核心的设计者未必能独自设计。如果能真能满足以上三条,关闭页面可以不看啦,如果不是的话,建议述是看完,我有说的不足的地方欢迎提出建议,我说的好的地方,也希望给我点个赞或者评论一下,算是对

6、我最大的鼓励哈。第二步,分布式锁的解决方式:1.首先明确一点,有人可能会问是否可以考虑采用ReentrantLock来实现,但是实际上去实现的时候是有问题的,ReentrantLock的lock和unlock要求必须是在同一线程进行,而分布式应用中,lock和unlock是两次不相关的请求,因此肯定不是同一线程,因此导致无法使用ReentrantLocko2.基于数据库表做乐观锁,用于分布式锁。3.使用memcached的add()方法,用丁•分布式锁。4.使用memcached的cas()方法,用于分布式锁。(不常用)5.使用re

7、dis的setnx。、expire()方法,用于分布式锁。6.使用redis的setnx()、get()>getset()方法,用于分布式锁。7.使用redis的watch、multi、cxcc命令,用于分布式锁。(不常用)8.使用zookeeper,用丁•分布式锁。(不常用)????第三步,基于数据库资源表做乐观锁,用于分布式锁:1.首先说明乐观锁的含义:大多数是基于数据版本(version)的记录机制实现的。何谓数据版本号?即为数据增加一个版木标识,在基丁•数据库表的版木解决方案中,一般是通过为数据库表添加一个“version”

8、字段来实现读取出数据时,将此版本号一同读出,Z后更新时,对此版本号加1。在更新过程中,会对版本号进行比较,如果是一致的,没有发生改变,则会成功执行本次操作;如果版本号不一致,则会更新失败。1.对乐观锁的含义有了一定的了解后,结合貝体的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。