1. 关于twitter的架构方案的分析。51Testing软件测试网5b:e1OK1Z/n
Twitter背景
*Qxm3})w0作为世界上最大的微博客的网站
"hVEJ;K,O&OB'H0 日访问量2亿 独立ip 1.39亿51Testing软件测试网U ~L2BUknBz
作为这么大的流量,能支撑的服务器的架构会是怎么样的呢。
;L4a9`n?'Kk8_M4s0 51Testing软件测试网|#P1v)w5S'?0d
对他的整体架构进行了分析。51Testing软件测试网'?I
k~"r
主要关注点:tweets,timeline,social,graphs,实时索引
w@ Y2_J p&G0下面是twitter架构关于cache方面
B?o \e#T mI}051Testing软件测试网W9qj E+x)D&g
$k5X*Bv8a0Twitter的MQ很简单:基于Memcached的协议,job之间是无序的,服务器之间没有共享的状态,所有的东西都保存在RAM里,并且是事务性的。51Testing软件测试网^7Nj)@1wo#Dk"Q
消息消息队列的控制51Testing软件测试网u{z7x0mf H,y
51Testing软件测试网Y6JA.sSA S
Tweet
|-x]'bDm Y0查询分区(id,author)
+wx_@D}+|K0行存储
V!z{
L_J9?0主从复制,memcache的读缓存
-MF#F'tjvi051Testing软件测试网%~2QX4[_`
单表,垂直切分,关系型51Testing软件测试网9w5G.U7lN1Hd&h
按用户id进行分区
F,qLH0@"D,~3m-v P0根据时间对用户id进行分区
/y
d+H'GZv5i0 51Testing软件测试网xK$lM,`5c
从上可以看出,twitter用了目前最流行也是最土鳖的办法。51Testing软件测试网6gY+f+N
I
%l^)_3ayJ)Rw0他未来的方向
a5iz:w#O,A'W0@ Nosql(cassandra)
#wq9~AQm9X3Z]U)O{%i0Ps:与mongodb的区别
Vr?Ifw)x_0g$w0@主键分区51Testing软件测试网X/[~UmPF
@二次索引在userid 51Testing软件测试网/uG-wf5l:{V
Ps:此方面需要突破,若能利用起来,效率会提高许多。 51Testing软件测试网s!w0`yItH}(v/m:u
@Memcache缓存达到90%
#UQ"D[3O sA0Ps:目前我们对于memcache的命中缺少评估和存在滥用memcache命中低的问题 51Testing软件测试网u#t
h7W5z/\q H.[
{c|9pH"h0Timelines51Testing软件测试网0J8a VW7]Yzn
顺序行id51Testing软件测试网%[swOn8^5y7pS(rW
查询分区get by user_id51Testing软件测试网So_ Y*~
增加,合并,截断
?_(mK-bB7X0高缓存载体51Testing软件测试网 T0KU q-Z
基于空间变化??51Testing软件测试网#R/N
d0E$a(U
B~QTl(}p0Select * from tweets where use_id in (select source_id from followers where destination_id=?)51Testing软件测试网[wl7H*^1]XQ
Order by created_at asc limit 2051Testing软件测试网 D:Q:w9W&DN
Ps:这句如果存在大量的source将会导致速度很慢
&NB+Tkh:[dT4s0因此提出了,用memcache的顺序存储51Testing软件测试网mWeI[V
Low latency sla
/_8Ya4]Z-\G|?{e
v0Truncate51Testing软件测试网.`\#F4L\U-zB4~)qR
合并timeline51Testing软件测试网!Wo0m'DU Gt+QF
pT`6Mh j0Ps:此方式不是很明白。51Testing软件测试网b)|M;^(~u5g,G
51Testing软件测试网 ^Pw-uoe-c3poP cI,q/s
)g4E;rj~#z]Y*j4K0文档分区51Testing软件测试网M2WT"u8^)FK i
时间分区
!]Q6T-P'iM w0合并层
5K9M;@ t!m:_0用lucence 代替mysql51Testing软件测试网_N9W,Sp%D5[L-?{ K
51Testing软件测试网FT*`$Q/N.j
A
51Testing软件测试网H,G!Z1Y/y?O oZ
用Twitter的cursor方式进行Web数据分页
d$c [2Y9@%s(N2CS v)k0翻页到100000
U:Yimfe)zp0select * from msgs limit 100000, 10051Testing软件测试网{zU0WQJOb
使用cursor分页方式对应的SQL可以优化为
GZ ~-^QbO*M0select * from msgs where id > cursor_id limit 100000;51Testing软件测试网D&~#K v5kv
Z0G
按照这种效率效率提高很多
A3Oa0Lz#Jt0 51Testing软件测试网?|bg4h"mf
51Testing软件测试网j
Gv1I)_1|2u
high-velocity bounded vector 高缓存51Testing软件测试网VTSFE!mu!C
low latency低延迟
4pw L|*d9r]7\2X0principles 原则
E+k+|&W5v1\!i$^O0