SlideShare a Scribd company logo
1 of 50
构建可扩展微博架构

  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

More Related Content

What's hot

我为什么要选择RabbitMQ
我为什么要选择RabbitMQ我为什么要选择RabbitMQ
我为什么要选择RabbitMQFeng Yu
 
高级服务器设计和实现3
高级服务器设计和实现3高级服务器设计和实现3
高级服务器设计和实现3Feng Yu
 
Erlang开发实践
Erlang开发实践Erlang开发实践
Erlang开发实践Feng Yu
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构XiaoJun Hong
 
低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索Feng Yu
 
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器Feng Yu
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Feng Yu
 
新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构n716
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 
高级服务器设计和实现2
高级服务器设计和实现2高级服务器设计和实现2
高级服务器设计和实现2Feng Yu
 
Rekoo social game 后端架构简介
Rekoo social game 后端架构简介Rekoo social game 后端架构简介
Rekoo social game 后端架构简介Binghong Liang
 
Timyang新浪微博设计谈
Timyang新浪微博设计谈Timyang新浪微博设计谈
Timyang新浪微博设计谈Cevin Cheung
 
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题XiaoJun Hong
 
Active Mq JMS
Active Mq JMSActive Mq JMS
Active Mq JMShzchenkj
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
大众点评网的技术变迁之路
大众点评网的技术变迁之路大众点评网的技术变迁之路
大众点评网的技术变迁之路jeffz
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生dennis zhuang
 

What's hot (18)

我为什么要选择RabbitMQ
我为什么要选择RabbitMQ我为什么要选择RabbitMQ
我为什么要选择RabbitMQ
 
高级服务器设计和实现3
高级服务器设计和实现3高级服务器设计和实现3
高级服务器设计和实现3
 
Erlang开发实践
Erlang开发实践Erlang开发实践
Erlang开发实践
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构
 
低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索
 
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言
 
新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
 
高级服务器设计和实现2
高级服务器设计和实现2高级服务器设计和实现2
高级服务器设计和实现2
 
Rekoo social game 后端架构简介
Rekoo social game 后端架构简介Rekoo social game 后端架构简介
Rekoo social game 后端架构简介
 
Timyang新浪微博设计谈
Timyang新浪微博设计谈Timyang新浪微博设计谈
Timyang新浪微博设计谈
 
Mesos intro
Mesos introMesos intro
Mesos intro
 
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题
 
Active Mq JMS
Active Mq JMSActive Mq JMS
Active Mq JMS
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
大众点评网的技术变迁之路
大众点评网的技术变迁之路大众点评网的技术变迁之路
大众点评网的技术变迁之路
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生
 

Viewers also liked

1201 2012 training catalogue final
1201 2012 training catalogue final1201 2012 training catalogue final
1201 2012 training catalogue finalMartin Cowling
 
Arc 300-3 ade miller-en
Arc 300-3 ade miller-enArc 300-3 ade miller-en
Arc 300-3 ade miller-enlonegunman
 
1201 2012 us training catalog final
1201 2012 us training catalog final1201 2012 us training catalog final
1201 2012 us training catalog finalMartin Cowling
 
How To Log Into The Volunteer Center
How To Log Into The Volunteer CenterHow To Log Into The Volunteer Center
How To Log Into The Volunteer CenterMichael Gilman
 

Viewers also liked (7)

1201 2012 training catalogue final
1201 2012 training catalogue final1201 2012 training catalogue final
1201 2012 training catalogue final
 
Magnets attract
Magnets attractMagnets attract
Magnets attract
 
Arc 300-3 ade miller-en
Arc 300-3 ade miller-enArc 300-3 ade miller-en
Arc 300-3 ade miller-en
 
1201 2012 us training catalog final
1201 2012 us training catalog final1201 2012 us training catalog final
1201 2012 us training catalog final
 
How To Log Into The Volunteer Center
How To Log Into The Volunteer CenterHow To Log Into The Volunteer Center
How To Log Into The Volunteer Center
 
Creating an exceptional member volunteer experience
Creating an exceptional member volunteer experienceCreating an exceptional member volunteer experience
Creating an exceptional member volunteer experience
 
Volunteer magnet2nded
Volunteer magnet2ndedVolunteer magnet2nded
Volunteer magnet2nded
 

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

构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统airsex
 
廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰Paul Chao
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updatedPaul Chao
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈lovingprince58
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & developmentXuefeng Zhang
 
张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08drewz lin
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updatedPaul Chao
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.comHo Kim
 
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)Shanda innovation institute
 
美团技术沙龙04 美团下一代分布式存储系统
美团技术沙龙04   美团下一代分布式存储系统美团技术沙龙04   美团下一代分布式存储系统
美团技术沙龙04 美团下一代分布式存储系统美团点评技术团队
 
百度数据库中间层
百度数据库中间层百度数据库中间层
百度数据库中间层yp_fangdong
 
大规模社区构建 百度贴吧的实践
大规模社区构建 百度贴吧的实践大规模社区构建 百度贴吧的实践
大规模社区构建 百度贴吧的实践mysqlops
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现orczhou
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 

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

构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统
 
廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & development
 
张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
微博架构Ppt
微博架构Ppt微博架构Ppt
微博架构Ppt
 
Memcached简介
Memcached简介Memcached简介
Memcached简介
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.com
 
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
 
美团技术沙龙04 美团下一代分布式存储系统
美团技术沙龙04   美团下一代分布式存储系统美团技术沙龙04   美团下一代分布式存储系统
美团技术沙龙04 美团下一代分布式存储系统
 
百度数据库中间层
百度数据库中间层百度数据库中间层
百度数据库中间层
 
大规模社区构建 百度贴吧的实践
大规模社区构建 百度贴吧的实践大规模社区构建 百度贴吧的实践
大规模社区构建 百度贴吧的实践
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 

构建可扩展的微博系统