集群,高并发问题

我遇到一个问题.我做的是关于购物的网站.该java系统集群后.如果同一时间多人购买同一商品时.库存会出现问题.比如,同时购买者有10个人,库存为5件.由于同时点击购买,结果10人都购买成功.库存变成-5.如果十人分散点击购买时没有问题.即只能5人购买.
以前不集群时我采用单利模式来解决这个问题.但是现在集群了.不能这么做了.

zookeeper实现分布式锁 就是干这事的

应该采用分布式事务来处理这种case了,看下你们的框架用的是什么事务处理机制,然后再朝分布式事务方向来靠拢。

我觉得不需要弄分布式事务把?用户购买点击提交的时候不是需要更新库存吗?你更新的时候加一个限制 where stock > 0,然后如果更新的条数是大于0的 证明更新成功,更新条数为0的证明没更新上 这时候你提示用户 该商品已售空就行了吧

jvm 一个时,用sync同步下就行,多个jvm确实不行了,可以为数据库记录加锁

用zk 实现共享锁吧 简单 又方便

两个思路
1:在数据库级别加锁:比如select for update
2:在应用级别加锁,你应用是分布式的没错,a.加分布式锁 b.单利管理库存

我觉得对于电商来说,压力大的是订单数据库和查询服务,你在应用级别做分布式应该效益不高吧?毕竟写瓶颈在数据库

数据库修改库存的时候加条件就OK了,这和分不分布什没什么关系。

乐观锁吧
如果量很大,那就乐观锁+分库分表

zookeeper