说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

国内外三个不同领域巨头分享的Redis实战经验及使用场景

HTML文档下载 WORD文档下载 PDF文档下载
随着数据体积的激增,MySQL+memche已经满足不了大型互联网类应用的需求,许多机构也纷纷选择Redis作为其架构上的补充,下面就一览新浪微博、Pinterest及Viacom的实践分享。

随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽。这里我们将为大家分享社交巨头新浪微博、传媒巨头Viacom及图片分享领域佼佼者Pinterest带来的Redis实践,首先我们看新浪微博 @启盼cobain的Redis实战经验分享:

新浪微博:史上最大的Redis集群

Tape is Dead,Disk is Tape,Flash is Disk,RAM Locality is King. — Jim Gray

Redis不是比较成熟的memcache或者Mysql的替代品,是对于大型互联网类应用在架构上很好的补充。现在有越来越多的应用也在纷纷基于Redis做架构的改造。首先简单公布一下Redis平台实际情况:

  • 2200+亿 commands/day 5000亿Read/day 500亿Write/day
  • 18TB+ Memory
  • 500+ Servers in 6 IDC 2000+instances

应该是国内外比较大的Redis使用平台,今天主要从应用角度谈谈Redis服务平台。

Redis使用场景

1.Counting(计数)

计数的应用在另外一篇文章里较详细的描述,计数场景的优化 http://www.xdata.me/?p=262这里就不多加描述了。

可以预见的是,有很多同学认为把计数全部存在内存中成本非常高,我在这里用个图表来表达下我的观点:

很多情况大家都会设想纯使用内存的方案会很有很高成本,但实际情况往往会有一些不一样:

  • COST,对于有一定吞吐需求的应用来说,肯定会单独申请DB、Cache资源,很多担心DB写入性能的同学还会主动将DB更新记入异步队列,而这三块的资源的利用率一般都不会太高。资源算下来,你惊异的发现:反而纯内存的方案会更精简!
  • KISS原则,这对于开发是非常友好的,我只需要建立一套连接池,不用担心数据一致性的维护,不用维护异步队列。
  • Cache穿透风险,如果后端使用DB,肯定不会提供很高的吞吐能力,cache宕机如果没有妥善处理,那就悲剧了。
  • 大多数的起始存储需求,容量较小。

2.Reverse cache(反向cache)

面对微博常常出现的热点,如最近出现了较为火爆的短链,短时间有数以万计的人点击、跳转,而这里会常常涌现一些需求,比如我们向快速在跳转时判定用户等级,是否有一些账号绑定,性别爱好什么的,已给其展示不同的内容或者信息。

普通采用memcache+Mysql的解决方案,当调用id合法的情况下,可支撑较大的吞吐。但当调用id不可控,有较多垃圾用户调用时,由于memcache未有命中,会大量的穿透至Mysql服务器,瞬间造成连接数疯长,整体吞吐量降低,响应时间变慢。

这里我们可以用redis记录全量的用户判定信息,如string key:uid int:type,做一次反向的cache,当用户在redis快速获取自己等级等信息后,再去Mc+Mysql层去获取全量信息。如图:

当然这也不是最优化的场景,如用Redis做bloomfilter,可能更加省用内存。

3.Top 10 list

产品运营总会让你展示最近、最热、点击率最高、活跃度最高等等条件的top list。很多更新较频繁的列表如果使用MC+MySQL维护的话缓存失效的可能性会比较大,鉴于占用内存较小的情况,使用Redis做存储也是相当不错的。

4.Last Index

用户最近访问记录也是redis list的很好应用场景,lpush lpop自动过期老的登陆记录,对于开发来说还是非常友好的。

5.Relation List/Message Queue

这里把两个功能放在最后,因为这两个功能在现实问题当中遇到了一些困难,但在一定阶段也确实解决了我们很多的问题,故在这里只做说明。

Message Queue就是通过list的lpop及lpush接口进行队列的写入和消费,由于本身性能较好也能解决大部分问题。

6.Fast transaction with Lua

Redis 的Lua的功能扩展实际给Redis带来了更多的应用场景,你可以编写若干command组合作为一个小型的非阻塞事务或者更新逻辑,如:在收到message推送时,同时1.给自己的增加一个未读的对话 2.给自己的私信增加一个未读消息 3.最后给发送人回执一个完成推送消息,这一层逻辑完全可以在Redis Server端实现。

但是,需要注意的是Redis会将lua script的全部内容记录在aof和传送给slave,这也将是对磁盘,网卡一个不小的开销。

7.Instead of Memcache

  1. 很多测试和应用均已证明,
  2. 在性能方面Redis并没有落后memcache多少,而单线程的模型给Redis反而带来了很强的扩展性。
  3. 在很多场景下,Redis对同一份数据的内存开销是小于memcache的slab分配的。
  4. Redis提供的数据同步功能,其实是对cache的一个强有力功能扩展。

Redis使用的重要点

1.rdb/aof Backup!

我们线上的Redis 95%以上是承担后端存储功能的,我们不仅用作cache,而更为一种k-v存储,他完全替代了后端的存储服务(MySQL),故其数据是非常重要的,如果出现数据污染和丢失,误操作等情况,将是难以恢复的。所以备份是非常必要的!为此,我们有共享的hdfs资源作为我们的备份池,希望能随时可以还原业务所需数据。

2.Small item & Small instance!

由于Redis单线程(严格意义上不是单线程,但认为对request的处理是单线程的)的模型,大的数据结构list,sorted set,hash set的批量处理就意味着其他请求的等待,故使用Redis的复杂数据结构一定要控制其单key-struct的大小。

另外,Redis单实例的内存容量也应该有严格的限制。单实例内存容量较大后,直接带来的问题就是故障恢复或者Rebuild从库的时候时间较长,而更糟糕的是,Redis rewrite aof和save rdb时,将会带来非常大且长的系统压力,并占用额外内存,很可能导致系统内存不足等严重影响性能的线上故障。我们线上96G/128G内存服务器不建议单实例容量大于20/30G。

3.Been Available!

业界资料和使用比较多的是Redis sentinel(哨兵)

http://www.huangz.me/en/latest/storage/redis_code_analysis/sentinel.html

http://qiita.com/wellflat/items/8935016fdee25d4866d9

2000行C实现了服务器状态检测,自动故障转移等功能。

但由于自身实际架构往往会复杂,或者考虑的角度比较多,为此 @许琦eryk和我一同做了hypnos项目。

hypnos是神话中的睡神,字面意思也是希望我们工程师无需在休息时间处理任何故障。:-)

其工作原理示意如下:

Talk is cheap, show me your code! 稍后将单独写篇博客细致讲下Hypnos的实现。

4.In Memory or not?

发现一种情况,开发在沟通后端资源设计的时候,常常因为习惯使用和错误了解产品定位等原因,而忽视了对真实使用用户的评估。也许这是一份历史数据,只有最近一天的数据才有人进行访问,而把历史数据的容量和最近一天请求量都抛给内存类的存储现实是非常不合理的。

所以当你在究竟使用什么样的数据结构存储的时候,请务必先进行成本衡量,有多少数据是需要存储在内存中的?有多少数据是对用户真正有意义的。因为这其实对后端资源的设计是至关重要的,1G的数据容量和1T的数据容量对于设计思路是完全不一样的

Plans in future?

1.slave sync改造

全部改造线上master-slave数据同步机制,这一点我们借鉴了MySQL Replication的思路,使用rdb+aof+pos作为数据同步的依据,这里简要说明为什么官方提供的psync没有很好的满足我们的需求:

假设A有两个从库B及C,及 A `— B&C,这时我们发现master A服务器有宕机隐患需要重启或者A节点直接宕机,需要切换B为新的主库,如果A、B、C不共享rdb及aof信息,C在作为B的从库时,仍会清除自身数据,因为C节点只记录了和A节点的同步状况。

故我们需要有一种将A`–B&C 结构切换切换为A`–B`–C结构的同步机制,psync虽然支持断点续传,但仍无法支持master故障的平滑切换。

实际上我们已经在我们定制的Redis计数服务上使用了如上功能的同步,效果非常好,解决了运维负担,但仍需向所有Redis服务推广,如果可能我们也会向官方Redis提出相关sync slave的改进。

2.更适合redis的name-system Or proxy

细心的同学发现我们除了使用DNS作为命名系统,也在zookeeper中有一份记录,为什么不让用户直接访问一个系统,zk或者DNS选择其一呢?

其实还是很简单,命名系统是个非常重要的组件,而dns是一套比较完善的命名系统,我们为此做了很多改进和试错,zk的实现还是相对复杂,我们还没有较强的把控粒度。我们也在思考用什么做命名系统更符合我们需求。

3.后端数据存储

大内存的使用肯定是一个重要的成本优化方向,flash盘及分布式的存储也在我们未来计划之中。(原文链接: Largest Redis Clusters Ever)

自制THyperLink组件-Delphi资料 报表制作技巧(三)-Delphi资料 Delphi数据库开发及统计表格设计 Delphi文本和图形的打印方法 Delphi应用程序中中国式报表的制作 Windows环境下实时列表输出的实现方法-Delphi资料 报表制作技巧(二)-Delphi资料 Delphi编制的程序运行中动态制作报表 报表制作技巧(一)-Delphi资料 如何在WINDOWS中控制打印字体的长宽,而不受限于SIZE 的限制-Delphi资料 也谈为Delphi中数据库报表加网格 用Delphi4的QReport部件生成报表 用Delphi编写打印程序的窍门 用Word做Delphi报表输出工具 在DELPHI 文 本 和 图 形 的 打 印 在Delphi中运用QuickReport实现多栏列印 在打印或打印预览前如何获取报表页数-Delphi资料 自定义快速报表的打印预览窗口-Delphi资料 Delphi 3 图形VCL中Bug修改方案 Delphi hint的字体和色彩如何改变 Delphi3.0中复活节彩蛋及实现 Delphi数据库应用程序开发中图像数据的存取技巧 DELPHI图形编辑技巧二则 DELPHI显示JPEG图像文件 Delphi中CANVAS使用三例 Delphi中的图形显示技巧 DELPHI中画布应用技巧 Delphi中控件深度投影及阴影效果的实现 DELPHI中利用对象的常用属性制作动画 Form生成时的事件次序-Delphi资料 LED数码管仿真显示程序-Delphi资料 如果用asp连接mysql,请问连接字符串是什么? 请高手帮我解答一个关于在ASP中调用存储过程的问题? 怎么输入繁体字? 足彩-03010期:1033031110310 请教高手在DELPHI里怎样实现把一个文件存储到ORACLE上, 然后又如何调出来使用?? 我快疯了救救我!!!!!!!!!! 我为什么要做个刁民? 屏幕上显示绘多条曲线,要对每条曲线单独进行操作如何实现? 怎样避开程序对softice和trw的检查 想学ACCP不知道社会的认可度? 怎样使用windowsxp/2000的修复程序? C:\winnt\下有一个hh.exe文件,有什么作用? 这首诗我觉得用在程序员身上也很合适 在WebSnap中如何实现gride的隔行显示不同颜色,就象我们现在看到的一样?? 关于《C++ Primer plus(中文版)第四版〉》,大家发表一下看法好吗。 中文文件 颜色代码转换的问题大家帮忙呀.. 程序编译问题 问一个可笑的问题。希望能得到回复 那位用过TfcShapeBtn控件? 急!从NT4到W2000后,为何ASP出错? combustion? 100分有人答了吧 WHERE TO DOWNLOAD??? c#/web,有个约一万行的参数表需用于校验页面录入的数据 帮帮忙啊,急啊 谁有dhtml的中文帮助? 如何使窗口全屏化,即不覆盖Toplevel窗口(winamp),又能覆盖任务栏? 请教各位高手,怎样将网卡的MAC地址与IP地址绑定起来,让用户不能改变? 我自己构造了一个HTTP请求头想要下载swf,但是服务器不接受请求。各位大哥帮忙看一下 简单问题 关于dll的基本问题 求求各位了,急啊(原程序问题) 这段程序问题出在哪儿? 关于防火墙编码的问题500? 明天签约,来问问工资开多少 整一年了 发个帖子吧 win98关机死机具体问题怎样既决????? 既然有了jbuilder,怎么还有人在弄什么jdk 关于正则表达式的问题("(\{)(\r\n)*(.*)(\})"),精通者请进 CreateProcess函数的应用示例 怎样才能克服电脑带来的噪音!!!,困霍很久 散分拉!!! 数据发送的实现,急用,谢谢,一定给分。 写过VB程序的朋友可以进来谈谈。 请问如何在php内刷新页面 在PB如何用setfilter()实现两种条件以上的数据过滤? 请问:.net 7张cd,怎么装?(最优) <<C++ Primer 第三版 中文版>>网友勘误+散分 关于Access主键的问题?请高手帮忙! 我记得有一个查看其他应用程序资源的工具? 零度空间是什么 铝块和铁块的质量、温度都相同,同时放入同一杯热水中,当它们与热水的温度相同时,吸收的热量哪个多 C铝>C铁 急. 绝口不提中的绝是什么意思?①断②一定,哪个是?绝对其中一个 零度空间是啥?;;;;;;;;;;;;;;;;;; 最好的防电焊烟尘口罩,价钱如何?我们带的3M的防尘口罩大伙都说憋得慌尤其是夏天有没有更好的还便宜 绝口不提的绝是什么意思 关于不怕困难的成语小学水品的就好了 周围有人感冒了戴什么类型口罩比较好?现在的空气质量越来越差了 在我感情的封锁区,有关于你,绝口不提,用英语怎么说? 分子的动能与物体的动能物体的运动是物体中所有分子的定向移动,以地面为参照系,整体运动,必将会影响到分子运动速度,因为分子运动的无规则性,使有些分子的速度增大,有些分子的速度减 说明文:吃鱼为什么会变聪明?字数800,我只求开头,T开头不要800字= =整篇文章要800字= = 河马是食肉还是食草 物体内部所有分子——的动能和——的总和,叫做物体的------能. 氯化铵的ph为多少 形容两万五千里长征的成语 物体的分子动能与物体的质量有关吗?物体的分子动能与质量有关吗?物体的分子动能和分子势能分别和哪些因素有关? 可爱的近义词反义词 河马爱吃巧克力吗?电影里这么说.他们被河马袭击,有人丢了几块巧克力到河里,河马就跑开了~~是真的吗? 1.从三棱镜对白光产生的色散现象可以推知,当各种色光以相同的入射角从玻璃斜射入空气中时,折射角最大的是A.红色光B.绿色光C.紫色光D.蓝色光我觉着是C,想知道为什么?2.等比例的红光与绿 可爱的近义词和反义词 河马怎么吃食物 老师你好;想问一下最后一段时间文章该如何提高,尤其是大题? 汇成的近义词是什么 怎么用物理解释这个现象呢?芜湖方特乐园里面有个游乐项目叫“印第安部落”,里面的印第安老人会神奇般的消失在我们眼前,这到底为什么呢?最令我困惑的是,节目最后印第安老人消失了,他 写反义词的词语 如 七上八下危在( )( ) 自( )至( ) 无足( )( )( )( )顿挫 半( )半( ) ( )逸( )劳三( )两( ) 水( )石( ) 以绿化好处多为题写一篇说明文 字数600 上海轨道交通2号线虹桥火车站到火车站检票处步行大约要多少时间?上海轨道交通2号线虹桥火车站下地铁到火车站检票处步行大约要多少时间? 四字词语第2字和第4字是反义词,如:七上八下要4个 在光的_______现象中,光的传播速度要改变. 爱惜的反义词是什么 近仪词 重要( ) 准确( ) 反义词 晴朗( ) 马虎( ) 紧张( ) 犹豫( ) 低落( )请帮我答一下. 关于长征的成语 爱惜的反义词是什么呀 七上八下(反义词)类似的词语 谁有描写长征的成语?急 类星体的红移速度超过光速? 2011年4月7日,我国乃至世界上最大、最先进的内河豪华游轮“总统旗舰”号如图在重庆港开航.这艘五星级万吨游轮于8日清晨起航,沿长江三峡国际黄金旅游线顺水而下,直至到达三峡工程所在 关切的近义词是关心,关怀的反义词是冷漠 判断 英语翻译就是说一本英语的书,全是英文哈,而我又要翻译,但不可能每个单词都查字典吧,况且又如何做笔记啊,那么多不认识的单词~ 八下 物理 填空题 什么的长征要成语 翻译成英语:获得知识 汽车电路中屏蔽什么意思 谁有长征的成语? 求以下的反义词:爱好,爱惜,保护,悲痛,本质,成功,惩罚,出色,纯净 前不久,我梦见自己是一条很大的龙,一直往天上冲,还有还多红色的大鲮鲤,坐在我的背上,当时那些鱼是要我救它们,我就背上它们很有力的往天上冲...这是什么梦,而且 我还多次,梦见菩萨,不管 为什么天这么蓝, 反义词:爱好 爱惜 保护 悲痛 本质 惩罚 出色 纯净 赞许···(30分内)爱好 爱惜 保护 悲痛 本质 惩罚 出色 纯净 单调 独特 繁忙 奉献 富强 干燥 高尚 广袤 害羞 浅陋 健壮 结实 微弱 贤惠 最近总做一些奇怪的梦,昨天梦见自己穿了可漂亮的长裙戴着紫色的耳环,去给别人送钥匙,到了的时候有很多男生出来看我,还有人和我讲话,不过我没有讲一句话就走了,在回家的路上就刮起了 爱惜的反义词糟蹋 反义词: 爱好()爱惜()本质()惩罚() 出色()纯净()单调()独特() 繁忙()奉献()干燥()高尚() 广袤() 辩论赛(发明创造并非人人可为)自我介绍要幽默点的例如三句半,最好包含辩题,明天8点就比赛, 韩国半语是什么意思 爱惜和幸福的反义词 辩论赛的一个问题,如果所有人的青春都用来享受,那么我们的国家和社会要怎么办? 东九在韩国是什么意思 爱惜的反义词还有朋友的反义词是啥么 阻止的意思是什么? 将镁和铝的单质粉末分别和热水作用,并滴入酚酞,能证明他们的金属性强弱吗?为什么尽快,希望能不要复制大片的文字 绝口不提的意思是什么 伊朗就核问题对话提出新建议内蒙古国贫旗现豪华接待中心 回应称为25省区市前三季度GDP之和超全国总专家称当代难谈“汉字危机” 呼吁重视“今日中国”艺术周系列活动在泰国举行西班牙煤矿瓦斯泄漏致6人死亡印度央行下调经济增长预期企业被强拆讨说法遭踢皮球 对方扬言:美国在罗马尼亚反导基地开工建设孟全国大罢工第二天又有4人死亡长兴废旧铅蓄电池“涅槃重生” 废水处粤高院判美IDC公司构成垄断 赔偿华俄外长:俄愿意与美国就反导问题寻找折约40名尼日尔移民因汽车抛锚在撒哈拉北海道频现“熊出没”都是橡树减产惹的日本滋贺县调查显示老年人受虐情况多来古老东京车站鲜花生气勃勃 花团锦簇画俄官员:与中国免签证旅游交流能避免非英国男子涉嫌侵入美政府计算机系统遭逮英国男子涉嫌侵入美政府计算机系统遭逮内蒙古鄂尔多斯官方回应当地近三成煤企74个远程教育中心104所函授站获批兰州亚太股份公司开展党的群众路线教育国务院新闻办发表2013年中国人权白事业单位工资将与机关体系松绑我的笑脸上头题三马子撞大货车 导致两名男子当场死亡湖南政协原副主席阳宝华涉严重违纪违法30多年来她将数百贪官送入监狱李鸿良:丑得轰动的“配角”驾驶员救火受轻伤颜色跟水草很像难发现眼袋妈妈“约法三章”“请给她一个改正的机会”慌乱中又撞人,他连车都不要了团购市场迎投融资第二春一部手机真心实意为民忧 毫不懈怠解民愁四国赛-赵泰隆14分高尚13+5 国“上线”竟是自己的亲叔叔货币基金成公募品种老大2天连爆3个25万
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘