新浪微博Cache设计@TimYang


微博 cache设计谈 @TimYang 新浪内部培训资料 Agenda •Feed架构简介 •微博 Cache设计 •微博架构经验谈 微博技术的核心 • 数据的分发、聚合及展现 • 每条微博 , 在技术上也称为 status或 feed • 如 • Feed架构 • 微博两种 feed设计模式 • Push(推 ) • Pull(拉 ) • 复合型 Push • 将 feed比喻成邮件 • Inbox: 收到的微博 • Outbox: 已发表微博 • 发表:存到所有粉丝 inbox(重 ) • 查看:直接访问 Inbox(轻 ) • Offline computation Push • 优点:实现简单,首选 • 缺点:分发量 • Pull • 发表:存到自己 outbox(轻 ) • 查看:取所有关注对象 Inbox(重 ) • Online computation Pull • 优点:节约存储 • 缺点:计算量大,峰值问题 共同的难题 • 峰值挑战 • 我们使用异步处理方式 • Cache memory is the new disk, and disk is the new tape. for "real-time" web applications, and systems that require massive scalability - Jim Gray Cache设计 决定了一个微博系统的优劣 微博 cache架构 hot cache Vector cache TotalHot cache Weibo cache arch Inbox Outbox Content Social Graph Archive cache Following Followers users Inbox • 微博中 “我的首页 ” • cache 内容为 id list • 只为在线用户设置 (hot cache) • 添加新元素需要先 get再 set • 可用 redis list/set Outbox • 我发出的微博 • 最新的 id list(e.g. 100) 用于聚合 • 历史 id LRU Social Graph cache • Following ids • Followers加载开销比较大 • 上百万粉丝 • 越大的集合越容易变更 • 改变则需 delete all • 减少使用 followers list场景 Content cache • 微博内容体 cache • 热内容 • 多份,防止单点访问瓶颈 • 最终格式预生成 • Open API需要返回 xml, json...格式 Cache流程 • 发表 • 首页展现 发表流程 Update Workflow Update status Hot Inbox VectorContent cache Outbox vector Content cache replication 发表流程 • 修改 outbox hot vector • 加载 followers list • 修改 inbox列表 首页 feed Home timeline Workflow aggregator Outbox VectorInbox cache Content hot cache Inbox archive home_timeline Content cacheInbox archive 获取首页 feed流程 • 检查 inbox cache是否可用 • 获取关注列表 • 聚合内容 , 从 following 关系 • 根据 id list返回最终 feed聚合内容 cache经验谈 • 流量、带宽 • hot keys • 规划 • mutex 流量 • 以打开首页时候获取 Content cache为例 • multi get n 条 feed(n = items/页 , e.g. 50) • cache 大小 = n * (feed长度 + 扩展字段 , e.g. 2k) • 并发请求,如 1,000次 /秒 • 总流量 = 50 * 2k * 1,000 / sec = 100MB 带宽 • 1,000并发,需要 800Mbps带宽 • 1万并发,需要 8Gbps 内网流量 带宽 • 在 1G内网,只能压力到 300~400Mbps • 需要优化 • 将热门数据加载到 local cache • 压缩 • 复制 hot keys • content cache of 姚晨 • create local cache 1. get user_yaochen_local 2. get user_yaochen 1. set user_yaochen_local:value 3. 删除时需要 delete all cache 规划 • 将不同业务、不同长度的 key存储到不同 的 memcache池 • 不同的业务有不同的生命周期 • LRU cache, 小量 • Memory storage,大部分 • 更高效的内存利用 mutex • 姚晨的 content item未 cache • 每线程需要从 db加载数十条微博数据 • 上千个并发线程同时穿透到 db • key_mutex 先添加成功,再更新 key • mutex 失败则等待,重试 • 添加结束,删除 mutex • 微博架构经验谈 • 业务耦合风险 • 架构 less is more • 核心代码 • 技术交流 • code review流程 • 技术交流方式 • Q&A • weihua2@staff.sina.com.cn
还剩30页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 2 人已下载

下载pdf

pdf贡献者

whzhaha

贡献于2012-08-23

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf