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

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

Github宣布支持SVN方式访问 iPad,正在改变什么? Go Mobile:行业大牛谈行业应用开发 亚马逊Cloud Drive新增文件同步功能 对抗Dropbox 35万奖金发放,BlackBerry 10大赛奖项揭晓 超越Google Apps:排行榜前10的相关云应用 荣耀终将消散 全球第一台千万亿次级超级计算机退役 谷歌已推免费Android和iPhone版Quickoffice,微软你呢? 用于响应式设计的9个CSS技巧 微软Surface Pro正式登陆中国市场 售价6588元起 岳雷:Windows Server 2012虚拟化性能提升巨大 陈健:Windows Server 2012让企业轻松管理IT 智能手机:革命已经波及到阴间 兄贵草泥马:重口味单机移动游戏为什么能火? 最炫HTML5框架Famo.us 将免费面向开发者 MySQL到NoSQL:数据的重思和查询方式的转换 程序员心髓:移动应用API设计10大技巧 Netflix公布个性化和推荐系统架构,3种类型作业通实时 从SendCloud到搜狐云 扎克伯格的败笔?Facebook Home可能无家可归 走进eico design,仰视设计师 乔布斯顾问承认苹果的命名糟透了 罗永浩:一百万年薪!招聘软件研发总监 开源的:helios移动应用后端服务框架 IE11将支持WebGL 或将OpenGL映射到DirectX 基于云端的3D渲染和协作平台Lagoa:仅需一个浏览器 大数据提速,IBM 推面向Hadoop的PureData大数据机 游戏开发者的盛宴:2013 CocoaChina春季开发者大会强势启动 开放还是关闭API?CIO做决策前应考虑的六个建议 Python 2.7.4发布,更快的IO模块 如何拒绝沦为服务的商品,并收回对数据的绝对掌控 Midas服务器无法在另一台计算机上运行,只能在本机运行,请问是什么原因? 请问如何知道数据库中有哪些表存在?在线等待 怎样在主框架类里调用文档类指针,以便获得文档类数据? 兄弟,帮个忙! 怎样实现ftp客户端功能 java中如何象windows那样拦截其他窗口的消息? 告别CSDN,第一个全部进入全部给分 同一个submit可否和如何递交给不同的服务器端的不同的action处理? 一个关于tomcat中servlet的棘手问题。。。。。 谁有jbuilder6的license keys或serial number? 請教:vb里dim oRs as ADODB.Recordset與dim oRs as new ADODB.Recordset的區別在哪里? 请大家指点下在深圳哪里可以办个边防证?谢谢 在程序中如何得到一网页中的按钮焦点? 用vc生成曲面要用到那些类? 有關微軟的MCSE認証 请问如何用DELPHI实现拨号连接服务器? 有关界面的问题 如何实现Windows 2000 Server 远程拨号登录?请奉上你的经验和智慧!!! 莱鸟级的问题,你敢来挑战吗? TADODataSet 读磁盘文件是怎么用的? 我的毕业设计,一百分的送分题啊!!!!!!!!!!!!!!!!!1 请教这个函数的作用 //创建列的问题,谁帮我看一看缺什么,谢了 如何在本地访问远程数据库,用什么样的方法在速度、安全上都好一些 请大家指点下在深圳哪里可以办个边防证?谢谢 各位大侠,谁能介绍一下utf8,还有怎么把它转到gb2132编码呢? 我的毕业设计,一百分的送分题啊!!!!!!!!!!!!!!!!!1 窗体问题。。。 现有一个小项目: 怎样动态增加表格? 有人解决了jive的中文问题吗?? 报表就是查询结果吗?用VB很难做吗?为什么这么多人讨论,请问设计报表难点是什么? 请问我的VC地ClassView无法打开,有什么快速的方法可以打开 一个关于tomcat中servlet的棘手问题..... 谁可以帮我提供一个PHP的站内目录管理程序! 请问c++中,函数重载和虚函数有什么区别,在实现多态性方面有差别吗? 现有一个小项目: 如何对多个按钮的BN_ClICK进行映射 SQLserver备份与恢复 Delphi中怎样声明一个类?怎样实现多态?如果要在类库的一个类中添加一个方法又怎么做? 然后怎样封装它?是不是封装以后维护就非常简单? 可 计算机网络--〉清华大学出版社,作者:Andrew S Tanenbaum哪里有电子版下载 把播放F4的时间上《我们程序员都是活雷锋》 随便问问:VC能不能调用Access中的Form,Report 用ADO在线程中打不开数据库,请帮忙 如何在VB中动态的加载Dll,并使用其加载的函数??? 高手们看过来 Oracle初学,兄弟们多帮忙了! 怎么打开一个.txt文件,然后一行一行读取? 请问大家知道一个局域网里的IP在因特网上如何表示的呢。 请问各位,如何在我的程序中用代码生成Access数据库? 神啊,救救我吧,我想要含笑半步喋=== 请教NT4。0下的IE2。0怎样升级到IE6。0或IE5。0? 小球以某一处速度V0沿固定 一辆公共汽车进站后开始刹车,做匀减速直线运动,开始刹车后的第一秒内和第二秒内位移大小依次为9米和七米.则刹车后6秒内的位移是多少 某烷烃和烯烃混合气2.24L,将其燃烧产物通过浓硫酸后,质量增加4.05g,再通过碱石灰,质量增加6.60g,(标准状况下完全反应)求混合气体的组成. 稀 硫酸氢钠溶液 与 碳酸钠溶液 的化学方程式 有没有生物学/微生物学或者知道的朋友能告诉我这种是什么生物吗,这个是晒干以后的照片了,可以吃的,在沿海城市有,福建浙江广西江苏一带有人吃这个的.喜欢伏在芦苇上的.不是鲍鱼哦。是 欧洲近代的政治制度是什么?各国的国家首脑和政府首脑是什么?是怎么产生的? 碳酸钠和硫酸氢钠可以反应么如上...讲一下关于酸式盐和盐的反应问题........ 炭是由什么构成的? NH4CL BACL2 CUSO4 NA2SO4 的判定有四种白色固体1.NH4CL 2.BACL2 3.CUSO4 4.NA2SO4 不用其他试剂除了水就把他们判定出来.区分出来的先后顺序为3241.为什么?如果先把3加到4中是不是无法判定是否产生反应? 亚硫酸氢钠、硫酸氢钠、碳酸钠、碳酸氢钠、硫酸钠的电离和水解的化学反应方程式? 木炭主要由甚么构成 西方的政治制度适合我们国家吗?我认为政治制度与一个国家的历史文化有关,西方的那一套和他们的古代政治制度和文化有关,他们那套未必就符合我国的国情! .下列物质中碳元素质量分数最小的( ) A.碳酸钙 B.干冰 C.金刚石 D甲烷 体温计不小心摔坏在床上,水银洒在床上怎么办?收集水银后,将凉席擦洗后使用危害大吗? 欧洲东部的大部分国家采用什么样的政治体制.东欧国家的历史演进使政治变得错综复杂,从中世纪到近现代的一切轮换体制不可能用常规的政治思维去判断是非,所以没有答案. 就一种碳元素能组合成多少种物质,像碳,钻石 木炭是什么?是有什么组成的? 为什么说新政治制度是欧洲范围的革命 只含有碳元素的物质 A.一定是金刚石 B.一定是石墨 C.一定是纯净物只含有碳元素的物质 A.一定是金刚石B.一定是石墨C.一定是纯净物D.可能是混合物 木炭是由什么元素组成的?木炭和煤是由什么元素组成的? 如何鉴别NaCl和Na2SO4 能用BaCl2么 将金刚石和石墨混在 一起,是纯净物还是混合物[ 他们都是C原子构成] 以10m/s的速度行驶的汽车,关闭油门且刹车,加速度的大小为4m/s²,求(1)刹车后2s末的速度(2)移多大,刹车3s后汽车的位 欧洲中世纪主要国家的形成和发展这是高一上学期的历史题,有知道的兄弟快出手! 金刚石和石墨放一起是单质还是混合物 什么物质是由炭原子组成的 中世纪欧洲各国为什么都是四分五裂封建割据?是德国那样的采邑制度造成的?像葡萄牙西班牙那样的外国入侵造成的? 将钻石与石墨混合在一起,得到的是混合物么? 标准状况下,某气态烷烃和烯烃的混合气体2.24升,完全燃烧后生成4.05克水和6.6克二氧化碳,该混烃的组成 中世纪欧洲的基本政治状况是 ( ) ①封建割据严重 ②封建王权衰弱③天主教会居于至高无上的地位 ④世俗王权与教会神权处于绝对对立状态A.①②③④ B.①②③ C.②③④ D.①③④怎么选择 列出15个食物中的可数名词 有一包固体粉末,可能是NaOH、Na2SO4、MgCl2、CuSO4中的一种或几种组成,为了分析固体粉末的成分,取少量该固体粉末进行实验,实验方案设计如下:(1)固体粉末中一定有,一定没有.(2)若现象X 现有一包白色粉末可能由NaCl Na2SO4 Na2CO3 CuSO4 中的一种或几种组成如题、现做如下实验:1.取少量粉末,加水溶解得无色溶液.2.另取少量粉末,滴加稀盐酸,无明显现象.请回答(1)根据上述实验 不经过思考,脱口而出的词语是什么, 碳与金刚石是不不是同种物质(初二下的)碳与金刚石中的原子个数是否相同?把碳与金刚石放在一起是不是混合物? 一包白色粉末可能是CuSO4,CaCl2,Na2CO3,NaCl四种物质中的一种或几种组成,为确定白色粉末成分,一包白色粉末可能是CuSO4,CaCl2,Na2CO3,NaCl四种物质中的一种或几种组成,为确定白色粉末成分,进行了如 李阳所说的脱口而出是什么意思?如何检验自己能否脱口而出? CUSO4,MGCL2,BACL2,NAOH 怎样鉴别 100分 想请教下,以聚乙二醇为基础油和以丙二醇为基础油产出的切削油有何区别呢?分别可以用在哪些领域呢?谢谢乙二醇可以用作切削油的基础油吗?如果可以的话又是用来切什么的啊?谢谢哦! 自得其乐是什么意思?脱口而出什么意思? 有一包白色固体,可能含有Na2SO4、Na2CO3、NaCl、BaCl2、CuSo4中的一种或几种,现做以下实验:1.取样,加足量的水,充分搅拌,过滤.得到白色沉淀A和无色溶液B2.在白色沉淀A中加入足量的稀盐酸,沉淀全 中世纪欧州最强大的是哪国?是不是神圣罗马国? 中国早期政治制度的特点是什么? 现有一包白色固体粉末,可能有BaCl2、KOH、KNO3、MgCl2、CuSO4中的几种混合而成.为证明其组成,做如下实验:(1) 取少量该固体粉末,加足量水充分搅拌静止,只得到白色沉淀和无色液体,过滤,得白 中世纪的欧洲国家如果我想去有保存多一点的中世纪的建筑物,文化的国家,有什么国家? 中国早期政治制度的特点 现有一包白色固体粉末,可能有BaCl2、KOH、KNO3、MgCl2、CuSO4中的几种混合而成.为证明其组成,做如下实验:(1) 取少量该固体粉末,加足量水充分搅拌静止,只得到白色沉淀和无色液体,过滤,得白 中世纪时期欧洲有哪些国家?越详细越好...好的有追分... 有一包白色粉末,其中可能含有NaCl、CuCl2、Ba(NO3)2、NaCO3、NaSO4、K2CO3.先按下列步骤进行试验:1.将该粉末溶于水得到无色溶液和白色沉淀2.再滤出的沉淀中加入稀硝酸后,有部分沉淀溶解,同时产 做爱时老公说只给我干过口活什么意思一次做爱时 老公突然说我只给干过口活 是不是说明有其他女人 不小心把水银弄到了水壶里喝了有什么伤害吗? “重口”是什么思今天看了新一期的洛奇花园,其中:“原来搞阴郁音乐的.都这么重口?”中的“重口”是什么意思?我不要网上抄的!我想要好理解的!(我很纯jie) 某烷烃和单烯烃的混合气体2.24L(标准状况),将其完全燃烧,产生的气体缓缓通过浓硫酸,浓硫酸增重4.05g剩余气体通过碱石灰,碱石灰质量增加了6.60g;另取该混合气体2.24L(标准状况)通过过 沾过了水银的水壶还能不能用?今天用温度计的时候,温度计破裂,水银掉到了烧水壶里.那么这个水壶以后还能不能用?能用的话该怎么消毒?不能用又该怎么处理? 好重口!这是啥片儿啊? 将下列物质混合后溶于水,得到混合溶液的是 A.NaNO3 NaCl Na2SO4 B.MgCl2 NaOH KNO3 C.CuSO4 CaCl2 MgCl2D.BaCl2 AgNO3 KCl 为什么? 水银不小心掉在了正在烧开水的热水壶里,把水倒掉再烧一壶,还可以喝吗?水银会不会在盖子上凝固呢? 重口什么意思 1.一辆公共汽车进站后开始刹车,做匀减速直线运动直到停下.开始刹车后的第1s内和第2s内位移大小依次为8m和6m.下列说法中正确的是 A.汽车在开始刹车后4s末停下B.汽车在开始刹车后5s末停下C. =口=啥意思. 碳酸钠和硫酸氢钠反应的化学方程式二楼和三楼都是我的朋友,而且都答得不错!我该选谁?(看到这个多少给我回一个)
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘