序曲:
本期不讲小程序,讲分布式哈!!!工作久了,容易在自己狭小的领域里停滞不前。为了跳出舒适圈,我时常观看一些互联网上的直播课程,以便持续更新自己的技术。当然了,这些课程都是采取了免费+付费的策略。初始都是免费给你看一个直播系列课程,如果你稍稍变得对讲师画的蓝图感兴趣,就要花费8000+以上学费以求短时间内练就神功。我发现这些讲师有一个共性,就是都喜欢用大保健来做比喻,以至于技师这个词出现的频次远高于技术,大概因为观众中女程序员比较少,讲师也无所顾忌。
正文:
我最近看的一期是利用一致性哈希算法来解决分布式缓存扩容带来的缓存雪崩的问题,我们来一起探讨下。话不多说,先上2张图镇文。
假设我们有一个网站,并发访问量是非常高的。直接读写数据库的方式肯定不能及时处理用户的大量请求,要知道3秒不返回,53%的用户可能就关掉页面离开了。为了降低数据库的访问压力,于是我们用nginx作负载均衡,引入Redis作为缓存机制(略掉应用服务器部分)。现在我们一共有三台机器可以作为Redis服务器,如上图所示。
既然有3台机器,对于海量用户的每次访问,我们可以按照 h = Hash(key) % 3 算法简易计算其哈希值,那么如果我们将Redis Server分别编号为0、1、2,就可以根据上式和key计算出服务器编号h,然后去访问。大概数据的缓存就如下图这个样子。
老铁想想看,这样缓存数据可以想对均匀的分布在Redis Server上,这样真的就万事大