SlideShare 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

More Related Content

PPT
Build scalable microblog qcon beijing 2010
PDF
大数据时代feed架构 (ArchSummit Beijing 2014)
PDF
豆瓣网技术架构变迁
PDF
分布式Key Value Store漫谈
PDF
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
PPT
快速搭建高性能服务端
PPTX
了解集群
Build scalable microblog qcon beijing 2010
大数据时代feed架构 (ArchSummit Beijing 2014)
豆瓣网技术架构变迁
分布式Key Value Store漫谈
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
快速搭建高性能服务端
了解集群

What's hot (18)

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

Viewers also liked (8)

PPT
1109 uk magnet energy
PPTX
The Battle of Mount Sorrel
PPT
Building+restful+webservice
PPTX
Hilden douche
PPT
构建可扩展的微博系统
PDF
Arc 300-3 ade miller-en
PPT
How To Log Into The Volunteer Center
PDF
Volunteer magnet2nded
1109 uk magnet energy
The Battle of Mount Sorrel
Building+restful+webservice
Hilden douche
构建可扩展的微博系统
Arc 300-3 ade miller-en
How To Log Into The Volunteer Center
Volunteer magnet2nded
Ad

Similar to java title (20)

PPT
构建可扩展的微博系统
PDF
微博架构Ppt
PDF
Douban qcon2009 beijing
PDF
Mysql HandleSocket技术在SNS Feed存储中的应用
PPTX
Web Caching Architecture and Design
PDF
张松国 腾讯微博架构介绍08
PDF
美丽说的架构发展与变迁 New
PPT
大规模网站架构
PDF
优酷 Web网站架构案例分析
PDF
Youku arch qcon2009_beijing
PDF
Key value store
PPTX
Nosql三步曲
PDF
大型网站架构的发展
PDF
大型网站架构的发展
PDF
Dreaming Infrastructure
PDF
Lamp高性能设计
PPTX
Another Introduce to Redis
PDF
基于My sql的分布式数据库实践 公开
PDF
微信201204
PDF
微信之道201204
构建可扩展的微博系统
微博架构Ppt
Douban qcon2009 beijing
Mysql HandleSocket技术在SNS Feed存储中的应用
Web Caching Architecture and Design
张松国 腾讯微博架构介绍08
美丽说的架构发展与变迁 New
大规模网站架构
优酷 Web网站架构案例分析
Youku arch qcon2009_beijing
Key value store
Nosql三步曲
大型网站架构的发展
大型网站架构的发展
Dreaming Infrastructure
Lamp高性能设计
Another Introduce to Redis
基于My sql的分布式数据库实践 公开
微信201204
微信之道201204

java title