redis master实例宕机的时候,可能导致多个客户端同时完成加锁,这种情况怎么解决?
来源:云原生后端社区
https://www.yuque.com/server_mind/answer
我们的解决办法是单独有一台redis负责分布式锁,这台机器4核16G PCIESSD,并且只负责分布式锁这一项业务,不允许存其它的任何数据,也不允许有slave节,所有的锁都只信任这一台机器的结果,如果这台机器宕机了,那业务也跟着挂,挂了也就是加锁失败,1秒内获取锁失败达到1000次,会触发我们的告警信息,这时候就需要人工介入了。
我们加锁是分了2层的,分布式节点内部先加锁,内部获取到锁之后再去竞争分布式锁(用一个CopyOnWriteArraySet做锁,将要操作的对象做key向这个对象add,add成功即表示拿到节点内部锁,再去竞争分布式锁,这个key我们有长度限制,不允许大于64字节,大于64字节的全部md5之后加上当前对象的部分特征即可),这样到真正这台机器时的竞争量已经很低很低了(基本上我们的统计结果是同时到达这台机器竞争分布式锁的只有节点个数那么多台机器了,最惨的情况也只有分布式节点数的2倍多点),这套系统并发7000到10000,峰值30000,但是这台机器已稳定运行2年多,从未触发过警告和宕机,很傲娇,这套体系出自我之手,笨办法,但相对实用
来源:云原生后端社区
https://www.yuque.com/server_mind/answer
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。