如果10台缓存,挂了几台,如何让key始终缓存到新的服务器,即使挂的那台恢复了
AkataMoKa
最近登录:01/25 17:21
Aka...的其他提问
有什么好的技术可以往这个网站灌假数据?
364 阅读
请问博客数据(包含多图片)的保存,如何设计事务?
157 阅读
10年Java开发,应该是怎样的一个程度?
9K+ 阅读
为什么在部分算法里面,求平方根和求导用得那么多?
315 阅读
类似问题
一致性哈希算法以及其PHP实现
703 阅读
一致性哈希(Consistent Hashing)
550 阅读
一致性哈希(Consistent Hashing)
155 阅读
新型的大型bbs架构(squid+nginx)
16214 阅读
利用 nginx url hash 提高squid服务器命中率
1870 阅读
图片服务器的url hash架构
554 阅读
【译】从Reddit学到的七条经验
140 阅读
【PPT分享】某大型社区网站系统
1529 阅读
【PPT分享】天涯大型bbs社区网站系统.ppt
3022 阅读
构建一个高效无单点故障的分布式session服务
4062 阅读
从开发到上线,实战持续交付
294 阅读
利用Fourinone实现四大主要的分布式计算功能
336 阅读
MapReduce技术的初步了解与学习
4507 阅读
百万级PHP网站架构工具箱
34178 阅读
引用来自“eechen”的评论
一致性哈希就是,假设后端5台设备,突然down了1台,只有以前hash到这台down的设备上的请求,才会被重新hash计算到其他设备上,剩下的4台的原来hash不会变. 这样可以最大限度的保证后端设备的命中率.如果哪天这台设备好了,同样以前摊给其他4台的请求,会重新打回这台设备,最后所有的hash跟服务没down前的hash一模一样. 所以一致性哈希(consistent hash)功能对集群缓存很重要.现在的缓存不都是自动跳的么...
为什么还要重复造轮子.
这问题不严谨或者说需求不合理:
恢复后,仅仅是已放到其它机器的不搬回来?新的数据还是放回到该机器?
举例:使用简单的求模hash,假设c,g两条数据应该hash到第3台机,在已缓存c到机器3后,3挂了,那算法自动将c定向到机器4,而机器3恢复后,g需要缓存到3?
如果是上面的例子,需求是不合理的。因为c,g是同一个算法得出的目标机器,所以理论上应该放一起(即就算3恢复了,这个时候要保存g也应该保存到c所在的机器4)
这样就好理解了,即机器3重启后,再不是机器3了,而是新加入的一台机器,它会保存另外一批数据(跟原来3要保存的不一样)
这个就用一致性hash可以解决,但实际需求又不对,因为新的3加进去后,必然要分担一些数据(这些数据从何而来?就是之前应该在3的那部分,或者说肯定要从其它机器上分一些回来)
抛开需求合理性,真正要做到这样,只能是在前面加路由表,记住每个key所在的目标服务,这当然很扯。
想提高缓存集群的可靠性,一种方法是使用缓存工具本事的机制,如redis的主从 二是尽量减少缓存实例上下线造成的缓存数据丢失,参考memcached的hash环实现。
不知道这位面试官是怎么想出来问这么怪异的问题,本来应该简单透明的问题,要搞那么复杂?
简单来说算法是一致性hash
但是要结合自己的业务