标签:log 方法 数据迁移 删除 lock blog 如何 七牛 情况
去年参加技术分享活动,七牛的一个技术简要的介绍了一些高可用可伸缩的一些经验之谈,听完之后受益匪浅,整理一下,主要分以下几个部分:
下面来分层介绍实践方法。
nigix两个 keeplive保活 心跳做好。
考虑一个问题,两台机器,两个公网IP,DNS把域名同时定位到两个IP,这算高可用吗
不算,客户端(比如浏览器) 解析完后会随机选一个 IP访问 , 而不是一个失败后就去另一个 。 所以如果一台机器当机 ,那么就有一半左右的用户无法访问 。
直接用 codis或者redis 3.0 即可
如果低峰期间数据库能抗的住 ,那么直接下线存然后上新缓存就是最简单有效的办法
缓存类型
不变型缓存:缓存key对应的value不会变更
弱一致性和不变型缓存扩容很方便,用一致性HASH即可
在分布式集群中,对机器的添加删除,或者机器故障后自动脱离集群这些操作是分布式集群管理最基本的功能。如果采用常用的hash(object)%N算法,那么在有机器添加或者删除后,很多原有的数据就无法找到了,这样严重的违反了单调性原则
一致性HASH可以有效解决这个问题,一致性哈希算法在保持了单调性的同时,还是数据的迁移达到了最小,这样的算法对分布式集群来说是非常合适的,避免了大量数据迁移,减小了服务器的的压力。
举个例子
如果缓存从9台扩容到10台, 简单Hash况下90%的缓存会马上失效,而一致性Hash 情况下,只有10%的缓存会失效。
问题二解决方法:要么保持永不减少节点,要么节点调整间隔大于数据有效时间。
问题一解决方法:
- 两套hash配置都更新到客户端,但仍使用旧的配置
- 两个个客户端改为只有两套hash结果一致的情况下会使用缓存,其余情况从数据库读,但写入缓存。
- 逐个客户端通知使用新配置。