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

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

【先锋】从代码层诊断,云端OneAPM平台让开发者专注开发 阿里将推无线领域重磅计划 阿里百川无线开放大会揭晓 提升网站转化率的四步优化方案 开发者应该了解的API技术清单! 【讲师】腾讯刘永峰:Docker时代,公有云面临的挑战和机遇 移动开发工具服务商Mob推出免费短信验证码SDK 遇见他们,MDCC 2014移动开发者大会嘉宾揭秘 揭秘全球最小无线耳机背后的技术 《最终幻想》之父访谈:我为何转战F2P游戏开发 寓教于乐 11款最适合教儿童编程的学习工具 苹果iPhone6获工信部许可 本月17日在内地发售 使用Redis之前5个必须了解的事情 妆媒体微信公众号背后的酸甜苦辣 TIOBE 2014年10月编程语言排行榜:Dart首次进入前20 Instagram工程师教你如何改善App的性能 利用Neo4j对电影评论进行深度学习情感分析 【简讯】SQLite 3.8.7来了 性能提升超50% 浏览器重定向性能分析经验谈 豆瓣工程副总裁段念:看板方法核心瞄准流程中的“流动性” 【图文实录】CTO俱乐部公开课:探讨如何成为技术团队管理者 资深产品交付咨询顾问何勉谈看板:“以价值拉动”解决敏捷困扰 开源HTML5游戏引擎Frozen背后的技术 MDCC 2014精彩日程、演讲嘉宾、参展开发团队全揭秘(图) Hi,约吗?2014华为开发者联盟沙龙(上海站)火热报名中! 找虐新方向!TinyScreen显示屏打造最小游戏机 精彩继续 MDCC2014首次推出技术训练营 复制器官哪家强?3D生物打印找PrintAlive 电信开放平台应用内计费SDK 助力App小额快捷支付 专心做设计!开源跨平台应用开发框架Appverse Mobile 无线盛宴尽在阿里百川开放大会 医学界的Instagram:加拿大重症监护医生开发照片分享应用 请问:怎样编程来来虚拟网卡? 一个搞不明白的问题 在线等待,急!!!!! 急,急!组件中如何获得顶层对象? Fat16向Fat32转换的问题 怎样把Image中的图像存入剪切板?在线等! 菜鸟散分,chart问题,UP有分 用ASP如何在access中删除和添加数据(在线等待) 从一个表里进行查询,查询结果有多条记录,如何我只想要其中的某一条,请问如何取出。 请问:怎样编程来来虚拟网卡? .net目前是什么版本?在哪可以下载到新的安装盘?回答有效100分! 各位,一个重要的问题关于doc.send(false)问题(急!!) 请问:怎样编程来来虚拟网卡? WAP中如何读取手机号码?高分相送!马上给分! 有什么办法可以知道我的共享盘是什么时候创立的,并且知道人家访问过我的共享盘中的哪些文件 答题,大家帮我看看怎么让这个session的改变在页面上显示出来~~~~~~~~~~~~~~~~~~(开始写错了~~) 请教各位DX:关于iframe中显示图片的问题 xp的桌面问题 急!!注册数据库的问题 IBM软件清库存(大优惠) linux 9.0 安装后无法启动,请帮助 请问delphi怎么读取xml文件中的内容? IBM软件清库存(大优惠) 〉〉〉〉〉〉〉〉求一份对旧系统进行分析、整合、优化的文档 又是闪烁,头大! 简单问题,请紧急指导.(在线) help help : fortran + dll = ? 奇怪的现象:判断不了SQL sum()查询结果!!! 2003高考试题 设置访问表命令:“access-list 2 permit 10.0.0.0 0.0.0.255”中10.0.0.0 和 0.0.0.255分别指什么? 请问谁知道这是什么缘故啊? 如何计算cpu和memory的一般的使用上限 在delphi中使用什么报表控件打印的报表效果较好 谁知道db或dbf头文件的格式? 急急 NMFtp中我想从ftp服务器下载指定文件扩展名的文件,该怎么办? 初始化页面的时候,如何使TextMode="Password"的asp:textbox有默认值显示? IBM软件清库存(大优惠) 又是可恶的乱码问题 struts与数据库!在线等待! 如何开发asp.net程序(基于vb) vc++的链接错误 如何用程序动态的获得activex控件的方法属性事件信息 请教:使用web.xml做资源约束时如何由自己的程序来做用户验证 请问:怎样编程来来虚拟网卡? 急!创建LOOKUP的问题 如何计算cpu和memory的一般的使用上限 新问题请教! 老问题:从Excel文件里把数据导入导数据库中 有汇编玩的非常牛的人吗??? 字符串操作的简单问题 学习J2EE需要装什么软件? 于是举州皆谓灯为“火”的意思 怎么读 Green Light(Radio Edit)歌词谁有阿.我没钱了加不了悬赏了.麻烦好心人告诉下哈. 于是举州皆谓灯为火 On ne sait jamais ce qu'il pense vraivment .elle change d'avis sans If your watch is a quartz or a sel-fwinding one,there will be no such trable. 翻译 举州皆谓“灯”为“火”的举是什么意思.在只许州官放火,不许百姓点灯. Avis国际租车谁了解这家公司?或者租过这家公司的车?这家公司的车贵不贵?服务好不好?能不能自驾?在哪能得到详细的了解.交易有没有担保,最好是有向拍拍、淘宝这样的网店最好! I'm going to ( )the radio station.yon must ( )the red light.A.closes down B.look out for C.look out of D.take you around E.the end of F.would like to 填空并翻译 于是举州皆谓 灯 为 火 被我选中最低可得50悬赏啊 均值和方差全都是大于等于0的吗 如何翻译这句英文?用比较正式的语气 “Such activity will be billable to you.”Such activity will be billable to you.关键这个billable在这里是什么意思?是可以开账单?还是需要收费? Marie___tout à coup qu'elle avait un rendez-vous avec Jacques à 19 heures.A.s'est souvenue B.Marie___tout à coup qu'elle avait un rendez-vous avec Jacques à 19 heures.A.s'est souvenue B.a rappelé一道法语题,这里为什么选A不选B?se souv avis租车怎么样 什么是激素耐药? 判断下列句子用了哪些修辞手法,并把相应的序号写在后面的括号里.A.比喻 B.拟人 C.排比 D.对比 E.反问 F.夸张 G.对偶 H.借代 I.通感1.可怜九月初三夜,露似珍珠月似弓.( )2.长征是宣言书, Amon avis怎么读啊?我不会说英语,这个是一个衣服的牌子来的~如果有人知道怎么读能用汉字帮我写出来读法和Amon avis这个英语一样读法的吗? 高一语文必修1《劝学》《师说》《赤壁赋》中重要的名句,考试经常考的句子, A(4,3)为坐标内一点,在x轴上是否存在一点P,使△OAP为等腰三角形求出点P 的坐标是不是(5,0)或(8, 求二重积分∫∫√4-x²-y²dxdy,其中D是由x²+y²=4所围成的区域.求哪位老师大神帮忙做一下.尤其是积分写详细一点.跪求 宜 和 怡 读起潮汕音 一样吗 《我的空中楼阁》的作者李乐薇到底是男还是女?最好请给出事实依据有的地方又说他是男的,有的地方又说她是女的.就连我们老师讲课是也是含糊不清的给混过去了. 加里曼丹岛的地势特点,并说明判断理由 pour 已知点A(-2,1),在X轴上存在一点P,使三角形OAP是等腰三角形,求点P坐标. 五个一活动心得体会 要800字 大家帮帮忙五个活动是:看一本好书 做一天家务 做一件好事 点评一件案例 做一项调查 我很郁闷 我不会写 还要800字 大家帮帮忙 急用 when your love back .feeling as a romantic story是什么意思,? 李乐薇的我的空中楼阁 的简介,越短越好.急! 罗贯中在《三国演义》开篇就写到:“天下大势,合久必分,分久必合.”请仔细阅读下图,回答下列问题 姓王的“王”用英语怎么写? 就是拼音的wang么?如题、 英语翻译 法语 on peut en faire des choses. en faire 啥意思前面为什么加个en 怡的第四笔怎么念?快 英语翻译 merci ..on peut faire des amis 什么意思 我叫WANG MIAO,女生,想取一个和它读音相近的俏皮可爱的英文名字, 英语翻译 用博喻和通感的修辞手法造句 各三个 帮起一个英文名读音是 wang(2声)rui(3声) 求 通感 博喻 比拟三个句子如题 puis-je vous être utile 中的 vous être 这个句子语法怎么解释呀? 有没有包含“明”和“轩”这两个字的诗词,最好是古文, 括号句子提问My family is going to have holidays (on the beach) 为什么诗中讽刺“直把杭州作汴州” 高一语文诗说,劝学,赤壁赋三篇背诵部分是哪 负外部性导致的效率损失:供给过剩? A secrt mekes a woman woman 加里曼丹岛多火山的原因?为什么火山那么多?还有盛产咖啡的原因 正外部性导致的效率损失:供给不足 英语“Cheerful,lively woman adventurer”指的是什么意思?还有“I detest,for fear of marriage,but I also very much want to get married,God ah,how I so self-contradictory ah? 辩论It's good for high school students to write books英文中文均可最好英文正方反方均可 李乐薇除了《我的空中楼阁》还有哪些作品? 这个woman到底怎么读啊..woman根据音标来是屋们 而大家都读握们到底怎么读啊?根据音标前面是读屋啊,到底怎么回事啊? 马来西亚有大约一半的领土位于加里曼丹岛上,那么马来西亚是岛国还是大陆国 外部效应(外部性)对市场效率有什么影响?为什么说它是市场失灵的一种主要表现? je pars demain matin 这句话法语中pars是啥意思 write good paper 是什么意思 如何对外部性进行纠正 我要做你的Only Women.祝大家新年快乐! 1945年加里曼丹岛有多少人口 研究发现:SARS类病毒或由蝙蝠直接印尼强烈抗议美国监听 要求美国政府作英国脱离欧盟将导致苏格兰独立纽约买烟最低年龄提高到21岁洪航勇任杭州市人大常委会代理主任(图美辱华主持人回应华人起诉:他们愿浪费国际刑事法院推迟审理肯尼亚总统案美国航班飞行中将允许使用部分电子设备10月份国际大事回顾:美联邦政府关门奥巴马喊话投资者“选择美国”摄像师探寻日本平凡之美东京博物馆特别展 揭秘日本封建末期神万圣节狂欢化装派对 萌“小鬼”们惹人多伦多市长涉吸毒视频被查获 其友涉嫌西班牙走出两年经济衰退 首次出现经济巴黎街头上演真人版浴室广告 女演员穿美墨边境发现新贩毒地道 配电力轨道和约旦河西岸推进环保 巴以或实现“环境俄罗斯富人与穷人代名词:寡头、工薪族英媒窃听案中两名涉案编辑被传系恋人关美将俄歌星列入黑名单 俄抗议表示不可布冯迎来意甲首秀20周年纪念日英超考虑本轮联赛赛前演奏马赛曲英超主席:同性恋球员会获得尊重梦想的房子---Airlie Bea【今日财料】贝克汉姆一家的无利润投资这10种人,前途无量!私募基金的春天到来--全国私募产品报詹姆斯:或许我该调整下领导方式并不完美的的手柄——Gamesir小江南春:分众将连接服务、金融,打造闭今天是世界厕所日?别逗了!中职无序招生大战背后的教育政绩思维“创业算学分”不能是“混学分”恒泰君安:20151119晚间原油策资本寒冬来袭,智能硬件创业者们需要练让理发师给我剪一个让女人一看到就惊讶行情:大神Note3(移动版)售价7行情:乐1s售价1099元,2-3周黄章谈乐视小米竞标2016春晚 十万国行版Lumia950/Lumia9低价也能玩手写,酷比魔方iwork1
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘