1、构建可扩展微博架构,Tim Yang新浪微博技术架构师,从博客到微博,博客,功能发表浏览留言Content Manager System,博客,技术, LAMPMySQL master/slaveMemcachedPHPCDN,微博,微博,产品Real-time关注关系信息聚合,信息聚合,信息聚合,微博两种信息聚合设计模式Push(推)Pull(拉),Push,把微博看做邮件Inbox: 收到的微博Outbox: 已发表微博发表:存到所有粉丝inbox(重)查看:直接访问Inbox(轻),Push(Figure),Push,优点:实现简单,首选缺点:分发量,Pull,发表:存到自己outbox
2、(轻)查看:所有关注对象Inbox(重),Pull,Pull,优点:节约存储缺点:计算量大,微博是一个消息分发系统可采取推或拉的方式实现,架构挑战:峰值- 如除夕、春节,请求量,如果发表量5,000万/天平均:578条/秒设计系统容量:2,000?,IO瓶颈,峰值:5,000 10,000?100,000?,后果,LatencyDB read timeout前端 timeout (503 error)解决方案?,异步设计,不同步等待将消息存入消息队列(Message Queue)轻量级的发表,MQ products,Kestrel by twitterRabbitMQ, an Erlang Q
3、ueue ServerMemcacheq在新浪微博项目大规模使用,Memcacheq,基于Berkeley db, 稳定可靠Memcached protocol, 丰富的client library容易监控(stats queue)只有2个命令:get/set,避免单点故障,核心服务,需避免单独故障方法使用多个Memcacheq池Get操作: 轮询所有服务器 Set操作: 随机选择一个无需其他复杂“架构”设计,MQ方式通用的优点,Offline work应用请求量不均衡解耦异步通讯原则,使用MQ原则,计算开销大于消息分发开销,架构挑战:实时性,越重要的事件,越希望实时性,The value o
4、f the tweet decreases exponentially with time John Kalucki, Twitter,http:/ is the new the disk,Local CacheMemcachedDatabase buffer/cache,LAMP中,cache=可选层Cache中心化后新的问题,容量问题,TB级思路:压缩QuickLZLZO不用gzip,单点问题,单点故障, SIGSEGV如何应对1. Consistent hash2. Read-through cache,Consistent hash,原理优点震荡最小,Read-through cach
5、e,Read-through and Write-through,Products or projectsMySQL memcached UDFCache money for Ruby on RailsOr wrap a proxy for the db driver, in any language,Evictions问题,Evections: cache数据被踢性能的噩梦Latency产生的源头之一,如何避免evictions,规划cache容量将永久数据与临时数据分开不使用随机字符作为key,Multiget问题,When memcached servers are CPU bound,
6、 adding more memcached servers doesnt help serve more requests.- Jeff Rothschild, Vice President of Technology at Facebook,Cache挑战:multiget hole,解决方法,Memcached replication,架构挑战:海量存储,架构挑战:国内网络带宽问题,地理分布,考虑到以下原因,需要分布式部署访问速度IDC不可用故障分布的核心是数据分布,数据地理分布原理,Master-slaveMaster-master2PC/3PCPaxoshttp:/ master/slaveDynamo/CassandraPNUTS,架构挑战:API访问量,以新浪微博开放平台为例,REST API编程简单,library丰富可用curl, javascript实现一个client缺点单向询问方式如何解决轮询压力,解决方案:Sina App Engine,Sina App Engine 应用云平台提供微博API底层支持并可以host微博app,微博, Web 2.0最核心技术之一还有更多的架构挑战等待解决欢迎加入新浪微博技术团队,Q&A新浪微博: TimYangTwitter: xmppEmail: iso1600 ,