了解MySQL主从复制的原理
众所周知,人类幼崽似乎是台永动机,在一天 24 小时任何时间段里都有可能向你发难。你能让自己睡个安稳觉的方法看来是在白天消耗他们的精力,因此人们想出了各种各样的方法。 当然,并不是所有的奶爸都这么不靠谱,也有人带起娃来挺正常的,Agustinus Nalwan 就是其中之一。 Agustinus Nalwan 是 Medium 上的一位博主,曾经从事计算机视觉、3D / 动画、游戏开发等方面的工作,目前供职于澳洲最大的汽车交易平台 carsale.com.au。
他有一个两岁半的儿子,名叫 Dexie。Dexie 非常活泼,喜欢动物,尤其是老鹰,经常学老鹰在家里飞来飞去。 年仅27岁的Parler首席执行官John Matze无论如何也想不到1月6日国会骚乱以来,在特朗普及其拥趸的号召下,Parler会在短短一周内,用户数从从450万用户飙升到800万,然后归零。 Parler与特朗普一起,被美国科技巨头们“社死”了。但是随着用户数据的全体曝光,Parler的麻烦显然才刚刚开始。
Parler大规模数据泄露的“罪魁祸首”是Twillio,这家为Parler提供2FA双因素认证服务(短信验证)的企业与谷歌和苹果公司一起,停止了对Parler的服务,更糟糕的是身份保护服务提供商Okta也停止了对Parler的服务,这意味着一场网络安全灾难。 首先第一点,我们可以看到,在RedLock算法中,锁的有效时间会减去连接Redis实例的时长,如果这个过程因为网络问题导致耗时太长的话,那么最终留给锁的有效时长就会大大减少,客户端访问共享资源的时间很短,很可能程序处理的过程中锁就到期了。而且,锁的有效时间还需要减去服务器的时钟漂移,但是应该减多少合适呢,要是这个值设置不好,很容易出现问题。 然后第二点,这样的算法虽然考虑到用多节点来防止Redis单点故障的问题,但但如果有节点发生崩溃重启的话,还是有可能出现多个客户端同时获取锁的情况。 假设一共有5个Redis节点:A、B、C、D、E,客户端1和2分别加锁
这样,客户端1和客户端2就同时拿到了锁,程序安全的隐患依然存在。除此之外,如果这些节点里面某个节点发生了时间漂移的话,也有可能导致锁的安全问题。 所以说,虽然通过多实例的部署提高了可用性和可靠性,但RedLock并没有完全解决Redis单点故障存在的隐患,也没有解决时钟漂移以及客户端长时间阻塞而导致的锁超时失效存在的问题,锁的安全性隐患依然存在。 结论 有人可能要进一步问了,那该怎么做才能保证锁的绝对安全呢? 对此我只能说,鱼和熊掌不可兼得,我们之所以用Redis作为分布式锁的工具,很大程度上是因为Redis本身效率高且单进程的特点,即使在高并发的情况下也能很好的保证性能,但很多时候,性能和安全不能完全兼顾,如果你一定要保证锁的安全性的话,可以用其他的中间件如db、zookeeper来做控制,这些工具能很好的保证锁的安全,但性能方面只能说是差强人意,否则大家早就用上了。
一般来说,用Redis控制共享资源并且还要求数据安全要求较高的话,最终的保底方案是对业务数据做幂等控制,这样一来,即使出现多个客户端获得锁的情况也不会影响数据的一致性。当然,也不是所有的场景都适合这么做,具体怎么取舍就需要各位看官自己处理啦,毕竟,没有完美的技术,只有适合的才是最好的。 (编辑:鹰潭站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |