老师请问如果集群中的某个 getone节点如果挂掉了,造成少卖如何解决?
来源:11-1 分布式概念
慕前端6113766
2020-05-28
var sum int64 = 0
//预存商品数量
var productNum int64 = 1000000
//互斥锁
var mutex sync.Mutex
//计数
var count int64 = 0
//获取秒杀商品
func GetOneProduct() bool {
//加锁
mutex.Lock()
defer mutex.Unlock()
count += 1
//判断数据是否超限
if count%100 == 0 {
if sum < productNum {
sum += 1
fmt.Println(sum)
return true
}
}
return false
}
1、 getone 实质是一种分布式锁的机制,这样理解合适吗?
2、 getone 集群部署多个节点,比如说10个,那如何保证产品的总量以及消费数量的一致呢? 因为每个节点启动后,都是一个进程,进程内只能保证多个线程的访问是互斥的,但是不同节点的数据同步又该如何处理呢?
3、 假如, 在秒杀结束前,集群中的某个执行 GetOneProduct 函数的节点挂掉了,预存商品的数量 productNum 现在肯定还没到最大值1000000, 就造成了少卖,这个是不是单点故障的问题呢,该如何处理?
敬请cap老师的具体解答,谢谢。
写回答
1回答
-
慕前端6113766
提问者
2020-05-28
有懂得以上问题的小伙伴们,请给出答案,谢谢!
032021-09-14
相似问题