SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
构建可扩展微博架构

  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-
  idc-design/
地理分布的方案
• 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

Contenu connexe

Tendances

了解集群
了解集群了解集群
了解集群Feng Yu
 
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Dahui Feng
 
Erlang开发实践
Erlang开发实践Erlang开发实践
Erlang开发实践Feng Yu
 
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器Feng Yu
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构XiaoJun Hong
 
Timyang新浪微博设计谈
Timyang新浪微博设计谈Timyang新浪微博设计谈
Timyang新浪微博设计谈Cevin Cheung
 
低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索Feng Yu
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Feng Yu
 
高级服务器设计和实现2
高级服务器设计和实现2高级服务器设计和实现2
高级服务器设计和实现2Feng Yu
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 
Rekoo social game 后端架构简介
Rekoo social game 后端架构简介Rekoo social game 后端架构简介
Rekoo social game 后端架构简介Binghong Liang
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生dennis zhuang
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现Lixun Peng
 
MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验Jinrong Ye
 
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题XiaoJun Hong
 
Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3redhat9
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveOpenCity Community
 

Tendances (19)

了解集群
了解集群了解集群
了解集群
 
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
 
Erlang开发实践
Erlang开发实践Erlang开发实践
Erlang开发实践
 
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构
 
Timyang新浪微博设计谈
Timyang新浪微博设计谈Timyang新浪微博设计谈
Timyang新浪微博设计谈
 
低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言
 
Mesos intro
Mesos introMesos intro
Mesos intro
 
高级服务器设计和实现2
高级服务器设计和实现2高级服务器设计和实现2
高级服务器设计和实现2
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
 
Rekoo social game 后端架构简介
Rekoo social game 后端架构简介Rekoo social game 后端架构简介
Rekoo social game 后端架构简介
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现
 
MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验
 
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题
 
Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
 
MassTransit
MassTransitMassTransit
MassTransit
 

En vedette (6)

Diggin Diigo
Diggin DiigoDiggin Diigo
Diggin Diigo
 
powerstation
powerstationpowerstation
powerstation
 
Fav20.com
Fav20.comFav20.com
Fav20.com
 
Revista SPnotícias - Ano 1 - Número 07
Revista SPnotícias - Ano 1 - Número 07Revista SPnotícias - Ano 1 - Número 07
Revista SPnotícias - Ano 1 - Número 07
 
Delicious
DeliciousDelicious
Delicious
 
Sharon
SharonSharon
Sharon
 

Similaire à A

构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统lonegunman
 
新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构n716
 
构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统airsex
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈lovingprince58
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰Paul Chao
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updatedPaul Chao
 
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
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB
 
美团技术沙龙04 美团下一代分布式存储系统
美团技术沙龙04   美团下一代分布式存储系统美团技术沙龙04   美团下一代分布式存储系统
美团技术沙龙04 美团下一代分布式存储系统美团点评技术团队
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现orczhou
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.comHo Kim
 
大众点评网的技术变迁之路
大众点评网的技术变迁之路大众点评网的技术变迁之路
大众点评网的技术变迁之路jeffz
 

Similaire à A (20)

构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统
 
新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构
 
构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & development
 
微博架构Ppt
微博架构Ppt微博架构Ppt
微博架构Ppt
 
张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360
 
美团技术沙龙04 美团下一代分布式存储系统
美团技术沙龙04   美团下一代分布式存储系统美团技术沙龙04   美团下一代分布式存储系统
美团技术沙龙04 美团下一代分布式存储系统
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.com
 
Memcached简介
Memcached简介Memcached简介
Memcached简介
 
大众点评网的技术变迁之路
大众点评网的技术变迁之路大众点评网的技术变迁之路
大众点评网的技术变迁之路
 

A