花钱的年华

江南白衣,公众号:春天的旁边

继续Redis

| Filed under 技术

Redis Cluster的八个月使用经验

大家都在冷眼观望的时候,有道的同学居然已经玩了Redis Cluster八个月了。不过有道好像主要把Redis用作可与Memcached互换的缓存,数据没有落地,也没有深度应用如Lua脚本,因此Codis似乎更适合他们。 《离职系列文章之redis cluster使用经验》

9.Huge Page

Huge Page这种听名字就很高贵,调优指南里屡屡出现的东西,在Redis里却是禁止的。Huge Page的科普文章。禁止的原因是Snapshot时fork出的子进程,使用Copy on Write的内存共享策略,期间主进程的Page被修改时必须另复制一份以保证子进程的Page不变,Page Huge了复制就Huge了。

不过拖慢的主要是期间访问的速度吧,至于容量,我们在规划时早就认命的只使用1/2内存,Redis也是最废内存的NOSQL方案了。

 

8. Scalable

沿着InfoQ的《高可用、开源的Redis缓存集群方案》,发现了豌豆荚的Codis和Netflix的Dynamo

两者都是使用Proxy-Based的思路,借鉴或直接在Twemproxy的基础上修改,摈弃了Redis自己的Redis Sentinel和Redis Cluster.

Codis主要解决动态增加Redis节点的问题,用Go开发,因为作者的设计思路比Redis Cluster简单,所以早早出来了。不过它的HA好像故意设计成Slave不能像Sentinel那样自动提升为Master了。

最近InfoQ又再发了一篇,《高效运维最佳实践(03):Redis集群技术及Codis实践》

Dynamo能解决跨机房复制,它的开发者叫Minh Do,我们研究了一下,胡志明也叫Minh,应该是个越南人。不过版本只有0.0.3。

在《程序员》杂志的最后一期上,还提到了小米的成倍扩容的方案。那寥寥几句话我是这样理解的:

客户端用取模分区而不是一致性哈希分区,假设原来有3台服务器(A,B,C),按3取模,那数据1,4就会落到A,2,5会落到B。现在成倍的扩容3台(D,E,F)——

Step1. 先让D,E,F充当A,B,C的Slave同步数据。
Step2. 告诉应用Redis集群已扩展, 则此时再按6取模,1会落到A而4就会落到D。
Step3. 最后将D,E,F改为Master状态接受写入。

Step2,3之间的数据可能写入失败,但也是必需的代价了,一分钱一分货。

 

7.3 Redis的一致性

Redis被人说在网络脑裂的时候一致性不行,Antirez悍然回应,有些东欧的同事也拿这个来说事,然后Flickr的力挺结束了争执。

InfoQ: Flickr选择使用Sentinel来保证Redis的高可用性

 

7.5 Hyberloglogs

Redis在整整一年多都在痛苦的实现Redis Cluster,最近终于憋不住了,做了个Hyberloglogs玩,作用是用恒定大小的空间,近似的估算Unique元素的个数。以前如果要算独立访问IP,就要将所有访问IP保存在一个Set里,这无疑会花很多空间。现在不用再存了,也能给出大概的数值。

其实Redis就应该多做点有趣的数据结构,实现各种算法,现在精力都花在Redis Cluster上,可惜了。
 

7. Redis的周报

关于Redis新闻八卦的两个周报: Redis WatchRedis Weekly 2014-12-28
 

6. 终于试了单机多实例

今天把集群里的六台Redis全移进一个虚拟机里。六个单线程的好孩子,不吵不闹也不争玩具,也就是不争网卡的磁盘了,亏那磁盘还是旧式的非SSD磁盘。2014-12-18
 

5. Red is the new black

@王四哥达家码 : CTO来看我救他的进度如何了,发现我带着耳机在听歌,怒道:你还有心听歌!我说:呃,我听的是Funeral for a Friend乐队的名曲。。。Redis the new black。。。他就悻悻得走了。。 2014-12-18

[看半天,原来是 "Red is the new black"]

 

4. Redis在VM里的调优神器

刚用chrt设置实时调度解决了Redis在KVM里,因为单线程抢不过隔壁几百条线程的Java程序导致性能减半的问题。chrt,让Redis 100%的占有那颗CPU。 

再回想一年前,曾经用numactl,将redis这个只会耍单线程的苦孩子绑死在一颗核上,性能赫然拔高了一截。但是……结果飘忽啊,为什么这颗CPU会快,那颗就慢呢。

那篇Running Redis in Production教人如何躲开有网卡流量的CPU,大约快10%  2014-05-27

 

3. RedisConf 2013

Antirez同志在RedisConf 2013上发表的重要讲话,很有Redis风格的幻灯片,第一句先自我表扬--Redis is made of pieces, most of them are modular,然后掰开来论尽每一块的职责,今年的变动和即将发生的演进。 2013-10-22

(Caption: Antirez在RedisConf 2013上发表的重要讲话)

 

2. 新浪的Redis集群

新浪的同学又一次掀开了他们Redis集群的一角:<Largest Redis Clusters Ever>,每天5500亿次的读写无愧世上最大的Redis集群之一。他们觉得,Redis的单线程架构其实更利于在单机上部署多个实例,如果磁盘撑得住多个AOF文件的IO,而且AOF重写也由程序调度而不是自动触发。 2013-10-10

(Caption: 新浪的同学又一次掀开了他们Redis集群的一角)

 

1. Redis Cluster 规范

Redis Cluster从来都是只闻楼梯响,正式版转眼又从Redis 2.8 跳票到3.0。不过R家的东西有个好处就是原理简单明了,你可以很容易推导出它在各场景下的行为,不会有别家那种黑盒的抓瞎感。《Redis Cluster Specification》,继续是@huangz1990 的翻译  2013-010-09

(Caption:只闻楼梯响不见人的Redis Cluster)

 

有关的...

发表评论

您的电子邮箱不会被公开。

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>