• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
新浪微博开放平台中的Redis实践
 

新浪微博开放平台中的Redis实践

on

  • 327 views

 

Statistics

Views

Total Views
327
Views on SlideShare
327
Embed Views
0

Actions

Likes
1
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    新浪微博开放平台中的Redis实践 新浪微博开放平台中的Redis实践 Presentation Transcript

    • 新浪微博开放平台 Redis 实践 @唐福林 http://weibo.com/tangfl http://fulin.org
    • 大纲 • Redis 简介 • 新浪微博中的Redis实践 • 好友关系 • 计数器 • 经验教训
    • Redis • in memory (database?) • data can dump to disk • many useful data structure • FAST both read and write • we start use from 2.0, now 2.4
    • 微博=feed+关系+数字
    • 微博=feed+关系+数字 • feed • 看微博,看评论 • 发微博,转发微博,发评论
    • 微博=feed+关系+数字
    • 微博=feed+关系+数字 • 关系 • 关注,取消关注 • 关注列表,粉丝列表
    • 微博=feed+关系+数字
    • 微博=feed+关系+数字 • 数字 • 微博,粉丝,关注数 • 评论给我的,@我的,我评论的 • 小黄签提醒:新粉丝,新@,新评论 • 未读微博数
    • 微博=feed+关系+数字
    • 微博=feed+关系+数字 • 数字 • 微博,粉丝,关注数 • 评论给我的,@我的,我评论的 • 小黄签提醒:新粉丝,新@,新评论 • 未读微博数
    • 微博=feed+关系+数字
    • 微博=feed+关系+数字 • 数字 • 微博,粉丝,关注数 • 评论给我的,@我的,我评论的 • 小黄签提醒:新粉丝,新@,新评论 • 未读微博数
    • 微博=feed+关系+数字
    • 微博=feed+关系+数字 • 数字 • 微博,粉丝,关注数 • 评论给我的,@我的,我评论的 • 小黄签提醒:新粉丝,新@,新评论 • 未读微博数
    • 微博=feed+关系+数字
    • 微博=feed+关系+数字 • mysql • mc • feed
    • 微博=feed+关系+数字 • 关系
    • 微博=feed+关系+数字 • mysql: relation.following • fromuid, touid, addtime • 关注列表: • 粉丝列表: • 问题:fromuid, touid 都为索引,插入慢 select * from following where fromuid=? order by addtime desc select * from following where touid=? order by addtime desc
    • 微博=feed+关系+数字 • mysql: relation.following relation.follower • fromuid, touid, addtime • 关注列表: • 粉丝列表: • 问题:插入两张表,非事务,一致性 select * from following where fromuid=? order by addtime desc select * from follower where touid=? order by addtime desc
    • 微博=feed+关系+数字 • 双向关系:关注与粉丝的交集 • 实时计算:读的时候计算。 • 问题:效率 • 预先计算:写的时候计算,存储 • 问题:一致性,空间占用
    • 微博=feed+关系+数字 • 我和ta的共同关注 • 我关注的人里有多少关注了ta • 我的粉丝里有多少关注了ta • 。。。
    • 微博=feed+关系+数字 • 我们想要的 • 简单:c/java ,可快速通读代码 • 可靠:经过验证的 • 高效:读写速度满足需要 • 方便实现需求
    • 微博=feed+关系+数字 • redis • hash : • key : user id • fields : friends ids • value : add time
    • 微博=feed+关系+数字 • redis • hash : • hset fromuid.following touid addtime • hset touid.follower fromuid addtime • hgetAll fromuid. following • hgetAll touid.follower ? • 姚晨粉丝 11,704,598 @Wed Sep 7 21:46:33 CST 2011
    • 微博=feed+关系+数字 • hash-max-zip-size • • 64 -> 256,节省近 1/3 内存 cpu 消耗增大 • hgetAll cost too much cpu • add mc • high delay
    • 微博=feed+关系+数字
    • 微博=feed+关系+数字 • redis • cache ? waste too much mem • storage ? • rdb may lost data • aof r/w too slow, recover too slow • all data in mem, waste money HA : master slave ? NO WAY • • memory fragment
    • 微博=feed+关系+数字
    • 微博=feed+关系+数字 • 更新 • mysql binlog >> queue >> Java Processor >> redis • mysql binlog >> trigger >> redis
    • 微博=feed+关系+数字 • 现状 • redis@weibo for now: • TB 级 • growing fast
    • 微博=feed+关系+数字 • 未来 • @摇摆巴赫 mysql modified + innodb • following list of a user in one column • still under dev
    • 微博=feed+关系+数字 • 数字
    • 微博=feed+关系+数字 • 永久计数 • 用户的 • 微博,粉丝,关注 • @我的,我评论的,评论我的 • 微博 • 转发,评论
    • 微博=feed+关系+数字
    • 微博=feed+关系+数字 • 临时计数 • 小黄签提醒 • 新粉丝,新@,新评论 • 未读微博 • 聚合计算 • 页面js每隔一段时间请求一次
    • 微博=feed+关系+数字 • mc + queue + mysql • 写入量:mysql 批量插入 • mc与mysql不一致 • 为了提高命中率,mc 空间需要足够大
    • 微博=feed+关系+数字 • 我们想要的: • 大写入量 • 大读取量 • 持久化 • 简单可靠高效
    • 微博=feed+关系+数字 • redis • k-v , 100 byte per k-v • • mc 也一样 单个业务十亿量级的数字个数 • hash , hget pipeline slow
    • 微博=feed+关系+数字 • redis • rdb ? may lost data • aof ? grow too fast (4G/day) • bgsave/bgrewriteaof influence parent
    • 微博=feed+关系+数字
    • 微博=feed+关系+数字 • redis rolling • • • • 场景:微博的评论数 每天写入亿级,每天读取十亿级 明显的时间长尾 目标:将一段时间前的 key 淘汰出去
    • 微博=feed+关系+数字 • 现状 • rediscounter @果爸果爸 • array , not linked list • malloc all mem when start • hash key to position • write disk: asyn & slow down • add position to aof file
    • 微博=feed+关系+数字 • 未来 • rediscounter + innodb • auto roll cold data to disk
    • 微博=feed+关系+数字 • 未读微博数 • • • • @TimYang 亲自设计算法 @XiaoJunHong 实现 向量相减 redis (delay) - mc (throughput) - java hash map
    • 经验教训 • 准确定位 • cache • storage
    • 经验教训 • 适用场景 • 大量写入 • 复杂数据结构 • 简单数据结构+持久化 • 容量小于内存
    • 经验教训 • 容量规划 • 容量增长预估 • 读/写量预估 • 数据结构 • 内存碎片
    • 经验教训 • 持久化 • 是否需要 • rdb or aof ?
    • 经验教训 • 高延迟 • 持久化 • rehash
    • 经验教训 • HA / Cluster • 当前 Redis 本身支持不完美 • Jedis 客户端支持不完美
    • 经验教训 • CPU 瓶颈 • Redis 单线程 • hset with big hash-max-zip-size • hgetAll • 对策:mc
    • 经验教训 • 扬长避短 • 内存操作快 • 磁盘操作慢 • 偶尔高延迟 • 可能费内存
    • Thanks @唐福林 http://weibo.com/tangfl http://fulin.org
    • Q &A PS. We are hiring ! contact me via @唐福林