高并发下本地锁与分布式锁 (查看原文)

1. 分布式锁相关考虑分布式商品秒杀系统,库存量较少的商品,如何保证商品数量不超卖?其实需要保证这种一致性:某个人点击秒杀后系统中查出来的库存量和实际扣减库存时库存量的一致性就可以...

adamswanglin.github.io   
评论 (9)
Thumb

u153716 2017-04-05 12:43

我感觉增加个分布式锁等待队列吞吐量会不会提高?
Thumb

zjpopo 2017-04-05 16:02

想法一致,赞一个
Thumb

£幻影£ 2017-04-06 03:26

对于这种情况,我的做法只会进行分层设计,一,我不希望过多的线程去等待,因此我需要把它们释放了,从而转变为集合或存储的方式保存它们的请求。二是数据库在完成一个子项(保存的请求)操作之后,开始处理下一个子项。如果对于数据可分割多处理,那么无非就是采用线程池处理每一个闭区间的需求。
Thumb

王霖 2017-04-06 08:18

@幻影,这软件竟然没有回复功能,还是我没找到,不知道你能不能看到。一开始我也不想用锁这么重量级的方式去序列化请求,但是没有想到好的办法,你说的方式有一点不太理解就是你保存完请求用单线程方式处理的话,请求的线程什么时候返回的,返回什么?
Thumb

u267547 2017-04-06 11:22

写的很好👍 还是能有benchmark对比的性能数据信息就更好了
Thumb

王霖 2017-04-06 16:29

@左城,过几天增加zookeeper做的分布式锁,能实现多实例间分布式锁的等待队列
Thumb

godpan 2017-04-07 07:57

不知道Akka是否可以提供一种新思路,分布式暂时没做过,但以目前单机运行情况来说,可以是一种好的选择。
Thumb

王霖 2017-04-07 09:00

@godpan,不熟悉akka,简单看了下好像确实可以用到这里,这周有空深入研究下
Thumb

£幻影£ 2017-04-08 21:56

使用分层设计并非是一条线的编码,而是采用分层,分段的方式去设计,去理解。数据掌握在你的手里,而你需要什么样的数据格式也在你的设计里。如同你说的,如果让一大把线程等,那么你是否会发现线程消耗是大的,于是你需要把该线程的数据进行格式化存储(bean对象,或数据库记录化),把你这些请求交给另一个线程池去做进一步的请求处理,释放该线程,并且给远端提供反馈,而另一方面如果想要知道处理的最终结果,那么你的再次去请求.而整个过程中,不需要程序去等待,毕竟最好用户还不是花时间等待,但程序可不能这么的等待。
Post wxa image%2f8fd3d8b16ea34e118fd6afeb89e49013 用微信扫描
小程序码阅读原文

开发者头条

程序员分享平台