狠狠撸

狠狠撸Share a Scribd company logo
构建可扩展微博架构

  Tim Yang
   新浪微博
  技术架构师
从博客到微博
博客
? 功能
 –发表
 –浏览
 –留言
? Content Manager System
博客
? 技术 , LAMP
 –MySQL master/slave
 –Memcached
 –PHP
 –CDN
微博
? 微博,产物
–Real-time
–关注关系
–信息聚合
信息聚合
信息聚合
? 微博两种信息聚合设计模式
–Push( 推 )
–Pull( 拉 )
Push
? 把微博看做邮件
 –Inbox: 收到的微博
 –Outbox: 已发表微博
? 发表:存到所有粉丝
  inbox( 重 )
? 查看:直接访问 Inbox( 轻 )
Push(Figure)
                        User A
                      UpdateAction



       Followers of User A
             = 1, 2, 3



    Inbox                 Inbox            Inbox
(Append to 1’s        (Append to 2’s   (Append to 3’s
home timeline)        home timeline)   home timeline)
Push
? 优点:实现简单,首选
? 缺点:分发量
Pull
? 发表:存到自己 outbox( 轻 )
? 查看:所有关注对象
  Inbox( 重 )
Pull

                             User I
                       Get home_timeline


               User I’s
             Following List
               = A, B, C



       Outbox                Outbox                  Outbox
(statuses sent by A)   (Statuses sent by B)   (Statuses sent by C)
Pull
? 优点:节约存储
? 缺点:计算量大
? 微博是一个消息分发系统
? 可采取推或拉的方式实现
架构挑战:峰值
  - 如除夕、春节
请求量
? 如果发表量 5,000 万 / 天
? 平均: 578 条 / 秒
? 设计系统容量: 2,000?
IO 瓶颈
? 峰值: 5,000 – 10,000?
? 100,000?
后果
? Latency
? DB read timeout
? 前端 timeout (503 error)
? 解决方案?
异步设计
? 不同步等待
? 将消息存入消息队列
  (Message Queue)
? 轻量级的发表
MQ products
? Kestrel by twitter
? RabbitMQ, an Erlang Queue
  Server
? Memcacheq
 –在新浪微博项目大规模使用
Memcacheq
? 基于 Berkeley db, 稳定可
  靠
? Memcached protocol, 丰
  富的 client library
? 容易监控 (stats queue)
? 只有 2 个命令: get/set
避免单点故障
核心服务,需避免单独故障
方法
1. 使用多个 Memcacheq 池
2. Get 操作 : 轮询所有服务器
3. Set 操作 : 随机选择一个

无需其他复杂“架构”设计
MQ 方式通用的优点
? Offline work
? 应用请求量不均衡
? 解耦
? 异步通讯
? 原则
使用 MQ 原则
计算开销大于消息分发开
 销
架构挑战:实时性
越重要的事件,越希望实时性
The value of the tweet
 decreases
        http://t.sina.com.cn/pub/star#a_ty
 exponentially with
 time
 John Kalucki, Twitter
解决思路
 Cache 中心化
Ram is the new the
        disk
? Local Cache
? Memcached
? Database buffer/cache
? LAMP 中, cache= 可选层
? Cache 中心化后新的问题
容量问题
? TB 级
? 思路:压缩
–QuickLZ
–LZO
–不用 gzip
单点问题
? 单点故障 , SIGSEGV
? 如何应对
 –1. Consistent hash
 –2. Read-through cache
Consistent hash
? 原理
? 优点
 –震荡最小
Read-through cache
Read-through and Write-
        through
? Products or projects
 – MySQL memcached UDF
 – Cache money for Ruby on Rails
? Or wrap a proxy for the db
  driver, in any language
Evictions 问题
? Evections: cache 数据被踢
? 性能的噩梦
? Latency 产生的源头之一
如何避免 evictions
? 规划 cache 容量
? 将永久数据与临时数据分开
? 不使用随机字符作为 key
Multiget 问题
When memcached servers are
 CPU bound, adding more
 memcached servers doesn't
 help serve more requests.

   - Jeff Rothschild, Vice President of
     Technology at Facebook
Cache 挑战: multiget
       hole
                              Application
                 Max RPS of application < (A and B and C)




                                    Multiget
                            Multiget (keys…)
      Multiget




                                    Multiget




                                                                Multiget
  Memcached                    Memcached                     Memcached
 (Max RPS: A)                 (Max RPS: B)                  (Max RPS C)
解决方法
? Memcached replication
架构挑战:海量存
    储
架构挑战:
国内网络带宽问题
地理分布
? 考虑到以下原因,需要分布
  式部署
–访问速度
–IDC 不可用
–故障
? 分布的核心是数据分布
数据地理分布原理
? Master-slave
? Master-master
? 2PC/3PC
? Paxos
? http://timyang.net/data/multi-
  /
地理分布的方案
? MySQL master/slave
? Dynamo/Cassandra
? PNUTS
架构挑战: API 访问
    量
以新浪微博开放平台为例
? REST API
 –编程简单, library 丰富
  ? 可用 curl, javascript 实现一个
    client
 –缺点单向询问方式
? 如何解决轮询压力
解决方案: Sina App
          Engine
? Sina App Engine 应用云平
  台提供微博 API 底层支持
? 并可以 host 微博 app
? 微博 , Web 2.0 最核心技术
  之一
? 还有更多的架构挑战等待解
  决
? 欢迎加入新浪微博技术团队
Q&A
  新浪微博: @ TimYang
      Twitter: @ xmpp
Email: iso1600 @ gmail.com
Ad

Recommended

A
A
lonegunman
?
Build scalable microblog qcon beijing 2010
Build scalable microblog qcon beijing 2010
Tim Y
?
大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)
Tim Y
?
豆瓣网技术架构变迁
豆瓣网技术架构变迁
reinhardx
?
分布式Key Value Store漫谈
分布式Key Value Store漫谈
Tim Y
?
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Dahui Feng
?
快速搭建高性能服务端
快速搭建高性能服务端
moonbingbing
?
了解集群
了解集群
Feng Yu
?
我为什么要选择搁补产产颈迟惭蚕
我为什么要选择搁补产产颈迟惭蚕
Feng Yu
?
高级服务器设计和实现3
高级服务器设计和实现3
Feng Yu
?
贰谤濒补苍驳开发实践
贰谤濒补苍驳开发实践
Feng Yu
?
新浪微博贵别别诲服务架构
新浪微博贵别别诲服务架构
XiaoJun Hong
?
低成本和高性能惭测厂蚕尝云架构探索
低成本和高性能惭测厂蚕尝云架构探索
Feng Yu
?
了解应用服务器
了解应用服务器
Feng Yu
?
贰谤濒补苍驳分布式系统的的领域语言
贰谤濒补苍驳分布式系统的的领域语言
Feng Yu
?
新浪微博平台与安全架构
新浪微博平台与安全架构
n716
?
高性能队列贵辩耻别耻别的设计和使用实践
高性能队列贵辩耻别耻别的设计和使用实践
孙立
?
高级服务器设计和实现2
高级服务器设计和实现2
Feng Yu
?
Rekoo social game 后端架构介绍
Rekoo social game 后端架构介绍
Binghong Liang
?
罢颈尘测补苍驳新浪微博设计谈
罢颈尘测补苍驳新浪微博设计谈
Cevin Cheung
?
Mesos intro
Mesos intro
dennis zhuang
?
贵别别诲服务架构-新浪微博新员工培训议题
贵别别诲服务架构-新浪微博新员工培训议题
XiaoJun Hong
?
Active Mq JMS
Active Mq JMS
hzchenkj
?
分布式缓存与队列
分布式缓存与队列
XiaoJun Hong
?
大众点评网的技术变迁之路
大众点评网的技术变迁之路
jeffz
?
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生
dennis zhuang
?
1201 2012 training catalogue final
1201 2012 training catalogue final
Martin Cowling
?
Magnets attract
Magnets attract
Martin Cowling
?
Arc 300-3 ade miller-en
Arc 300-3 ade miller-en
lonegunman
?
1201 2012 us training catalog final
1201 2012 us training catalog final
Martin Cowling
?

More Related Content

What's hot (18)

我为什么要选择搁补产产颈迟惭蚕
我为什么要选择搁补产产颈迟惭蚕
Feng Yu
?
高级服务器设计和实现3
高级服务器设计和实现3
Feng Yu
?
贰谤濒补苍驳开发实践
贰谤濒补苍驳开发实践
Feng Yu
?
新浪微博贵别别诲服务架构
新浪微博贵别别诲服务架构
XiaoJun Hong
?
低成本和高性能惭测厂蚕尝云架构探索
低成本和高性能惭测厂蚕尝云架构探索
Feng Yu
?
了解应用服务器
了解应用服务器
Feng Yu
?
贰谤濒补苍驳分布式系统的的领域语言
贰谤濒补苍驳分布式系统的的领域语言
Feng Yu
?
新浪微博平台与安全架构
新浪微博平台与安全架构
n716
?
高性能队列贵辩耻别耻别的设计和使用实践
高性能队列贵辩耻别耻别的设计和使用实践
孙立
?
高级服务器设计和实现2
高级服务器设计和实现2
Feng Yu
?
Rekoo social game 后端架构介绍
Rekoo social game 后端架构介绍
Binghong Liang
?
罢颈尘测补苍驳新浪微博设计谈
罢颈尘测补苍驳新浪微博设计谈
Cevin Cheung
?
Mesos intro
Mesos intro
dennis zhuang
?
贵别别诲服务架构-新浪微博新员工培训议题
贵别别诲服务架构-新浪微博新员工培训议题
XiaoJun Hong
?
Active Mq JMS
Active Mq JMS
hzchenkj
?
分布式缓存与队列
分布式缓存与队列
XiaoJun Hong
?
大众点评网的技术变迁之路
大众点评网的技术变迁之路
jeffz
?
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生
dennis zhuang
?
我为什么要选择搁补产产颈迟惭蚕
我为什么要选择搁补产产颈迟惭蚕
Feng Yu
?
高级服务器设计和实现3
高级服务器设计和实现3
Feng Yu
?
贰谤濒补苍驳开发实践
贰谤濒补苍驳开发实践
Feng Yu
?
新浪微博贵别别诲服务架构
新浪微博贵别别诲服务架构
XiaoJun Hong
?
低成本和高性能惭测厂蚕尝云架构探索
低成本和高性能惭测厂蚕尝云架构探索
Feng Yu
?
了解应用服务器
了解应用服务器
Feng Yu
?
贰谤濒补苍驳分布式系统的的领域语言
贰谤濒补苍驳分布式系统的的领域语言
Feng Yu
?
新浪微博平台与安全架构
新浪微博平台与安全架构
n716
?
高性能队列贵辩耻别耻别的设计和使用实践
高性能队列贵辩耻别耻别的设计和使用实践
孙立
?
高级服务器设计和实现2
高级服务器设计和实现2
Feng Yu
?
Rekoo social game 后端架构介绍
Rekoo social game 后端架构介绍
Binghong Liang
?
罢颈尘测补苍驳新浪微博设计谈
罢颈尘测补苍驳新浪微博设计谈
Cevin Cheung
?
贵别别诲服务架构-新浪微博新员工培训议题
贵别别诲服务架构-新浪微博新员工培训议题
XiaoJun Hong
?
Active Mq JMS
Active Mq JMS
hzchenkj
?
分布式缓存与队列
分布式缓存与队列
XiaoJun Hong
?
大众点评网的技术变迁之路
大众点评网的技术变迁之路
jeffz
?
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生
dennis zhuang
?

Viewers also liked (7)

1201 2012 training catalogue final
1201 2012 training catalogue final
Martin Cowling
?
Magnets attract
Magnets attract
Martin Cowling
?
Arc 300-3 ade miller-en
Arc 300-3 ade miller-en
lonegunman
?
1201 2012 us training catalog final
1201 2012 us training catalog final
Martin Cowling
?
How To Log Into The Volunteer Center
How To Log Into The Volunteer Center
Michael Gilman
?
Creating an exceptional member volunteer experience
Creating an exceptional member volunteer experience
Mariner Management / Peggy Hoffman
?
Volunteer magnet2nded
Volunteer magnet2nded
Martin Cowling
?
1201 2012 training catalogue final
1201 2012 training catalogue final
Martin Cowling
?
Arc 300-3 ade miller-en
Arc 300-3 ade miller-en
lonegunman
?
1201 2012 us training catalog final
1201 2012 us training catalog final
Martin Cowling
?
How To Log Into The Volunteer Center
How To Log Into The Volunteer Center
Michael Gilman
?
Ad

Similar to 构建可扩展的微博系统 (20)

构建可扩展的微博系统
构建可扩展的微博系统
airsex
?
微博架构笔辫迟
微博架构笔辫迟
zubin Jiang
?
Douban qcon2009 beijing
Douban qcon2009 beijing
drewz lin
?
Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用
iammutex
?
Web Caching Architecture and Design
Web Caching Architecture and Design
Ho Kim
?
张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08
drewz lin
?
美丽说的架构发展与变迁 New
美丽说的架构发展与变迁 New
翀 刘
?
大规模网站架构
大规模网站架构
drewz lin
?
优酷 Web网站架构案例分析
优酷 Web网站架构案例分析
George Ang
?
Youku arch qcon2009_beijing
Youku arch qcon2009_beijing
drewz lin
?
Key value store
Key value store
xuanhan863
?
狈辞蝉辩濒叁步曲
狈辞蝉辩濒叁步曲
84zhu
?
大型网站架构的发展
大型网站架构的发展
drewz lin
?
大型网站架构的发展
大型网站架构的发展
Hesey
?
Dreaming Infrastructure
Dreaming Infrastructure
kyhpudding
?
尝补尘辫高性能设计
尝补尘辫高性能设计
锐 张
?
Another Introduce to Redis
Another Introduce to Redis
jiaqing zheng
?
基于My sql的分布式数据库实践 公开
基于My sql的分布式数据库实践 公开
YANGL *
?
微信之道201204
微信之道201204
shaomeng shi
?
微信201204
微信201204
drewz lin
?
构建可扩展的微博系统
构建可扩展的微博系统
airsex
?
微博架构笔辫迟
微博架构笔辫迟
zubin Jiang
?
Douban qcon2009 beijing
Douban qcon2009 beijing
drewz lin
?
Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用
iammutex
?
Web Caching Architecture and Design
Web Caching Architecture and Design
Ho Kim
?
张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08
drewz lin
?
美丽说的架构发展与变迁 New
美丽说的架构发展与变迁 New
翀 刘
?
大规模网站架构
大规模网站架构
drewz lin
?
优酷 Web网站架构案例分析
优酷 Web网站架构案例分析
George Ang
?
Youku arch qcon2009_beijing
Youku arch qcon2009_beijing
drewz lin
?
狈辞蝉辩濒叁步曲
狈辞蝉辩濒叁步曲
84zhu
?
大型网站架构的发展
大型网站架构的发展
drewz lin
?
大型网站架构的发展
大型网站架构的发展
Hesey
?
Dreaming Infrastructure
Dreaming Infrastructure
kyhpudding
?
尝补尘辫高性能设计
尝补尘辫高性能设计
锐 张
?
Another Introduce to Redis
Another Introduce to Redis
jiaqing zheng
?
基于My sql的分布式数据库实践 公开
基于My sql的分布式数据库实践 公开
YANGL *
?
Ad

构建可扩展的微博系统