• 1. 构建可扩展微博架构Tim Yang 新浪微博 技术架构师
  • 2. 从博客到微博
  • 3. 博客功能 发表 浏览 留言 Content Manager System
  • 4. 博客技术, LAMP MySQL master/slave Memcached PHP CDN
  • 5. 微博微博,产品 Real-time 关注关系 信息聚合
  • 6. 信息聚合
  • 7. 信息聚合微博两种信息聚合设计模式 Push(推) Pull(拉)
  • 8. Push把微博看做邮件 Inbox: 收到的微博 Outbox: 已发表微博 发表:存到所有粉丝inbox(重) 查看:直接访问Inbox(轻)
  • 9. Push(Figure)User A UpdateActionInbox (Append to 1’s home timeline)Inbox (Append to 2’s home timeline)Inbox (Append to 3’s home timeline)Followers of User A = 1, 2, 3
  • 10. Push优点:实现简单,首选 缺点:分发量
  • 11. Pull发表:存到自己outbox(轻) 查看:所有关注对象Inbox(重)
  • 12. Pull
  • 13. Pull优点:节约存储 缺点:计算量大
  • 14. 微博是一个消息分发系统 可采取推或拉的方式实现
  • 15. 架构挑战:峰值 - 如除夕、春节
  • 16. 请求量如果发表量5,000万/天 平均:578条/秒 设计系统容量:2,000?
  • 17. IO瓶颈峰值:5,000 – 10,000? 100,000?
  • 18. 后果Latency DB read timeout 前端 timeout (503 error) 解决方案?
  • 19. 异步设计不同步等待 将消息存入消息队列(Message Queue) 轻量级的发表
  • 20. MQ productsKestrel by twitter RabbitMQ, an Erlang Queue Server Memcacheq 在新浪微博项目大规模使用
  • 21. Memcacheq基于Berkeley db, 稳定可靠 Memcached protocol, 丰富的client library 容易监控(stats queue) 只有2个命令:get/set
  • 22. 避免单点故障核心服务,需避免单独故障 方法 使用多个Memcacheq池 Get操作: 轮询所有服务器 Set操作: 随机选择一个 无需其他复杂“架构”设计
  • 23. MQ方式通用的优点Offline work 应用请求量不均衡 解耦 异步通讯 原则
  • 24. 使用MQ原则计算开销大于消息分发开销
  • 25. 架构挑战:实时性
  • 26. 越重要的事件,越希望实时性
  • 27. The value of the tweet decreases exponentially with time John Kalucki, Twitter http://t.sina.com.cn/pub/star#a_ty
  • 28. 解决思路 Cache中心化 Ram is the new the disk
  • 29. Local Cache Memcached Database buffer/cache
  • 30. LAMP中,cache=可选层 Cache中心化后新的问题
  • 31. 容量问题TB级 思路:压缩 QuickLZ LZO 不用gzip
  • 32. 单点问题单点故障, SIGSEGV 如何应对 1. Consistent hash 2. Read-through cache
  • 33. Consistent hash原理 优点 震荡最小
  • 34. Read-through cache
  • 35. Read-through and Write-throughProducts or projects MySQL memcached UDF Cache money for Ruby on Rails Or wrap a proxy for the db driver, in any language
  • 36. Evictions问题Evections: cache数据被踢 性能的噩梦 Latency产生的源头之一
  • 37. 如何避免evictions规划cache容量 将永久数据与临时数据分开 不使用随机字符作为key
  • 38. 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
  • 39. Cache挑战:multiget hole
  • 40. 解决方法Memcached replication
  • 41. 架构挑战:海量存储
  • 42. 架构挑战: 国内网络带宽问题
  • 43. 地理分布考虑到以下原因,需要分布式部署 访问速度 IDC不可用 故障 分布的核心是数据分布
  • 44. 数据地理分布原理Master-slave Master-master 2PC/3PC Paxos http://timyang.net/data/multi-idc-design/
  • 45. 地理分布的方案MySQL master/slave Dynamo/Cassandra PNUTS
  • 46. 架构挑战:API访问量
  • 47. 以新浪微博开放平台为例REST API 编程简单,library丰富 可用curl, javascript实现一个client 缺点单向询问方式 如何解决轮询压力
  • 48. 解决方案:Sina App EngineSina App Engine 应用云平台提供微博API底层支持 并可以host微博app
  • 49. 微博, Web 2.0最核心技术之一 还有更多的架构挑战等待解决 欢迎加入新浪微博技术团队
  • 50. Q&A 新浪微博:@ TimYang Twitter: @ xmpp Email: iso1600 @ gmail.com