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

国内外三个不同领域巨头分享的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)

SquareWear:可替代Lilypad Arduino的开发板 开放数据:2014年最热门的竞争领域 IE11虚拟机免费面向广大开发者 九城搭建的一个以Hadoop为基础的大数据平台 Windows 8复杂性的代价到底有多大? 在发布前,第一代iPhone其实并不完善 市场占有率调查:iOS 7秒杀Android 4.4 AWS会赢、OpenStack会消亡、Connected Cars可防僵尸攻击 谷歌以32亿美金收购iPod之父的创业公司Nest 物联网时代来临 微软2014,有你期待的吗? 映趣科技发布inWatch Z/inWatch X 后者采用全彩透明柔性屏 程序员没有天才:暴风影音首席架构师鲍金龙访谈 开放式创新改变世界——OpenStack生态系统将重新洗牌 Java 8最终发布日期敲定,即使有bug也要发布 Meteor PK Django,谁更适合开发实时Web应用? 学编程就像选家具:去宜家还是从种树开始? 前车之鉴 十二个年度最差设计网站汇集 冷暖交替,2014年编程兴衰趋势预测 诺基亚出Android手机,微软或将受惠 苹果不收购Nest的大猜想 Netflix开源S3一致性提升利器S3mper Fi 《近匠》第06期:UCloud——目标!完整云服务 小三上位:Windows Phone不容忽视的契机 “详解Visual Studio 2013”全国巡讲北京站:无忧开发iOS及Android应用 Chrome最新版:快速静音及在Win8中建Chrome OS系统 雅虎COO Henrique de Castro因业绩不佳被解雇 分析比特币背后的数据算法,抢占背后巨大市场先机 美食菜谱将会成创业风口的两大理由 Windows XP杀毒软件更新 将被延至2015年7月 小心,商家已经盯上你了 一软一硬 让你时刻保持清醒的可穿戴产品 SQL Server 安装时的密码,忘了,如何取得,在线等待 挑战高手, 巨难问题. 有关不同系统(ACCESS, MSSQLSERVER) 的SQL语句兼容问题 谁能告诉我,汇编论坛在哪?谢谢 调色板问题 挑战高手, 巨难问题. 有关不同系统(ACCESS, MSSQLSERVER) 的SQL语句兼容问题 如何在WLS7中部署一个Servlet和一个JSP? 挑战高手, 巨难问题. 有关不同系统(ACCESS, MSSQLSERVER) 的SQL语句兼容问题 新手问题: 一个简单的js效果实现问题 吐血送分!关于datagrid的数据更新问题! 为什么不能进大富翁论坛 谁有KV3000啊,传个给我行吗,我下载了好几个都不行, 我有原版盘坏了,谢 VB 怎么调入并执行写好的SQL文件. 今天我生日,郁闷散分 吐血送分!关于datagrid的数据更新问题! 请问powerdesigner生成.sql时,如何在.sql中包含Comment信息 DBGrid改变行的颜色 下载英文Windows的地址 我要在一個按鈕點擊后,開啟另外一個頁面,並且這個頁面自動處於打印預覽狀態,怎麼寫? 正在上升中,公司给自己加薪了,自己却突然心灰意冷. 我想问什么是temporary object?请高手指教 那位大哥在HP-UX下配置过PHP和ORACLE? 宝丽金120首金曲 Dialogs(wdDialogFileOpen)提示ActiveX不能创建对象? 那位朋友知道如何在网络上截取一个信息(数据包) 大家看过dvdrip的片子吗?有一个问题请问 (winform)我想编写一个简单的浏览器,问题1 在LINUX下如何安装软件啊? 苏州的朋友可以进来看看吗? 关于游标类型的问题 如何比较两幅近似图像并得出偏移的距离? 怎样处理鼠标拖动事件。 绘制图形时的自动滚屏问题 请教怎么去掉字符串后面带的空格? 请教关于双机通讯的问题,谢谢 播放问题 如何使用jsp显示数据库中的数据? 请问什么叫模态窗口啊? Win32标准dll,VB下调用问题 挑战:对手机短信文字自动解析? 推荐一个linux下的杀毒软件. 关于oicq? 二手笔记本多小钱? 关于在iis中的resin的配值问题,急,求帮助!!!! PHP中的类到底是怎么回事 怎么知道INI文件的某一个小节下有几个关键字? 不知道发在这里对不对。。。有关DVD 菜鸟级:关于两台都接了宽带的机子彼此可见的问题。请高手指教!谢谢! 我最近发现,我所喜欢的人,她不喜欢我了? 关于游标类型问题? 急!急!急!COMBOBOX问题!(在线等候!)! THE ORIGINS OF VIRTUE怎么样 英文"月饼"怎样拼写? 小蜜蜂是昆虫.扩句: THE THEOLOGICAL ORIGINS OF MODERNITY怎么样 change your diet and lifestyle from today!中文翻译 小蜜蜂在花园里【飞来飞去】 小蜜蜂在花园里【翩翩起舞】 仿写春天到了,各种花儿【都开了】 春天到了,各种花儿【?】 THE ORIGINS OF THE CULTURAL REVOLUTIONVOL1怎么样 change your diet and lifestyle feom today.的中文是什么? 扩句(来10个例子o_O) 小蜜蜂飞来飞去 THE ORIGINS OF POLITICAL ORDER怎么样 "迷"的英语单词? 扩句 (我要10个例子T_T) 小蜜蜂飞来飞去 保留这个词的准确意思? 迷眼睛的英语单词和韩国语单词是什么?(^-^) 扩句(我要10个例子)^_^ 小蜜蜂飞来飞去 猜猜这是什么,猜对给好评哟 爸爸做过来,经他一点拨我豁然开朗,真是(),于是我很快解开了这道难题.(在括号里填上一句诗) 我最佩服的一个人的作文大概在400字以上 the pressure deviation will limit the change speed of the main steam valve’s 描写落汤鸡的好句好段和描写人拾金不昧的好句好段 我佩服的一个人作文400字 ( ) l was sitting on the sofa,my father came into the roomA While B before C Until D Since 麻烦大家帮我起个英文名,需要跟中文“娇”谐音,爱娇美丽娇娇宝都可以.谐音或者意思相近 我佩服他(她)作文 out of pressure是什么意思?some people get tattoos out of pressure,这里的out of pressure是出于外界压力的意思还是为了摆脱压力的意思?希望真正懂的人回答,不要瞎猜.什么情况下是因为,什么情况下是摆 要列试哦 what is 用反重力从真空换取能量 his wife has been______a lof of pressure on him to change his jobA taking B exertingC givingD pushing 作文《我最佩服的一个人》开头怎么写?写出自己的真情实感,语句要通顺!可以写谁? what can nuclear energy do in medical nad idustrial This accounting principle requires companies to use the accrual basis of accounting .The matching求翻译 我最佩服的一个人,是作文啊, Energy is what makes things work.中 what 能否用all that 替代? 为什么. 猜一下,即给好评 Alter what is changeable,accept what is mutable.我想请问下各位达人高手,为什么用mutable呢?mutable 在字典上的解释是 易变的;反复无常的. energy is what makes things work.有没有好一点的翻译,怎么你们翻译的怪怪的 李商隐的嫦娥与李白的把酒问月两首诗对嫦娥的评价一样吗?通过比较,你对“角度”有 Remember what should be remembered,and forget what should be forgotten.Alter what is changeable,and accept what is mutable.记住该记住的,忘记该忘记的.改变能改变的,接受不能改变的.mutable 是不是应该写成immutable? energy is makes things work 填what 还是somethiwhat 还是something 古诗《嫦娥》是李商隐根据什么节日流传的神话故事什么创作的 Alter what is changeable,and accept what is unchangeable. 英语翻译乙方活动当天,任何超出协议所列费用之外的费用,乙方一律以现金形式支付给甲方. 怎么写? 绅士用英语怎么说请填写准确答案 谢谢了. 什么蜜蜂最勤劳 怎么写啊 绅士的英语怎么说? 诗与词的不同之处 这怎么写? 可在美国 你不需要这么绅士 英语怎么说 什么像蜜蜂般的勤劳什么像蜜蜂般勤劳;什么像小兔般温顺;什么像老鼠般胆怯;什么像狮子般咆哮? cries in adistan是什么意思 一位绅士向她走来英语怎么说 "诗"和“词”的不同之处,今天就要,急~~~~~~~~~~~~~~~ 猜猜这是什么 你认为绅士应该具备哪些品质?这句话用英语怎么说? what's your father?和what’s your father?那个是问你爸爸是做什么职业的?那个是问你爸爸长的样子?这个我有点搞不清楚.还有询问一个人的性格是什么样的用英语是怎么说的?越简便越好! 月饼英语怎么拼写“月饼”英语怎么拼写? Alter what is changeable,and accept what is mutable.的作者是谁 补全下列对话 —_____ _____ your father?—He likes ______ a book.急
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘