艾莉亚的猫 Time is limited, To be a better man

一致性HASH算法

OpenStack Swift 开源项目提供了弹性可伸缩、高可用的分布式对象存储服务,适合存储大规模非结构化数据。Swift利用一致性Hash算法构建了一个冗余扩展的分布式对象存储集群,Swift 采用一致性哈希的主要目的是在改变集群的 device 数量时,能够尽可能少地改变已存在 Key 和 device 的映射关系。本文就介绍 Swift 的一致性哈希算法。


一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。

一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:

平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。

单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。

分散性(Spread):在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。

负载(Load):负载问题实际上是从另一个角度看待分散性问题。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同 的内容。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。

在分布式集群中,对机器的添加删除,或者机器故障后自动脱离集群这些操作是分布式集群管理最基本的功能。如果采用常用的hash(object)%N算法,那么在有机器添加或者删除后,很多原有的数据就无法找到了,这样严重的违反了单调性原则。接下来主要讲解一下一致性哈希算法是如何设计的。

代理服务器

买了一年的红杏会员,还有两三个月才到期就不能用了,被请去喝茶了?也是醉。话说用惯了红杏,现在翻不了墙也是不行,平日里好歹也要google查查资料的,遂花了五十块买了个Shadowsocks,配置挺麻烦的,设置的代理规则也不灵活。总之不太好用 :(

1

学会控制情绪

喜高怒重,过目辄忘,近“粗”。 –《冰鉴》

译:喜怒情感表现得很强烈,但又转瞬即逝的人,其气质近乎粗鲁。

遇到外界刺激,难免情绪波动,这是人的本能反应,但切不可放纵,要学会克制,学会忍耐。有时情绪带给人的负面影响是致命的,一个人若不能很好的控制自己的情绪,势必成不了大事。

萌芽

周末去便利店的时候,顺手买了本《萌芽》,高中时的精神食粮,已经多年没有再看过了,现在读来也找不到当初的悸动,可能是过了年纪了。

遥想大学刚毕业那会儿,大家紧凑着住一间大屋子里,一起上班学习,现在也都陆陆续续散了。工作了这些年,早已没有了读书时的那份心境。也开始害怕寂寞,但也更厌倦了喧嚣。期间拒绝了同事合租的建议,我想着一个人安安静静的也还好,独处时倒可以多些思考与自省,虽有些寂寞,寂寞中却又有一种充实。大把的好时光可以用来读书、看球、玩游戏,有时也会登录ubuntu上面,撸撸代码。

我想,寂寞是难免的,能抵挡寂寞的,也唯有笔尖、键盘。

1

克洛普首秀

今晚的英超联赛中,利物浦将客战热刺,新帅克洛普将迎来自己的英超首秀。曾在多特取得巨大成功的渣叔会交出一份怎样的答卷呢?吼吼~在这个渣吹满天飞的世界里,我们来看看大家都说了些什么。

  • 我很确信克洛普在红军会拿到联赛冠军的。 —胡梅尔斯
  • 克洛普非常适合英超,他能在利物浦取得成功。他积极的思维方式会帮助球员们,让大家集中注意力踢好比赛,我不了解利物浦的所有球员,但我肯定克洛普会让他们变得更出色。克洛普有一个计划,再次让利物浦成为获胜的球队。 —莱万

18次顶级联赛冠军、5次欧冠冠军,利物浦不缺少辉煌和历史。然而沉沦数年,红军陷入迷茫。渣叔的到来,能否重塑利物浦“铁血红军”风采? 英超无弱旅,唯有祝好运了。 You will never walk alone