- 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