狠狠撸

狠狠撸Share a Scribd company logo
Redis 大数据之路
                       @唐福林
                http://weibo.com/tang?
                  http://blog.fulin.org


                                          DTCC2012
12年4月15日星期日
对于我(们)

              ? 新浪微博
              ? 微博开放平台 open.weibo.com
              ? Feed 架构
              ? @timyang
              ? 招聘进行中
                                        DTCC2012
12年4月15日星期日
大纲
              ? 对于大数据
              ? Redis 介绍
              ? 新浪微博中的搁别诲颈蝉大数据之路
               ? 通知
               ? 好友关系
               ? 计数器
              ? 经验教训               DTCC2012
12年4月15日星期日
对于大数据
              ? 线下大数据 vs 线上大数据
              ? 数据挖掘 vs 在线服务
              ? 持久化的大数据 vs 内存中的大数据
              ? 结构化大数据 vs 半结构化大数据
              ? 个人定义:数据要求比单台机器能力高
               ?一个数量级

                                 DTCC2012
12年4月15日星期日
Intro to Redis
              ? REmote DIctionary Server
              ? NoSQL by @antirez by VMWare
              ? redis.io github.com/antirez/redis
              ? start at 2009, now latest stable 2.4.10
              ? Key - String,Hash,List,(Sorted)Set,Pub/Sub
              ? Great Performance
                                                        DTCC2012
12年4月15日星期日
Intro to Redis
              ? Written in C , Single thread , event driven
              ? Fork : copy on write by OS
              ? Replication
              ? Persist
               ? aof
               ? rdb
              ? All Data In Memory                        DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之路

              ? 新浪微博中的搁别诲颈蝉大数据之路
               ? 通知
               ? 好友关系
               ? 计数器

                                   DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之路

              ? 新浪微博中的搁别诲颈蝉大数据之路
               ? 通知
               ? 好友关系
               ? 计数器

                                   DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之通知




                            DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之通知

              ? 业务场景
               ? 用户通知(通知单个用户)
               ? 公共通知(通知全站所有用户)
                 ? 新通知提醒
              ? 技术难点
                                  DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之    通知
              ? 存储 by redis
               ? 索引 key - list
                 ? uid - notice id list
                 ? public notice id list
               ? 内容 key - value
                 ? notice id - notice content
                                                DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之    通知

              ? 存储 by redis
                 ? 提醒 key - value
                  ? uid - since public notice id
                  ? uid - since notice id ?
                                                   DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之通知

              ? 技术实现
                 ? 发?一条用户通知
                 ? 发?一条公共通知
                 ? 提醒功能
                 ? 用户的通知列表页
                                DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之通知

              ? 问题
               ? content 读取压力
                 ? 加 redis slave
                 ? 公共通知灰度发布
                                   DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之通知

              ? 问题
               ? content 存储压力
                 ? 业务允许删除老数据 - 滚动
                 ? 大部分通知内容相似 - 模板
                                    DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之通知

              ? 问题
               ? content 长尾
                 ? 全内存,TCO 太高
                 ? 太多 redis slave,维护成本太高
                 ? 迁移到 handler socket
                                           DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之通知

              ? 经验教训
                 ? Redis 是非常好用的
                 ? 内存是很贵的
                 ? 如果 Redis 的性能都成了瓶颈,那
                 么我们应该先重新审视?一下业务设
                 计了
                                    DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之路

              ? 新浪微博中的搁别诲颈蝉大数据之路
               ? 通知
               ? 好友关系
               ? 计数器

                                   DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之好友关系




                              DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之好友关系
              ? 业务场景
               ? 用户关注列表
               ?   互相关注

               ?   关注备注

               ?   关注分组

              ? 用户粉丝列表
              ? 技术难点               DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之好友关系
              ? 业务场景
               ? 我和TA的共同关注
               ? 我关注的人也关注了TA
               ? 特殊分组: “未分组”
               ? 分组中的互相关注/互相关注中的分组
              ? 技术难点
                                DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之   好友关系
              ? 技术实现
               ? Mysql
                 ? fromuid, touid, addtime,remark
                 ? hash by fromuid
                 ? hash by touid
                 ? fromuid, groupid, touid
                                                    DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之   好友关系
              ? 技术实现
               ? Redis : hash VS sorted set
                 ? key: fromuid
                 ? ?eld: touid
                 ? value: addtime or remark
                 ? group 分组功能?
                                              DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之好友关系
              ? 技术实现
                 ? 加关注/取消关注
                 ? 添加备注
                 ? 修改分组
                 ? 判断是否已关注
                 ? 取列表
                 ? 集合运算          DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之好友关系

              ? 问题
               ? ?一致性
                 ? 多个 mysql 表
                 ? 多个 redis 实例
                                  DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之   好友关系

              ? 问题
               ? hgetAll 慢
                 ? hash-max-zip-size
                 ? 增加 mc cache
                 ? 粉丝列表做限制
                                       DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之好友关系
              ? 问题
               ? TCO
                 ? 全内存: TB level
                 ? 快速增长: GBs/day
                 ? 冷热区分不明显
                  ? 性能 vs 功能
                  ? 暂时无解           DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之 好友关系

              ? 经验教训
               ? 性价比随数据量增长而下降
               ? 大数据的?一致性
               ? Big data,Cost,Performance,BCP 只
                 能三选二?

                                              DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之好友关系




                              DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之路

              ? 新浪微博中的搁别诲颈蝉大数据之路
               ? 通知
               ? 好友关系
               ? 计数器

                                   DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之计数器
              ? 业务场景
               ? 以用户为维度
                 ? 微博数,关注数,粉丝数,收藏数
               ? 以微博为维度
                 ? 转发数,评论数
              ? 技术难点
                                 DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之计数器

              ? 技术实现
               ? mc + mysql (原始列表数据)
               ? Redis : key - value
                 ? key : uid or mid
                 ? value : count
                                       DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之    计数器


              ? 问题
               ? ?一致性
                 ? count vs list

                                         DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之    计数器

              ? 问题
               ? TCO
                 ? redis cost 100+ bytes to store a count
                 ? hash : store multi counts in a hash
                 ? rediscounter : use array instead of hash
                    table
                                                       DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之   计数器

              ? 问题
               ? 长尾(微博维度计数)
                 ? 10+ Billion counts
                 ? 1% hot : Only hot data in memory
                 ? mget <=10ms
                 ? 暂时无解
                                                      DTCC2012
12年4月15日星期日
搁别诲颈蝉大数据之计数器

              ? 经验教训
               ? 线上大数据
               ? 内存中的大数据
               ? 长尾大数据
                                DTCC2012
12年4月15日星期日
经验教训

              ? Redis 适用场景
               ? 数据量不太大的存储
               ? 数据量大的缓存

                             DTCC2012
12年4月15日星期日
经验教训




                     DTCC2012
12年4月15日星期日
经验教训

              ? 数据冷热区分
               ? 小而热的数据 - 内存
               ? 大而冷的数据 - 磁盘
               ? 大而热的数据 - SSD?

                                 DTCC2012
12年4月15日星期日
经验教训

              ? 大数据的?一致性
               ? 业务层很难保证
               ? 中间层?存储层?
               ? 最终?一致性?session ?一致性?
               ? 架构设计层面需要考虑更多
                                        DTCC2012
12年4月15日星期日
Thanks

                 PS. We are hiring !
              contact me via @唐福林


                                       DTCC2012
12年4月15日星期日
Q &A
                     @唐福林
              http://weibo.com/tang?
                http://blog.fulin.org


                                        DTCC2012
12年4月15日星期日

More Related Content

搁别诲颈蝉大数据之路 dtcc-唐福林

  • 1. Redis 大数据之路 @唐福林 http://weibo.com/tang? http://blog.fulin.org DTCC2012 12年4月15日星期日
  • 2. 对于我(们) ? 新浪微博 ? 微博开放平台 open.weibo.com ? Feed 架构 ? @timyang ? 招聘进行中 DTCC2012 12年4月15日星期日
  • 3. 大纲 ? 对于大数据 ? Redis 介绍 ? 新浪微博中的搁别诲颈蝉大数据之路 ? 通知 ? 好友关系 ? 计数器 ? 经验教训 DTCC2012 12年4月15日星期日
  • 4. 对于大数据 ? 线下大数据 vs 线上大数据 ? 数据挖掘 vs 在线服务 ? 持久化的大数据 vs 内存中的大数据 ? 结构化大数据 vs 半结构化大数据 ? 个人定义:数据要求比单台机器能力高 ?一个数量级 DTCC2012 12年4月15日星期日
  • 5. Intro to Redis ? REmote DIctionary Server ? NoSQL by @antirez by VMWare ? redis.io github.com/antirez/redis ? start at 2009, now latest stable 2.4.10 ? Key - String,Hash,List,(Sorted)Set,Pub/Sub ? Great Performance DTCC2012 12年4月15日星期日
  • 6. Intro to Redis ? Written in C , Single thread , event driven ? Fork : copy on write by OS ? Replication ? Persist ? aof ? rdb ? All Data In Memory DTCC2012 12年4月15日星期日
  • 7. 搁别诲颈蝉大数据之路 ? 新浪微博中的搁别诲颈蝉大数据之路 ? 通知 ? 好友关系 ? 计数器 DTCC2012 12年4月15日星期日
  • 8. 搁别诲颈蝉大数据之路 ? 新浪微博中的搁别诲颈蝉大数据之路 ? 通知 ? 好友关系 ? 计数器 DTCC2012 12年4月15日星期日
  • 9. 搁别诲颈蝉大数据之通知 DTCC2012 12年4月15日星期日
  • 10. 搁别诲颈蝉大数据之通知 ? 业务场景 ? 用户通知(通知单个用户) ? 公共通知(通知全站所有用户) ? 新通知提醒 ? 技术难点 DTCC2012 12年4月15日星期日
  • 11. 搁别诲颈蝉大数据之 通知 ? 存储 by redis ? 索引 key - list ? uid - notice id list ? public notice id list ? 内容 key - value ? notice id - notice content DTCC2012 12年4月15日星期日
  • 12. 搁别诲颈蝉大数据之 通知 ? 存储 by redis ? 提醒 key - value ? uid - since public notice id ? uid - since notice id ? DTCC2012 12年4月15日星期日
  • 13. 搁别诲颈蝉大数据之通知 ? 技术实现 ? 发?一条用户通知 ? 发?一条公共通知 ? 提醒功能 ? 用户的通知列表页 DTCC2012 12年4月15日星期日
  • 14. 搁别诲颈蝉大数据之通知 ? 问题 ? content 读取压力 ? 加 redis slave ? 公共通知灰度发布 DTCC2012 12年4月15日星期日
  • 15. 搁别诲颈蝉大数据之通知 ? 问题 ? content 存储压力 ? 业务允许删除老数据 - 滚动 ? 大部分通知内容相似 - 模板 DTCC2012 12年4月15日星期日
  • 16. 搁别诲颈蝉大数据之通知 ? 问题 ? content 长尾 ? 全内存,TCO 太高 ? 太多 redis slave,维护成本太高 ? 迁移到 handler socket DTCC2012 12年4月15日星期日
  • 17. 搁别诲颈蝉大数据之通知 ? 经验教训 ? Redis 是非常好用的 ? 内存是很贵的 ? 如果 Redis 的性能都成了瓶颈,那 么我们应该先重新审视?一下业务设 计了 DTCC2012 12年4月15日星期日
  • 18. 搁别诲颈蝉大数据之路 ? 新浪微博中的搁别诲颈蝉大数据之路 ? 通知 ? 好友关系 ? 计数器 DTCC2012 12年4月15日星期日
  • 19. 搁别诲颈蝉大数据之好友关系 DTCC2012 12年4月15日星期日
  • 20. 搁别诲颈蝉大数据之好友关系 ? 业务场景 ? 用户关注列表 ? 互相关注 ? 关注备注 ? 关注分组 ? 用户粉丝列表 ? 技术难点 DTCC2012 12年4月15日星期日
  • 21. 搁别诲颈蝉大数据之好友关系 ? 业务场景 ? 我和TA的共同关注 ? 我关注的人也关注了TA ? 特殊分组: “未分组” ? 分组中的互相关注/互相关注中的分组 ? 技术难点 DTCC2012 12年4月15日星期日
  • 22. 搁别诲颈蝉大数据之 好友关系 ? 技术实现 ? Mysql ? fromuid, touid, addtime,remark ? hash by fromuid ? hash by touid ? fromuid, groupid, touid DTCC2012 12年4月15日星期日
  • 23. 搁别诲颈蝉大数据之 好友关系 ? 技术实现 ? Redis : hash VS sorted set ? key: fromuid ? ?eld: touid ? value: addtime or remark ? group 分组功能? DTCC2012 12年4月15日星期日
  • 24. 搁别诲颈蝉大数据之好友关系 ? 技术实现 ? 加关注/取消关注 ? 添加备注 ? 修改分组 ? 判断是否已关注 ? 取列表 ? 集合运算 DTCC2012 12年4月15日星期日
  • 25. 搁别诲颈蝉大数据之好友关系 ? 问题 ? ?一致性 ? 多个 mysql 表 ? 多个 redis 实例 DTCC2012 12年4月15日星期日
  • 26. 搁别诲颈蝉大数据之 好友关系 ? 问题 ? hgetAll 慢 ? hash-max-zip-size ? 增加 mc cache ? 粉丝列表做限制 DTCC2012 12年4月15日星期日
  • 27. 搁别诲颈蝉大数据之好友关系 ? 问题 ? TCO ? 全内存: TB level ? 快速增长: GBs/day ? 冷热区分不明显 ? 性能 vs 功能 ? 暂时无解 DTCC2012 12年4月15日星期日
  • 28. 搁别诲颈蝉大数据之 好友关系 ? 经验教训 ? 性价比随数据量增长而下降 ? 大数据的?一致性 ? Big data,Cost,Performance,BCP 只 能三选二? DTCC2012 12年4月15日星期日
  • 29. 搁别诲颈蝉大数据之好友关系 DTCC2012 12年4月15日星期日
  • 30. 搁别诲颈蝉大数据之路 ? 新浪微博中的搁别诲颈蝉大数据之路 ? 通知 ? 好友关系 ? 计数器 DTCC2012 12年4月15日星期日
  • 31. 搁别诲颈蝉大数据之计数器 ? 业务场景 ? 以用户为维度 ? 微博数,关注数,粉丝数,收藏数 ? 以微博为维度 ? 转发数,评论数 ? 技术难点 DTCC2012 12年4月15日星期日
  • 32. 搁别诲颈蝉大数据之计数器 ? 技术实现 ? mc + mysql (原始列表数据) ? Redis : key - value ? key : uid or mid ? value : count DTCC2012 12年4月15日星期日
  • 33. 搁别诲颈蝉大数据之 计数器 ? 问题 ? ?一致性 ? count vs list DTCC2012 12年4月15日星期日
  • 34. 搁别诲颈蝉大数据之 计数器 ? 问题 ? TCO ? redis cost 100+ bytes to store a count ? hash : store multi counts in a hash ? rediscounter : use array instead of hash table DTCC2012 12年4月15日星期日
  • 35. 搁别诲颈蝉大数据之 计数器 ? 问题 ? 长尾(微博维度计数) ? 10+ Billion counts ? 1% hot : Only hot data in memory ? mget <=10ms ? 暂时无解 DTCC2012 12年4月15日星期日
  • 36. 搁别诲颈蝉大数据之计数器 ? 经验教训 ? 线上大数据 ? 内存中的大数据 ? 长尾大数据 DTCC2012 12年4月15日星期日
  • 37. 经验教训 ? Redis 适用场景 ? 数据量不太大的存储 ? 数据量大的缓存 DTCC2012 12年4月15日星期日
  • 38. 经验教训 DTCC2012 12年4月15日星期日
  • 39. 经验教训 ? 数据冷热区分 ? 小而热的数据 - 内存 ? 大而冷的数据 - 磁盘 ? 大而热的数据 - SSD? DTCC2012 12年4月15日星期日
  • 40. 经验教训 ? 大数据的?一致性 ? 业务层很难保证 ? 中间层?存储层? ? 最终?一致性?session ?一致性? ? 架构设计层面需要考虑更多 DTCC2012 12年4月15日星期日
  • 41. Thanks PS. We are hiring ! contact me via @唐福林 DTCC2012 12年4月15日星期日
  • 42. Q &A @唐福林 http://weibo.com/tang? http://blog.fulin.org DTCC2012 12年4月15日星期日