三层架构(three-tier architecture)
网站的架构设计,传统的做法是三层架构,所谓“传统”不意味着“过时”,新潮的技术不成熟,传统的路子更稳健。
(1)表示层(presentation tier):apache web server,主要任务是解析http协议,将请求分发给逻辑层;
(2)逻辑层(logic tier):mongrel rails server,利用rails现成的模块,降低工作量;
(3)数据层(data tier):mysql;
数据层先来吧:
twitter的核心是(1)用户;(2)消息;(3)用户关系;
围绕这几个核心,其核心数据的schema设计:
(1)用户表user
id, name, pass, status, …
(2)消息表msg
msgid, author_id, msg, time, …
(3)用户关系表relation
id, following_ids, followed_ids
逻辑层:
当用户发布消息时,依次执行:
(1)存消息至msg表;
(2)查用户relation表,找出其followed_ids;
(3)获取followed_ids中用户的状态;
(4)在线的ids,将消息push进一个队列queue;
(5)queue中的msg,更新ids的主页;
这里面要用到队列,其实现方式有很多种,例如apache mina,twitter团队自己实现了一个kestrel。
表示层:
表示层的主要职能有2个:
(1)http协议处理(http processor);
(2)分发器(dispatcher);
当然,访问twitter的不仅仅是浏览器,可能还有手机,由于可能存在其他协议,故可能存在其他processor。
无论如何,架构框架清晰如下:
图1:架构版本1
cache=cash即缓存等于收入
cache的使用对大型网站架构至关重要,网站响应速度是影响用户体验最明显的因素,而影响响应速度最大的敌人又是磁盘io。
twitter工程师认为,良好体验的网站平均响应时间应该在500ms左右,理想的时间是200-300ms。
关于cache的使用,是twitter架构的一大看点,带cache的架构清晰如下:
图2:带cache架构版本2