网站在别人那里已经建好了_公司里要进行修改_怎么做,收费网站推广,wordpress 缺少样式表,wordpress 调用编辑器假设#xff0c;我们有三台缓存服务器#xff0c;用于缓存图片#xff0c;我们为这三台缓存服务器编号为0号、1号、2号#xff0c;现在#xff0c;有3万张图片需要缓存#xff0c;我们希望这些图片缓存到这3台服务器上#xff0c;以便它们能够分摊缓存的压力。做法是对缓…假设我们有三台缓存服务器用于缓存图片我们为这三台缓存服务器编号为0号、1号、2号现在有3万张图片需要缓存我们希望这些图片缓存到这3台服务器上以便它们能够分摊缓存的压力。做法是对缓存项的键进行哈希将hash后的结果对缓存服务器的数量进行取模操作通过取模后的结果决定缓存项将会缓存在哪一台服务器上这样说可能不太容易理解我们举例说明仍然以刚才描述的场景为例假设我们使用图片名称作为访问图片的key假设图片名称是不重复的那么我们可以使用如下公式计算出图片应该存放在哪台服务器上。
hash图片名称% N
因为图片的名称是不重复的所以当我们对同一个图片名称做相同的哈希计算时得出的结果应该是不变的如果我们有3台服务器使用哈希后的结果对3求余那么余数一定是0、1或者2没错正好与我们之前的服务器编号相同如果求余的结果为0 我们就把当前图片名称对应的图片缓存在0号服务器上如果余数为1就把当前图片名对应的图片缓存在1号服务器上如果余数为2同理那么当我们访问任意一个图片的时候只要再次对图片名称进行上述运算即可得出对应的图片应该存放在哪一台缓存服务器上我们只要在这一台服务器上查找图片即可如果图片在对应的服务器上不存在则证明对应的图片没有被缓存也不用再去遍历其他缓存服务器了通过这样的方法即可将3万张图片随机的分布到3台缓存服务器上了而且下次访问某张图片时直接能够判断出该图片应该存在于哪台缓存服务器上这样就能满足我们的需求了。
但是使用上述HASH算法进行缓存时会出现一些缺陷试想一下如果3台缓存服务器已经不能满足我们的缓存需求那么我们应该怎么做呢没错很简单多增加两台缓存服务器不就行了假设我们增加了一台缓存服务器那么缓存服务器的数量就由3台变成了4台此时如果仍然使用上述方法对同一张图片进行缓存那么这张图片所在的服务器编号必定与原来3台服务器时所在的服务器编号不同因为除数由3变为了4被除数不变的情况下余数肯定不同这种情况带来的结果就是当服务器数量变动时所有缓存的位置都要发生改变换句话说当服务器数量发生改变时所有缓存在一定时间内是失效的当应用无法从缓存中获取数据时则会向后端服务器请求数据同理假设3台缓存中突然有一台缓存服务器出现了故障无法进行缓存那么我们则需要将故障机器移除但是如果移除了一台缓存服务器那么缓存服务器数量从3台变为2台如果想要访问一张图片这张图片的缓存位置必定会发生改变以前缓存的图片也会失去缓存的作用与意义由于大量缓存在同一时间失效造成了缓存的雪崩此时前端缓存已经无法起到承担部分压力的作用后端服务器将会承受巨大的压力整个系统很有可能被压垮所以我们应该想办法不让这种情况发生但是由于上述HASH算法本身的缘故使用取模法进行缓存时这种情况是无法避免的为了解决这些问题一致性哈希算法诞生了。
一致性哈希的原理
https://www.zsythink.net/archives/1182/