自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

揭秘Twitter網(wǎng)站架構:沒有最復雜只有更復雜

開發(fā) 前端
作為140個字的締造者,twitter太簡單了,又太復雜了,今天就結合網(wǎng)絡上的一些資料,來淺談一下我對twitter網(wǎng)站架構的學習體會,希望給路過的朋友一點啟示。

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

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

◆ 截至2011年4月,twitter的注冊用戶約為1.75億,并以每天300000的新用戶注冊數(shù)增長,但是其真正的活躍用戶遠遠小于這個數(shù)目,大部分注冊用戶都是沒有關注者或沒有關注別人的,這也是與facebook的6億活躍用戶不能相提并論的。

◆ twitter每月有180萬獨立訪問用戶數(shù),并且75%的流量來自twitter.com以外的網(wǎng)站。每天通過API有30億次請求,每天平均產(chǎn)生5500次tweet,37%活躍用戶為手機用戶,約60%的tweet來自第三方的應用。

◆ 平臺:Ruby on Rails 、Erlang 、MySQL 、Mongrel 、Munin 、Nagios 、Google Analytics 、AWStats 、Memcached

下圖是twitter的整體架構設計圖:

 

 

二、twitter的平臺

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

 

 

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

◆ Ruby on Rails:web應用程序的框架

◆ Erlang:通用的面向并發(fā)的編程語言,開源項目地址:http://www.erlang.org/

◆ AWStats:實時日志分析系統(tǒng):開源項目地址:http://awstats.sourceforge.net/

◆ 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://rubyforge.org/projects/mongrel/

◆ Munin:服務端監(jiān)控程序,項目地址:http://munin-monitoring.org/

◆ Nagios:網(wǎng)絡監(jiān)控系統(tǒng),項目地址:http://www.nagios.org/

三、緩存

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

 

 

大量使用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)站也使用這種簡單的方式

五、總結

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

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

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

原文:http://www.cnblogs.com/lonelysharer/archive/2011/10/10/2205116.html

【編輯推薦】

  1. 揭秘Google與Facebook開發(fā)之道
  2. Google算法十年變遷史
  3. Google為什么要執(zhí)行嚴格的代碼編寫規(guī)范
  4. 揭秘Google是如何做代碼審查的
  5. 揭秘Google+技術架構
責任編輯:陳貽新 來源: 一個寂寞的分享者
相關推薦

2021-10-28 10:44:18

自動駕駛數(shù)據(jù)人工智能

2013-06-27 09:30:48

2013-04-26 11:17:48

2019-01-23 07:41:27

私有云企業(yè)虛擬化

2012-10-31 09:16:36

IT管理

2013-01-06 09:26:06

Wi-Fi網(wǎng)絡協(xié)議

2024-01-09 07:34:28

Rust架構語言

2025-01-06 11:00:00

網(wǎng)絡安全惡意軟件網(wǎng)絡犯罪

2025-01-08 00:10:40

2012-11-14 10:51:28

淘寶技術

2012-09-04 09:38:17

StubHub架構票務

2018-11-29 09:36:45

架構系統(tǒng)拆分結構演變

2022-04-26 13:54:31

隱私幣網(wǎng)絡犯罪分子財務領導者

2011-05-12 09:18:17

Twitter手機版Web AppTwitter

2025-04-03 08:00:51

2012-04-20 13:56:16

2021-01-11 08:34:16

緩存穿透QPS

2017-11-10 11:24:21

蘋果iPhone X全面屏

2010-08-17 22:08:05

2012-12-12 09:53:20

下一代防火墻
點贊
收藏

51CTO技術棧公眾號