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

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

为什么Fire Phone手机价格不便宜? 老牌播放器暴风影音发力线下与自制内容 APP运营:“小数据”为合理化推送定位 TCL H5TV:回归电视本质,与开发者共赢 烽火星空徐国龙:依托平台,坚持开放与标准,企业移动化快速研发之道 首届bong线上黑客马拉松第一阶段达成! 12支团队晋级 APSys 2014,AMD将发表基于异构体系的DNN实现与评估 PagerDuty实战分析:将MySQL迁移至XtraDB并成功运行EC2 Molecule:自食其力的免费HTML5游戏框架 智能家居升级:Nest启动开发者计划,并开放API Docker,从这里做起! 《近匠》云巴创始人张虎:低门槛云服务为小团队创造更多机会 Oculus公司同意收购Xbox 360手柄设计团队 公有云VS私有云 哪个数据更安全? 调查:开发者越老越吃香吗? Facebook在线支付:取代虚拟货币的终极边界 Google I/O前析:关于新一代设计框架Quantum Paper的猜想 Google I/O 2014前瞻:“令人发指”的Android产品线 福昕熊雨前:PDFium开源项目的背后 Dropbox无法登陆,国内企业网盘横向评测! 如果编程语言是超级英雄…… 谷歌发布Material Design设计语言 系统、功能与设计,Android L究竟新在哪儿? 《近匠》游道易副总裁孙可:发行商眼中的手游市场 布道师徐立:Docker是标准化IT结构的新方式 解读全新Google Play Games:多屏游戏时代终于来了! 设计神器PaintCode 2.1发布,完全支持Swift 一周消息树:天河二号以每秒3.3亿亿次的速度再居世界超算榜首 传闻微软计划用Lumia品牌取代Surface 【CTO俱乐部读书会】杨立东:技术团队留人“三板斧” 蓝港在线王世颖:浅谈手机游戏发行的成功基因 白痴,笨蛋,神经病之差异(转贴) 测试(大家都不许进来,只是测试,注意,只是测试) 请大家说一下哪个代理注册的网站收费比较底,而且服务又比较好的,谢谢! 在asp中如何实现记录集与编辑框、table表等的数据绑定,给个思路也行。着急呀 [-------大虾帮忙啊--------] bcb中缺少的帮助文件能否再添加? 在哪里可以找到关于sybase的资料 哪位仁兄知道如何打包delphi开发的sybase客户程序,最高78分奉送 一个关于OnDraw()的重绘问题,急急急急急急急! 新手的问题! dll调问题???VB调用VC++的DLL需要返回值时,DLL如何定义?VB调用函数如何定义??? 各位大虾 谁能提供视频采集卡的原代码,必须要CB的,300分 在堆(heap)上与在栈(stack)上建立的对象有什么区别? 一个问题,在做元件时怎样建立TdateTimePicker 给大家看看我弟弟给我的信 求助,标题栏为“The police are investigating the robbery-"的是什么程序? 谁能将.CPP文件的代码翻译成DELPHI语言?? 有关于FLASH5.0的问题!!!请各位大吓指点! 一个问题,怎样在PC:PageControl上增加TabSheet1,TabSheet1,TabSheet1…. 标题栏为“The police are investigating the robbery-"的是什么程序? 一个弱弱的问题 一个问题,建立的 FB: TBevel没显示,好象根本没建立一样。 如何在 MDI CLIENT 中添加快捷方式??谢谢!! 55分,如何映射控件中子控件的消息? 如何选择书 关于文献数据库的一个问题-如何把一个字段和一个文件关联起来? 所有喜欢到水园来逛逛,但是从不回帖子或很少回帖子的人进来签到~~~~ 谁来救救我呀,我好惨呀。。。。 如何通过VC编程,随时关闭网络端口 诚寻对嵌入式linux感兴趣的网友 今天临走前,再灌一桶酒! 急!!!哪里可以下载到制作工具栏时用到的位图呀? 太原的在哪能买到程序员杂志 我的qq:10120129 谁找我??? xml 高手帮帮我,为什么我下面的文件,在IE5.0中什么也没有?? 请问高手:在uml类图中如何用关系表示一个实体类和一个接口间的关系。 Cathy进来~~ 请问高手们一个Delphi的一个应该是比较底层的东西。 mimi大酒店正式開業﹗先進來的有分啊﹗ 哪个高手完整地讲讲OpenWith菜单项的调用方法和函数等 关于非模态对话框中使用UpdateData(FALSE)函数的问题,朋友,帮个忙好吗? “记事本”小问题,大逻辑.大虾们,照顾照顾小弟呗. Linux下配置ISDN--期待所有的Linux高手到来?? 我是女生,哈哈 急,怎么样在打印表格时使较长的字段分两行显示,并字体变小。 在VB里做的用户控件为什么在VC不能调用啊! 不服不行(真没辙了)[不够可在加200分] 我的代理怎么了? 寻找能显示CAD图纸的delphi控件 偶要给lastlove(☆☆☆☆☆robin★★★★★)放高利贷了! 所有自然数相乘等于几? 如何测智力? 物理和智商有关系么,为什么有些女生物理好但是数学不好呢 26小时等于多少分钟大神们帮帮忙 所有自然数相乘等于几?3Q所有自然数相乘等于几?(注:这是一个准确的数!不是什么X/N/Y 之类的!) 测智力如何测? 分别等于多少 一个自然数它本身的各个数位上的数字之和与17相乘等于这个数,这个自然数是多少?我希望你们能给我一个解答的过程,应该怎样去说,才是有理有条的.因为那个结果是不难知道 钱学森的数学智力测试题?8————————》99 11———————》126 26———————》26115———————》? 4个分别等于多少 哪两个自然数相乘等于13? (初二英语智力测试题) 具体地说说为什么!At a school outing 81℅ of the boys lost a shoe,82℅ of the boys lost a sock,77℅ of the boys a cap and 68℅ of the boys lost a bag.What's the least percentage who lost all 4 things? 中国的面积相当于几个韩国?相当于几个英国?相当于几个日本?. 求数学大神来算下这个的面积.. 求左边的面积(包括三角) 和右边的面积 -.- 狂风暴雨神倒颠打一生肖 韩国有中国好吗?大神们帮帮忙 这个时间还有数学大神吗 求神级智商解答! 中国的一元相当于韩国的几元 1.已知x为整数,且2/(x+3)+2/(3-x)+2x+18/x²-9为整数,求所有符合条件的x的值2.解方程2(x²+1/x²)-3(x+1/x)-1=03.试证:对任意的正整数n,有1/1*2*3 + 1/2*3*4 + ...+1/n(n+1)(n+2) 神起的红色风暴和神话的白色风暴是怎么一回事.?什么叫不要成为第2个ANDY.?SM公司打过艺人么,? 日本韩国跟中国的关系怎么样? 第9题选什么求数学大神 小明和小华一起做功课,小明对小华说:“我出一道题给你做做:一个多边形各内角都等于72°,求这个多角形的边数.”小华想了想,答不上,后来他对小明说:“我也考考你:一个凸四边形的四 韩国和中国现在哪个更发达些谢谢了,大神帮忙啊 第9题,数学大神来,快 有1、2、3、4四个数 2 的出现几率是1的一半、3的出现几率是2的一半、4的出现几率是3的一半.1、2、3、4 的出现几率加一起等于1(100%)那么1、2、3、4的出现几率各是多少 公式是什么?同理5个 10LB多少公斤啊?那就是不到5公斤喽? 第二题,求数学大神解答 我的神 我的神把两个式子相加得到:a3+a7-a10+a11-a4=12=a3+a11-(a10+a4)+a7=12 因为a3+a11=a10+a4所以 要是-(a10+a4)+ a3+a11那就=0了 所以就是0+a7=12 然后…… 然后就求出来了.问;为什么不能用3+7-10=0 11-4-7 在三角形ABC中,角A,B,C的对边为a,b,c,点(a,b)在直线x(sinA-sinB)+ysinB=csinC上若a^2+b^2=6(a+b)-18,求三角形ABC的面积 求数学大神,第9题,只要正确,定当采纳. 龟与神赛跑的数学问题叫什么之论?龟与神赛跑,神先让龟跑一段距离,然后神再追.问神能否追上.答案是实际神能追上,理论追不上龟. 一道关于数学三角函数的题,哪位数学好的朋友帮哈忙,谢 证明sin(x+y)-sinx=2cos((2x+y)\2)sin(y\2)有点急,喜欢数学的朋友来帮哈忙哈,对不起,我再查查 第十题. 神才能做的高一数学难题数列{10^(n/11)}前n项之积大于10^5的最小正整数n=?(最好有过程,感激不尽!) 关于三角函数的数学 如图在三角形abc中角bac等于70度,点d,e分别在ab ac上,且de平行bc,点f在de上,且bd=df ce=ef 则角baf等于 we want to know in____ case people's hidden consciousness can be developedA which B that C whose D what为什么不选A啊 2 Albert Einstein was the first man_____the great amount of energy locked in theatomA to realize B realize C realized D having 有关三角函数的题,求数学大神解答!具体如图:能详细解答吗? 高二数学有关求导的解答,数学大神进!谢谢 CAD请问这个几何图形怎么做啊,想了几天了,求大神们回答,外形差不多这样,已知道尺寸. 数学三角函数.算的好难过啊. 24题怎么求导?求大神帮忙解答下!谢谢! 英语翻译 关于爱因斯坦的数学游戏,随便做运算可以知道起始数字的那个,请问一下怎么解的大科学家爱因斯坦小时候就特别聪明,有一次同学们在一起玩,他说:“我们做一个数学游戏怎么样?”同学们 求大神解用变限积分求导解此题 12个9加减乘除等于1212,急…… 求爱因斯坦数学题.有一条长阶,若每步跨2阶,则最后剩1阶;若每步跨阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨7阶,则最后正好一阶不剩.答;#include int main(void){int steps = 29,i = 1;while ( steps 数学的二次求导到底干嘛用的,求什么的?高中多用二次求导来证数列不等式,到底二次求导怎么用,用在哪的? 1-3-7-5加减乘除怎么得24? "爱因斯坦的数学游戏"大科学家爱因斯坦小时候就特别聪明,有一次同学们在一起玩,他说:“我们做一个数学游戏怎么样?”同学们说:爱因斯坦说:“你们随便想一个数,然后做一些运算,我就 哪能测智力,我测过一个33道问题的那个,但分太低,我不可能就有比弱智聪明一点!谁有再给我一个 分数加减乘除法的意义和整数加减乘除法的意义有什么不同问答题 解上来你就号称第二爱因斯坦5乘5的方格从1开始依次排列到24.1旁边的X不用写~就还剩下24个格子!两数之间不能不能跳跃!必须是两数紧靠着!也不能倾斜着写. 我测过一个33道问题的那个,但分太低,我不可能就有比弱智聪明一点!谁有再给我一个 将八个8用加减乘除等运算符连起来,怎么得到1000? 爱因斯坦 数学只有1分.据说德国的大学1分是满分.那到底爱因斯坦的1分是最高分还是最低分?从前,看故事,说爱因斯坦小时候数学不好,考试只有1分,但是努力学习后成为了最伟大的物理学家,当 怎样测智力?智力 我智商130左右,但为什么还是学不好数学和物理啊.做了许多测试,智商在130左右.其中一种测试中显示我右脑智商70+,左脑智商50+.数学和物理是用的哪个脑?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn