免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

Twitter網(wǎng)站架構(gòu)學習筆記

 daomucun 2011-09-13

Twitter網(wǎng)站架構(gòu)學習筆記

作為140個字的締造者,twitter太簡單了,又太復雜了,簡單是因為僅僅用140個字居然使有幾次世界性事件的傳播速度超過任何媒體,復雜是因為要為2億用戶提供這看似簡單的140個字的服務,這真的是因為簡單,所以復雜??墒潜容^遺憾的是目前在中國大陸twitter是無法訪問的,但作為一個愛好架構(gòu)的程序猿,這道墻是必須得翻的,墻外的世界更精彩。今天就結(jié)合網(wǎng)絡上的一些資料,來淺談一下我對twitter網(wǎng)站架構(gòu)的學習體會,希望給路過的朋友一點啟示.......

 

一、twitter網(wǎng)站基本情況概覽

  1. 截至2011年4月,twitter的注冊用戶約為1.75億,并以每天300000的新用戶注冊數(shù)增長,但是其真正的活躍用戶遠遠小于這個數(shù)目,大部分注冊用戶都是沒有關注者或沒有關注別人的,這也是與facebook的6億活躍用戶不能相提并論的。
  2. twitter每月有180萬獨立訪問用戶數(shù),并且75%的流量來自twitter.com以外的網(wǎng)站。每天通過API有30億次請求,每天平均產(chǎn)生5500次tweet,37%活躍用戶為手機用戶,約60%的tweet來自第三方的應用。
  3. 平臺:Ruby on Rails 、Erlang 、MySQL 、Mongrel 、Munin 、Nagios 、Google Analytics 、AWStats 、Memcached

下圖是twitter的整體架構(gòu)設計圖:


 

二、twitter的平臺

twitter平臺大致由twitter.com、手機以及第三方應用構(gòu)成,如下圖所示:

其中流量主要以手機和第三方為主要來源。

  • Ruby on Rails:web應用程序的框架
  • Erlang:通用的面向并發(fā)的編程語言,開源項目地址:http://www./
  • AWStats:實時日志分析系統(tǒng):開源項目地址:http://awstats./
  • Memcached:分布式內(nèi)存緩存組建
  • Starling:Ruby開發(fā)的輕量級消息隊列
  • Varnish:高性能開源HTTP加速器
  • Kestrel:scala編寫的消息中間件,開源項目地址:http://github.com/robey/kestrel
  • Comet Server:Comet是一種ajax長連接技術,利用Comet可以實現(xiàn)服務器主動向web瀏覽器推送數(shù)據(jù),從而避免客戶端的輪詢帶來的性能損失。
  • libmemcached:一個memcached客戶端
  • 使用mysql數(shù)據(jù)庫服務器
  • Mongrel:Ruby的http服務器,專門應用于rails,開源項目地址:http:///projects/mongrel/
  • Munin:服務端監(jiān)控程序,項目地址:http:///
  • Nagios:網(wǎng)絡監(jiān)控系統(tǒng),項目地址:http://www./

三、緩存

講著講著就又說到緩存了,確實,緩存在大型web項目中起到了舉足輕重的作用,畢竟數(shù)據(jù)越靠近CPU存取速度越快。下圖是twitter的緩存架構(gòu)圖:

大量使用memcached作緩存

  • 例如,如果獲得一個count非常慢,你可以將count在1毫秒內(nèi)扔入memcached
  • 獲取朋友的狀態(tài)是很復雜的,這有安全等其他問題,所以朋友的狀態(tài)更新后扔在緩存里而不是做一個查詢。不會接觸到數(shù)據(jù)庫 
  • ActiveRecord對象很大所以沒有被緩存。Twitter將critical的屬性存儲在一個哈希里并且當訪問時遲加載 
  • 90%的請求為API請求。所以在前端不做任何page和fragment緩存。頁面非常時間敏感所以效率不高,但Twitter緩存了API請求

在memcached緩存策略中,又有所改進,如下所述:

1、創(chuàng)建一個直寫式向量緩存Vector Cache,包含了一個tweet ID的數(shù)組,tweet ID是序列化的64位整數(shù),命中率是99%

2、加入一個直寫式行緩存Row Cache,它包含了數(shù)據(jù)庫記錄:用戶和tweets。這一緩存有著95%的命中率。

3、引入了一個直讀式的碎片緩存Fragmeng Cache,它包含了通過API客戶端訪問到的sweets序列化版本,這些sweets可以被打包成json、xml或者Atom格式,同樣也有著95%的命中率。

4、為頁面緩存創(chuàng)建一個單獨的緩存池Page Cache。該頁面緩存池使用了一個分代的鍵模式,而不是直接的實效。

四、消息隊列

  • 大量使用消息。生產(chǎn)者生產(chǎn)消息并放入隊列,然后分發(fā)給消費者。Twitter主要的功能是作為不同形式(SMS,Web,IM等等)之間的消息橋
  • 使用DRb,這意味著分布式Ruby。有一個庫允許你通過TCP/IP從遠程Ruby對象發(fā)送和接收消息,但是它有點脆弱 
  • 移到Rinda,它是使用tuplespace模型的一個分享隊列,但是隊列是持久的,當失敗時消息會丟失 
  • 嘗試了Erlang 
  • 移到Starling,用Ruby寫的一個分布式隊列 
  • 分布式隊列通過將它們寫入硬盤用來挽救系統(tǒng)崩潰。其他大型網(wǎng)站也使用這種簡單的方式

五、總結(jié)

1、數(shù)據(jù)庫一定要進行合理索引

2、要盡可能快的認知你的系統(tǒng),這就要你能靈活地運用各種工具了

3、緩存,緩存,還是緩存,緩存一切可以緩存的,讓你的應用飛起來。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多