草草整理的网络的
-
1.构建可扩展微博架构TimYang 新浪微博技术架构师
-
2.从博客到微博
-
3.博客功能 发表 浏览 留言 ContentManager 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 UpdateAction Inbox (Append to 1’s hometimeline) Inbox (Append to 2’s home timeline) Inbox (Append to 3’shome timeline) Followers of User A = 1, 2, 3
-
10.Push 优点:实现简单,首选缺点:分发量
-
11.Pull 发表:存到自己outbox(轻 )查看:所有关注对象Inbox(重 )
-
12.Pull User I Get home_timeline Outbox (statuses sent by A) Outbox(Statuses sent by B) Outbox (Statuses sent by C) User I’sFollowing List = A, B, C
-
13.Pull 优点:节约存储缺点:计算量大
-
14.微博是一个消息分发系统可采取推或拉的方式实现
-
15.架构挑战:峰值-如除夕、春节
-
16.请求量如果发表量 5,000万 /天 平均:578条 /秒设计系统容量: 2,000?
-
17.IO 瓶颈峰值: 5,000– 10,000? 100,000?
-
18.后果LatencyDB read timeout 前端timeout(503 error) 解决方案?
-
19.异步设计不同步等待 将消息存入消息队列 (MessageQueue) 轻量级的发表
-
20.MQ products Kestrel by twitter RabbitMQ, an Erlang Queue ServerMemcacheq 在新浪微博项目大规模使用
-
21.Memcacheq 基于Berkeleydb, 稳定可靠Memcachedprotocol, 丰富的clientlibrary 容易监控(statsqueue) 只有2个命令:get/set
-
22.避免单点故障核心服务,需避免单独故障 方法 使用多个 Memcacheq池 Get操作:轮询所有服务器Set操作:随机选择一个无需其他复杂“架构”设计
-
23.MQ 方式通用的优点Offlinework 应用请求量不均衡解耦 异步通讯 原则
-
24.使用MQ原则计算开销大于消息分发开销
-
25.架构挑战:实时性
-
26.越重要的事件,越希望实时性
-
27.The value of the tweet decreases exponentially with time JohnKalucki, Twitter http://t.sina.com.cn/pub/star#a_ty
-
28.解决思路Cache中心化Ramis the new the disk
-
29.Local Cache Memcached Database buffer/cache
-
30.LAMP 中,cache=可选层Cache中心化后新的问题
-
31.容量问题TB级思路:压缩 QuickLZLZO 不用gzip
-
32.单点问题单点故障 ,SIGSEGV 如何应对1.Consistent hash 2. Read-through cache
-
33.Consistent hash 原理优点 震荡最小
-
34.Read-through cache
-
35.Read-through and Write-through Products or projects MySQL memcachedUDF 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 问题Whenmemcached servers are CPU bound, adding more memcached serversdoesn't help serve more requests. - Jeff Rothschild, Vice Presidentof Technology at Facebook
-
39.Cache 挑战:multigethole
-
40.解决方法Memcachedreplication
-
41.架构挑战:海量存储
-
42.架构挑战:国内网络带宽问题
-
43.地理分布考虑到以下原因,需要分布式部署 访问速度 IDC不可用故障 分布的核心是数据分布
-
44.数据地理分布原理Master-slaveMaster-master 2PC/3PC Paxos http://timyang.net/data/multi-idc-design/
-
45.地理分布的方案MySQLmaster/slave Dynamo/Cassandra PNUTS
-
46.架构挑战:API访问量
-
47.以新浪微博开放平台为例RESTAPI 编程简单,library丰富可用 curl,javascript 实现一个client缺点单向询问方式如何解决轮询压力
-
48.解决方案:SinaApp Engine Sina App Engine 应用云平台提供微博API底层支持并可以 host微博app
-
49.微博,Web 2.0 最核心技术之一还有更多的架构挑战等待解决 欢迎加入新浪微博技术团队
-
50.Q&A 新浪微博:@TimYang Twitter: @ xmpp Email: iso1600 @ gmail.com
新浪微博至今发言或评论要刷新点按多次才能发出,有时weibo.com都无法访问,这些都是scalable扩展性做得不是非常线性的现象所在。
这里主要从 存储和接口角度来讲
对于大流量系统的架构设计,对于写入方面是特别需要注意的,基本上现在遇到的系统都是对于主数据库的写入,然后对于从数据库实现流量的分发。
对于存储,记得公司老大说过,对于BD的项目的架构如果从设计上可以达到20PB的存储规模不出什么大的问题,就说明这个架构设计是合格的。
对于存储,新浪微博使用了redis的部分功能,主要用在用户信息方面的使用,现在只有单机设计,但是对于现在的单机完全可以提供大量的内存比如32G以上,完全可以达到存储数据的要求。
对于MYSQL这里所涉及到的就是设计规范和分库分表,最大的感触是大家为了便利就直接用自增的ID来进行,对于唯一ID的设计也是我一直注意的,因为唯一的设计是涉及到全局的。
将将自己最近总结的PHP和微博架构方面:
1.进行快速开发的过程中,订好规范,按照规范执行是非常的重要的,涉及到的沟通会比较少,其实和其他人联调是很费时间的。
2.对于性能跟踪方面使用使用xhprof来跟踪PHP的执行过程及性能问题,可以初略的估计出来。
3.对于核心代码的复用程度及核心的代码量的把握,核心要灵活可扩展而且保持小
4.技术选型比如对于使用memcache扩展和memcached的扩展还是很重要的
5.对于代码的目录结构和命名还是挺重要的,php的autoload不要搜索太多的目录会比较好
6.考虑下工具类的复用,一直在造轮子每次都重写一遍,这个不是很郁闷的事情,怎么样让这些类不要耦合的太紧?设计很重要
7.对于有些服务是PHP做起来不合适的,比如spam模块的高危词过滤还是用C/C++模块来处理比较好。
8.微博技术的应用Inbox/Outbox/Timeline/Following/Follows/Feed/MQS
9.推荐算法和消息推送的处理,各种高并发的处理