老师请问如果集群中的某个 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

有懂得以上问题的小伙伴们,请给出答案,谢谢!

0
3
Cap
扩展getone节点
2021-09-14
共3条回复

全流程开发 GO实战电商网站高并发秒杀系统

运用架构设计与系统化思维,从容应对不同流量等级的“秒杀”场景

1462 学习 · 443 问题

查看课程