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

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

next(expr)-JQuery API not(elems)-JQuery API not(expr)-JQuery API not(el)-JQuery API parent(expr)-JQuery API parents(expr)-JQuery API prev(expr)-JQuery API siblings(expr)-JQuery API Events事件-JQuery API bind(type,data,fn)-JQuery API blur(fn) -JQuery API blur() -JQuery API change(fn) -JQuery API click(fn)-JQuery API click()-JQuery API dblclick(fn) -JQuery API error(fn) -JQuery API focus(fn)-JQuery API focus() -JQuery API hover(over,out)-JQuery API keydown(fn) -JQuery API keypress(fn)-JQuery API keyup(fn)-JQuery API load(fn)-JQuery API mousedown(fn)-JQuery API mousemove(fn)-JQuery API mouseout(fn)-JQuery API mouseover(fn)-JQuery API mouseup(fn)-JQuery API one(type,data,fn)-JQuery API ready(fn)-JQuery API 十万火急,兄弟们过来帮帮忙........... 多字段模糊查询~~~谁会啊!! 高手请进 关于dialog和控件回车键消息处理的小问题 photoshop背景色的问题 虚函数能否做友元? const^:^ *********在dll文件中怎样打开一个窗口********* 自定义对话框 求解:怎样使用数据窗口能多页预览?有这项功能吗? 域的DNS有问题! 出现out of range 只是偶尔出现并不是经常出现?我的配置在里面 想问问大家关于微软认证的看法。 我有光驱上哪找 请问斑竹:c#中有类似exit(0)之类的函数吗, 请问谁有将可执行文件中的资源提取出来保存在新的rc文件中的源代码? PB数据库的连接分类解决问题? 数据窗口鼠标焦点为什么会遗失? 怎么用xp安装盘升级两千或酒吧下的wmp? 怎样得知ListBox中已经有多少项内容了? 看看大家关于微软认证的看法(只能给77,全给了) OFFICE XP以及金山词霸的漂亮菜单如何实现的??有源代码可以参考吗?? 谁能说一下"快手"的程序是怎么工作的啊 这个问题我都问了三遍了,还是没人帮忙回答一下? 这样怎么能不行了?怪了. ~散分哦~,哈~ 可怜的准初级程序员(水平的没过,竟然拿了个资历格的) 各位兄弟请了!一个远程接入问题邀请教各位~! 这个问题好象不难 如何在WIN NT4中安装、使用IIS4????? no pains,no gains. work for the beautiful girl here and for our beautiful life 各位大侠: 我是新手,有人能给我讲讲xmlspy吗?? win.ini与SYSTEM.INI的区别? Oracle 的产品真的很烂吗?参与者都有分! 现需开发一套对多个数据库(不是一个数据库中的多个表)进行操作的程序,使用BDE,请大家提建议 CPen的问题! 各位请教:我要通过电话线做多路远程接入但我不想用路由器 请问,使用ado控件的程序,考到其他机器上,除了数据库和应用程序之外,还需要拷贝什么文件? 部分技术超过OFFICE 国产软件挑战微软 关于子窗口 请教:uninstall onflow.exe和wcmdmgr.exe是什么软件? DataSet如何定位记录. lius_lzc(小刘)你好。请来这 高程成绩 不是高手不要进来!!!!!!!!!!!!! 那位大侠能说一下快手的原理啊,有源码最好???????????????? 各位有什么网站可在线看片或下载东西,网速要非常快,如果有请与大家分享,如果没有请勿进,免得大家试半天的网址,谢谢合作 实模式和保护模式的区别? 一个只问小湖的问题 ASP 中的 Response.End 在JSP中怎么写??? 有关多媒体数据库的问题 物理性质的硬度、延展性是什么?请举例说明、谢谢叻 塑性材料和脆性材料比较级机械性能比较他们的机械性能 乳白色石头,半透明颗粒状,硬度比翡翠小,比玻璃硬,是个什么石头, 请问,哪个牌号的铝,硬度最低,延展性最好?我想加工一些直径5毫米,厚度2毫米的铝片,并把这个片填到体积相当的小坑里,通过锤击,让铝片充满这个坑,所以需要硬度低,延展性好的铝, 质量不同两物体相撞,哪个受伤程度大? 【高中】【物质结构】影响物质硬度的因素有哪些因素会影响物质硬度?请大家分别都说明一下,到底是化学键还是晶体结构啊? 刷墙的白水泥有什么作用? 两个已知质量和初速的刚性物体碰撞,求碰撞后速度有两个刚性物体,一个质量为m,速度为u0(X轴分量和Y轴分量分别设为ux0,uy0);另一个质量为M,速度为V0(X轴分量和Y轴分量分别设为Vx0,Vy0).求它们发 比较物质硬度可以使用的方法是___ 白水泥带有什么作用 假如地球上某个物体质量比地球重,会发生什么! 常用_____法来比较物质的硬度 EVA热熔胶是否溶于水中?如何将EVA热熔胶溶于水中配置成溶液,我把胶棒放水80度水中时,变成一团糊状物,并不溶,我需要EVA热熔胶粉末,细度在500UM最好.细一些,和胶水混用,呵呵,可以不? 什么是“延展性”?(比如金能制成很薄的金箔,说明金的延展性好.) 质量为3kg的物体重多少牛 请问国内主要的EVA树脂热熔胶代理商有哪些?例如:韩国现代、法国阿托菲纳、日本三井、北京有机厂等等牌号的,要有实力的代理商! 什么叫延展性 装修内墙时,用石膏粉好?还是用白水泥好?白水泥会不会裂? 请问注塑机中的射胶一段、二段等等,还有保压、位置,各阶段有什么意义,起到什么效果?还有缩水,银丝等问 黄金的延展性最好,1克金可以拉长多少米? 物体发声时都在______,通常把发出声音的物体叫做_______.帮帮忙昂、、 注塑机的射胶设定中的位置是什么意思啊 黄金有很好的延展性,经过现代工艺加工,一克纯金可拉成多少米长的细丝? 我们能听到物体发出的声音是因为( )A.有声源B.有物体C.发声体在震动D.有传声介质 如何调注塑机工艺参数(如何设锁模,射胶的速度,压力,位置等等),为什么?各位大侠师傅,传授点实际的经验(如牙膏架),现在我拿到产品很茫然,不知输多少(有没有计算公式什么的)?不用 什么东西含砷成分 物体是靠什么发出的声音的? 怎样设置注塑机的三段射胶位置和五段射胶位置?保压的时间怎样设置? 海天注塑机怎么样 生活中有哪些发声物体、它们是怎样发出声音的? (急)注塑机 熔胶不止 射胶不到设置的位置注塑机 熔胶不止射胶不到设置的位置~ 海天注塑机价格表海天注塑机能否分期付款? “嗖”可以表示那些事物发出的声音一定要准确. 为什么氯化钠晶体性脆,金刚石坚硬但脆,而金属铁 铜会有延展性 宁波海天集团的介绍和海天注塑机的情况价格质量联络方式? 在装修中用的滑石粉,石膏粉,白水泥和熟胶粉有什么作用我想知道的是他们在墙面处理中各起什么作用,怎么识别和搭配. A橡胶B纸张C塑料D银E指南针F水G汞H金刚石I肥皂K玻璃·密度最大的是 比热容最大的是 弹性最好的是 延展性最 生产ABS塑料的6:100圆锥接头时注塑机的调试参数会产生影响吗?具体的影响有什么? 石膏粉:模具制作要想做一个鸡蛋的石膏模型.类似蛋状的.石膏粉掺水要多少才能凝固成形.要怎么样把它弄成形 1.注塑机射胶压力不够 请教:想做箱包ABS+PC塑料外壳,请问选用什么样的注塑机,价格大概多少想做箱包ABS+PC塑料外壳,请问选用什么样的注塑机,价格大概多少,适合做手工作坊吗?每个模具开模是不是挺麻烦,成本是不 做工艺品模具用的石膏粉强度要求是多少,用脱磷石膏粉行吗?请问做工艺品模具的石膏粉强度要求是多少,用脱磷石膏粉行吗? 注塑机射胶压力太高什么原因 注塑机用ABS料啤出的产品有夹水纹该怎样调? ABS 阻燃ABS 那个脆?那个韧性好如题 ABS和阻燃ABS的材质特征 哪个更脆? 震德注塑机中的射胶速度和压力上下调动有什么作用压力80改为速度35 刚性约束的定义 物质的硬度由什么决定 什么是白水泥?白水泥用途是什么?白水泥品牌有哪些? 材料力学性能与材料力学有什么不同吗?这两门课程有什么区别吗? 物质的硬度和弹性由什么决定的? 金属导电靠的是内部大量的( )的( )移动导电的 由(a^2-1)y=-3得到y=3/a^2-1,这一变形依据是什么?应收什么条件限制?为什么? 物质硬度的大小,是由哪些物理性质决定的? 物体导电性.牛奶、巧克力、水晶是易导电物体吗? 塑性材料一定大于脆性材料力学性能是什么?是弹性模量吗? 这是什么陨石?气印,熔壳,流线都有,内部类似玻璃,硬度大能划玻璃,比地球石头重, 怎样能把注塑机速度调快一点,速度和压力,射胶,溶胶,开模的数字越大是越快吗? 弹性力学的符号怎么规定 我有一块紫色透明石头而且硬度很高可以划玻璃请问是什么
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn