三層架構(three-tier architecture)
網站的架構設計,傳統的作法是三層架構,所謂「傳統」不意味着「過期」,新潮的技術不成熟,傳統的路子更穩健。
(1)表示層(presentation tier):apache web server,主要任務是解析http協議,將請求分發給邏輯層;
(2)邏輯層(logic tier):mongrel rails server,利用rails現成的模塊,下降工做量;
(3)數據層(data tier):mysql;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_idsweb
邏輯層:
當用戶發佈消息時,依次執行:
(1)存消息至msg表;
(2)查用戶relation表,找出其followed_ids;
(3)獲取followed_ids中用戶的狀態;
(4)在線的ids,將消息push進一個隊列queue;
(5)queue中的msg,更新ids的主頁;
這裏面要用到隊列,其實現方式有不少種,例如apache mina,twitter團隊本身實現了一個kestrel。sql
表示層:
表示層的主要職能有2個:
(1)http協議處理(http processor);
(2)分發器(dispatcher);
固然,訪問twitter的不單單是瀏覽器,可能還有手機,因爲可能存在其餘協議,故可能存在其餘processor。apache
不管如何,架構框架清晰以下:瀏覽器
圖1:架構版本1緩存
cache=cash即緩存等於收入
cache的使用對大型網站架構相當重要,網站響應速度是影響用戶體驗最明顯的因素,而影響響應速度最大的敵人又是磁盤io。
twitter工程師認爲,良好體驗的網站平均響應時間應該在500ms左右,理想的時間是200-300ms。
關於cache的使用,是twitter架構的一大看點,帶cache的架構清晰以下:架構
圖2:帶cache架構版本2框架