1. 程式人生 > >網站(B/s)架構發展探索、分析

網站(B/s)架構發展探索、分析

1.系統概況圖

clip_image001

圖1.1 系統架構概況圖

clip_image003

圖1.2 較為完整的系統架構圖

2.系統使用的主要技術

下列排名不分先後

2.1前端

JavaScript,html,css,silverlight,flash

Javascript類庫,用來簡化html的操作,事件處理,動畫,非同步訪問,用於web的快速開發。最新版本是1.7.1,分為開發環境(大小為229k)和生產環境(大小為31k)。特點是輕量,體積小;css相容1-3;跨瀏覽器。凡客,噹噹,亞馬遜。

如果從框架角度分級的話,可以有以下分類:

  • 零級,完成base工作,包括擴充套件原有物件的方法,Ajax通訊部分,比較精簡
  • 一級,完成effect工作,包括增加常用效果轉換函式,如tween、drag、maskLayer、fade等的特效
  • 二級,完成component工作,包括對話方塊、列表、樹、日曆等的元件
  • 三級,完成application工作,包括完整的前端平臺,允許使用者定義能實現一定功能的模組

一些UI控制元件和開發框架只做零級Prototype.js,和一級jQuery/Mootools;一些做到了三級,如Dojo和EXT。

小巧靈活,簡潔實用,使用起來讓人感覺愉悅。淘寶,騰訊。

2.2後端

Php,Perl,asp,ruby,python,.net,java,jsp(java server page)

靜態語言:java, .net

動態語言(指令碼語言):php, asp, jsp, perl, python, ruby

Php是老牌的指令碼語言,儘管出現了很多的新語言,但是php還是大多數網站的首選,據說全世界70%的網站都使用php。LAMP(linux+apache+mysql+php)是經典組合。

ASP是Active Server Page的縮寫,意為“動態伺服器頁面”。ASP是微軟公司開發的代替CGI指令碼程式的一種應用,它可以與資料庫和其它程式進行互動,是一種簡單、方便的程式設計工具。ASP的網頁檔案的格式是。常用於各種動態網站中。

JSP(Java Server Pages)是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的

網頁HTML檔案(*.htm,*.html)中插入Java程式段(Scriptlet)和JSP標記(tag),從而形成JSP檔案(*.jsp)。 用JSP開發的Web應用是跨平臺的,既能在Linux下執行,也能在其他作業系統上執行。

Pythonruby是近幾年崛起的開源語言,特點是容易上手,能快速完成原型。同時也是較為成熟指令碼語言。Python是豆瓣的主要語言,google,youtube等網站也都在使用。

Twitter的前端主要使用ruby,motorola和NASA也都使用了ruby。

2.3快取

開源。

Squid伺服器群,把它作為web伺服器端的前置cache伺服器,快取相關請求來提高web伺服器速度。Squid將大部分靜態資源(圖片,js,css等)快取起來,也可以快取頻繁訪問的網頁,直接返回給訪問者,減少應用伺服器的負載。

開源。

memcached伺服器群,一款分散式快取產品,很多大型網站在應用; 它可以應對任意多個連線,使用非阻塞的網路IO。由於它的工作機制是在記憶體中開闢一塊空間,然後建立一個HashTable,Memcached自管理這些HashTable。因為通常網站應用程式中最耗費時間的任務是資料在資料庫的檢索,而多個使用者查詢相同的SQL時,資料庫壓力會增大,而通過memcached的查詢快取命中,資料直接從memcached記憶體中取,每次快取命中將替換到資料庫伺服器的一次往返,到達資料庫伺服器的請求更少,間接地提高了資料庫伺服器的效能,從而使應用程式執行得更快。它通過基於記憶體快取物件來減少資料庫查詢的方式改善網站系統的反應,其最吸引人的一個特性就是支援分散式部署。

2.4中介軟體

Java,.net,c,c++

2.5儲存

2.5.1關係資料庫

Oracle,mysql,mssql,postgreSQL

關係資料庫,擁有15年的歷史。免費,開源。可以執行在linux、unix和windows上,支援事物、主外來鍵、連線、檢視、觸發器、儲存過程。包含大量的資料型別,也支援大物件。支援多種語言,c,c++,java,c#,perl,python,ruby等等。

2.5.2 NoSQL儲存

MongoDB,Redis,CouchDB,Cassandra,HBase

NoSQL(not only sql),不僅僅是SQL。用來彌補關係資料庫在某些方面的不足。例如:

l 高併發讀寫。每秒上萬次的讀寫,關係資料庫有點吃力。

l 海量資料的高效儲存和訪問。例如:對一張表有2億資料的表進行讀寫,效率較為低下。

l 高擴充套件性。對於資料庫的升級和擴充套件,增加節點,往往需要停機和資料遷移。

有一些地方不需要關係資料庫,例如:

l 事務一致性。某些場合不需要事務,對於資料的一致性也沒有嚴格要求。

l 讀寫實時性。有些場合不需要實時的讀寫。

文件型nosql,支援主從複製。有很多的大公司使用。支援多種程式語言。

Disney,SAP,淘寶(監控資料),sourceforge,大眾點評(使用者行為分析,使用者、組)。

Redis

鍵值型nosql,vmware贊助,支援多種程式語言。Twitter,淘寶,新浪微博都有使用。

都是apache旗下的專案。

2.5.3檔案系統

商用中介軟體,自定義檔案系統

2.6作業系統

Windows,linux,unix

2.7 Web應用伺服器軟體

IIS,apache,tomcat,jboss,weblogic(BEA,商用,收費),websphere(IBM,商用,收費),lighttpd,nginx

IIS

微軟windows作業系統專用。

lighttpd,是一個德國人領導的開源軟體,其根本的目的是提供一個專門針對高效能網站,安全、快速、相容性好。lighttpd並且靈活的web server環境。具有非常低的記憶體開銷,cpu佔用率低,效能好,以及豐富的模組等特點。lighttpd是眾多OpenSource輕量級的web server中較為優秀的一個。支援FastCGI, CGI, Auth, 輸出壓縮(output compress), URL重寫, Alias等重要功能,

Nginx

開源

Nginx+php(FastCGI)+Memcached+Mysql+APC 是目前主流的高效能伺服器搭建方式!適合大中型網站,小型站長也可以採用這種組合!

Nginx 超越 Apache 的高效能和穩定性,使得國內使用 Nginx 作為 Web 伺服器的網站也越來越多,其中包括國內最大的電子地圖MapBar、新浪部落格、新浪播客、網易新聞等入口網站頻道,六間房、56.com等視訊分享網 站,Discuz!官方論壇、水木社群等知名論壇,豆瓣、YUPOO相簿、海內SNS、迅雷線上等新興Web 2.0網站,更多的網站都在使用Nginx配置。

2.8 框架

Ruby:rails

PHP:PEAR

3.主流網站架構演進

3.1第一步:物理分離webserver和資料庫

剛開始我們的網站可能搭建在一臺伺服器上,這個時候由於網站具備了一定的特色,吸引了部分人訪問,逐漸你發現系統的壓力越來越高,響應速度越來越慢,而這個時候比較明顯的是資料庫和應用互相影響,應用出問題了,資料庫也很容易出現問題,而資料庫出問題的時候,應用也容易出問題,於是進入了第一步演變階段:將應用和資料庫從物理上分離,變成了兩臺機器,這個時候技術上沒有什麼新的要求,但你發現確實起到效果了,系統又恢復到以前的響應速度了,並且支撐住了更高的流量,並且不會因為資料庫和應用形成互相的影響。

clip_image005

圖3.1

3.2第二步:增加頁面快取

好景不長,隨著訪問的人越來越多,你發現響應速度又開始變慢了,查詢原因,發現是訪問資料庫的操作太多,導致資料連線競爭激烈,所以響應變慢,但資料庫連線又不能開太多,否則資料庫機器壓力會很高,因此考慮採用快取機制來減少資料庫連線資源的競爭和對資料庫讀的壓力,這個時候首先也許會選擇採用squid等類似的機制來將系統中相對靜態的頁面(例如一兩天才會有更新的頁面)進行快取(當然,也可以採用將頁面靜態化的方案),這樣程式上可以不做修改,就能夠很好的減少對webserver的壓力以及減少資料庫連線資源的競爭,OK,於是開始採用squid來做相對靜態的頁面的快取。

clip_image007

圖3.2

3.3第三步:增加頁面片段快取

增加了squid做快取後,整體系統的速度確實是提升了,webserver的壓力也開始下降了,但隨著訪問量的增加,發現系統又開始變的有些慢了,在嚐到了squid之類的動態快取帶來的好處後,開始想能不能讓現在那些動態頁面裡相對靜態的部分也快取起來呢,因此考慮採用類似ESI之類的頁面片段快取策略,OK,於是開始採用ESI來做動態頁面中相對靜態的片段部分的快取。

clip_image009

圖3.3

3.4第四步:資料快取

在採用ESI之類的技術再次提高了系統的快取效果後,系統的壓力確實進一步降低了,但同樣,隨著訪問量的增加,系統還是開始變慢,經過查詢,可能會發現系統中存在一些重複獲取資料資訊的地方,像獲取使用者資訊等,這個時候開始考慮是不是可以將這些資料資訊也快取起來呢,於是將這些資料快取到本地記憶體,改變完畢後,完全符合預期,系統的響應速度又恢復了,資料庫的壓力也再度降低了不少。可以使用的技術有:memcached。

clip_image011

圖3.4

3.5第五步:增加webserver

好景不長,發現隨著系統訪問量的再度增加,webserver機器的壓力在高峰期會上升到比較高,這個時候開始考慮增加一臺webserver,這也是為了同時解決可用性的問題,避免單臺的webserver down機的話就沒法使用了,在做了這些考慮後,決定增加一臺webserver,增加一臺webserver時,會碰到一些問題,典型的有:

1、如何讓訪問分配到這兩臺機器上,這個時候通常會考慮的方案是Apache自帶的負載均衡方案,或LVS這類的軟體負載均衡方案;

2、如何保持狀態資訊的同步,例如使用者session等,這個時候會考慮的方案有寫入資料庫、寫入儲存、cookie或同步session資訊等機制等;

3、如何保持資料快取資訊的同步,例如之前快取的使用者資料等,這個時候通常會考慮的機制有快取同步或分散式快取;

4、如何讓上傳檔案這些類似的功能繼續正常,這個時候通常會考慮的機制是使用共享檔案系統或儲存等;

在解決了這些問題後,終於是把webserver增加為了兩臺,系統終於是又恢復到了以往的速度。

clip_image013

圖3.5

3.6第六步:分庫

享受了一段時間的系統訪問量高速增長的幸福後,發現系統又開始變慢了,這次又是什麼狀況呢,經過查詢,發現數據庫寫入、更新的這些操作的部分資料庫連線的資源競爭非常激烈,導致了系統變慢,這下怎麼辦呢,此時可選的方案有資料庫叢集和分庫策略,叢集方面像有些資料庫支援的並不是很好,因此分庫會成為比較普遍的策略,分庫也就意味著要對原有程式進行修改,一通修改實現分庫後,不錯,目標達到了,系統恢復甚至速度比以前還快了。

clip_image015

圖3.6

3.7第七步:分表、DAL和分散式快取

隨著系統的不斷執行,資料量開始大幅度增長,這個時候發現分庫後查詢仍然會有些慢,於是按照分庫的思想開始做分表的工作,當然,這不可避免的會需要對程式進行一些修改,也許在這個時候就會發現應用自己要關心分庫分表的規則等,還是有些複雜的,於是萌生能否增加一個通用的框架來實現分庫分表的資料訪問,這個在ebay的架構中對應的就是DAL,這個演變的過程相對而言需要花費較長的時間,當然,也有可能這個通用的框架會等到分表做完後才開始做,同時,在這個階段可能會發現之前的快取同步方案出現問題,因為資料量太大,導致現在不太可能將快取存在本地,然後同步的方式,需要採用分散式快取方案了,於是,又是一通考察和折磨,終於是將大量的資料快取轉移到分散式快取上了。

clip_image017

圖3.7

3.8第八步:增加更多的webserver

在做完分庫分表這些工作後,資料庫上的壓力已經降到比較低了,又開始過著每天看著訪問量暴增的幸福生活了,突然有一天,發現系統的訪問又開始有變慢的趨勢了,這個時候首先檢視資料庫,壓力一切正常,之後檢視webserver,發現apache阻塞了很多的請求,而應用伺服器對每個請求也是比較快的,看來是請求數太高導致需要排隊等待,響應速度變慢,這還好辦,一般來說,這個時候也會有些錢了,於是新增一些webserver伺服器,在這個新增webserver伺服器的過程,有可能會出現幾種挑戰:

1、Apache的軟負載或LVS軟負載等無法承擔巨大的web訪問量(請求連線數、網路流量等)的排程了,這個時候如果經費允許的話,會採取的方案是購買硬體負載,例如F5、Netsclar、Athelon之類的,如經費不允許的話,會採取的方案是將應用從邏輯上做一定的分類,然後分散到不同的軟負載叢集中;

2、原有的一些狀態資訊同步、檔案共享等方案可能會出現瓶頸,需要進行改進,也許這個時候會根據情況編寫符合網站業務需求的分散式檔案系統等;

在做完這些工作後,開始進入一個看似完美的無限伸縮的時代,當網站流量增加時,應對的解決方案就是不斷的新增webserver。

clip_image019

圖3.8

3.9第九步:資料讀寫分離和廉價儲存方案

突然有一天,發現這個完美的時代也要結束了,資料庫的噩夢又一次出現在眼前了,由於新增的webserver太多了,導致資料庫連線的資源還是不夠用,而這個時候又已經分庫分表了,開始分析資料庫的壓力狀況,可能會發現資料庫的讀寫比很高,這個時候通常會想到資料讀寫分離的方案,當然,這個方案要實現並不容易,另外,可能會發現一些資料儲存在資料庫上有些浪費,或者說過於佔用資料庫資源,因此在這個階段可能會形成的架構演變是實現資料讀寫分離,同時編寫一些更為廉價的儲存方案,例如BigTable這種。

clip_image021

圖3.9

3.10第十步:進入大型分散式應用時代和廉價伺服器群夢想時代

經過上面這個漫長而痛苦的過程,終於是再度迎來了完美的時代,不斷的增加webserver就可以支撐越來越高的訪問量了,對於大型網站而言,人氣的重要毋庸置疑,隨著人氣的越來越高,各種各樣的功能需求也開始爆發性的增長,這個時候突然發現,原來部署在webserver上的那個web應用已經非常龐大了,當多個團隊都開始對其進行改動時,可真是相當的不方便,複用性也相當糟糕,基本是每個團隊都做了或多或少重複的事情,而且部署和維護也是相當的麻煩,因為龐大的應用包在N臺機器上覆制、啟動都需要耗費不少的時間,出問題的時候也不是很好查,另外一個更糟糕的狀況是很有可能會出現某個應用上的bug就導致了全站都不可用,還有其他的像調優不好操作(因為機器上部署的應用什麼都要做,根本就無法進行鍼對性的調優)等因素,根據這樣的分析,開始痛下決心,將系統根據職責進行拆分,於是一個大型的分散式應用就誕生了,通常,這個步驟需要耗費相當長的時間,因為會碰到很多的挑戰:

1、拆成分散式後需要提供一個高效能、穩定的通訊框架,並且需要支援多種不同的通訊和遠端呼叫方式;

2、將一個龐大的應用拆分需要耗費很長的時間,需要進行業務的整理和系統依賴關係的控制等;

3、如何運維(依賴管理、執行狀況管理、錯誤追蹤、調優、監控和報警等)好這個龐大的分散式應用。

經過這一步,差不多系統的架構進入相對穩定的階段,同時也能開始採用大量的廉價機器來支撐著巨大的訪問量和資料量,結合這套架構以及這麼多次演變過程吸取的經驗來採用其他各種各樣的方法來支撐著越來越高的訪問量。

clip_image023

圖3.10

4.分析

隨著平臺做大做強,很可能會走向定製作業系統,定製資料庫,甚至定製硬體,定製任何可以定製的東西這樣一條路。

在伺服器、架構、元件等技術選擇方面,主要有兩個方向:1選擇成熟商用。2選擇開源+自主研發。下面就這兩個方向逐一進行簡單分析。

1商用的優缺點

l 商用的優點之一是成熟,穩定,搭建快速。

l 商用的缺點之一是費用高,隨著伺服器的增加,license的費用上升,成本偏高。

l 商用的產品是通用化的,缺乏定製性,不能滿足個性需要。

2開源+自主研發的優缺點

l 原始碼開放,可控性好,出現問題,可以從底層解決,擴充套件性好。

l 短期時間、人力投入大,初期見效慢;長期產出大,見效明顯。

l 可以在軟體和硬體的多個層面不斷優化,充分滿足個性化需要。

商用和開源+自主研發各有優缺點,各有互補性,要根據使用場景的不同來進行選擇,也可以根據需要配合使用。

5.總結

目前大型網站的主流是LAMP(linux+apache+mysql+php),或者是在這基礎之上的擴充套件,例如增加快取,增加中介軟體(中介軟體大多使用java,c,c++或者.NET編寫,或者購買成熟的中介軟體產品,IBM就有很多成熟的中介軟體產品);又或者替換其中的某些部分,例如前端使用python,ruby,lua這些新近流行的指令碼語言,資料儲存部分使用nosql或者檔案系統。這樣的選擇有歷史原因、費用原因、業務原因,也有在網站發展之後需要滿足新的需求而衍生出來解決特定問題的原因。

也有初期使用微軟系(windows+.NET+MSSQL)來構建網站的,在後面又根據需要加入其他體系的的電商,例如:京東,噹噹,凡客等。也有始終採用微軟系的網站,國外的微軟官網stackoverflow,還有曾經輝煌的myspace

其實,現在的發展趨勢是:混合體系,而非單一的體系。就是說技術體系不是單一的,也不是固定一成不變的,而是根據業務以及網站的發展,以及技術的發展,選擇合適的技術解決適當的問題。

架構的變更不是一件小事,對業務和網站的發展都很重要,不可能幾天或者一半個月就變更一下,也不可能有事沒事變更一下,應該是在關鍵的時候,有需要的時候,或者根據計劃定期升級。

我覺得有一種方式可以幫助我們進行選擇。就是根據我們的目標,或者說預估的業務量,預估的成交量,預估的使用者量,劃分幾個平臺發展里程碑,或者是時間段。然後根據平臺發展的里程碑來規劃技術選型的里程碑。考慮規模的同時,還需要考慮業務的型別,產生的資料的型別,對這些資料的處理需求等因素。

可以先定幾個里程碑,這個里程碑的時間,可以根據前面的業務預估來裁定。先根據第一個里程碑要滿足的業務需求,來選擇當前的技術架構,並且進行儲存空間規劃。然後針對第一個到第二個里程碑的過度,進行預留設計,保證將來的平穩過渡。或者只是預留擴充套件的餘地,這方面有時候有點難度,不過應該儘量做。

在第二個里程碑之前的1-2個月進行第二個里程碑技術架構的討論和設計,因為這時候相比原有的第二個里程碑的業務估計可能會有變動,或者技術上有了新的選擇,都可以及時考慮到本次的設計中來。以此類推後面的里程碑技術架構變更。

還有就是突發情況,因為總會有一些意料之外的情況發生,有的是業務發展的需要,有的是被動的需要。針對這些突發情況,也會進行架構的升級。

參考文獻

全球軟體開發大會

QCon是由InfoQ主辦的全球頂級技術盛會,每年在倫敦、北京、東京、紐約、聖保羅、杭州、舊金山召開。自2007年3月份首次舉辦以來,已經 有包括傳統制造、金融、電信、網際網路、航空航天等領域的近萬名架構師、專案經理、團隊領導者和高階開發人員參加過QCon大會。

秉承“促進軟體開發領域知識與創新的傳播”原則,QCon各項議題專為中高階技術人員設計,內容源於實踐並面向社群。演講嘉賓依據各重點和熱點話題,分享技術趨勢和最佳實踐;作為主辦方,InfoQ努力為參會者提供良好的學習和交流環境。

1.淘寶

LAMP, .NET, Nginx, windows, linux, Oracle, MySQL, Lua, NoSQL

淘寶網,是一個線上商品數量突破一億,日均成交額超過兩億元人民幣,註冊使用者接近八千萬的大型電子商務網站,是亞洲最大的購物網站。

· 日均 IP [周平均]
134700000

· 日均 PV [周平均]
2559300000

· 日均 IP [月平均]
137280000

· 日均 PV [月平均]
2608320000

· 日均 IP [三月平均]
130620000

· 日均 PV [三月平均]
2481780000

存放淘寶所有的開源專案

目前,國內自主研發的檔案系統可謂鳳毛麟角。淘寶在這一領域做了有效的探索和實踐,Taobao File System(TFS)作為淘寶內部使用的分散式檔案系統,針對海量小檔案的隨機讀寫訪問效能做了特殊優化,承載著淘寶主站所有圖片、商品描述等資料儲存。

Tair是由淘寶網自主開發的Key/Value結構資料儲存系統,在淘寶網有著大規模的應用。您在登入淘寶、檢視商品詳情頁面或者在淘江湖和好友“搗漿糊”的時候,都在直接或間接地和Tair互動。

LinkedIn和淘寶部分功能使用了Node.js

2.騰訊

Php, asp

· 日均 IP [周平均]
222000000

· 日均 PV [周平均]
1776000000

· 日均 IP [月平均]
218640000

· 日均 PV [月平均]
1749120000

· 日均 IP [三月平均]
213930000

· 日均 PV [三月平均]
1711440000

3.又拍網

Erlang, Python, PHP, Redis

3.趕集網

Php, MySQL

4.新浪微博

php

唐福林是新浪微博開放平臺資深工程師,目前負責t.cn短鏈、使用者關係、計數器等底層服務。他曾負責過包括新浪郵箱全文搜尋在內的多個基於Lucene的 垂直搜尋引擎開發,以及新浪愛問和新浪播客的運維,對承載大資料量、高併發的網際網路基礎設施建設有豐富的經驗。他在QCon杭州2011大會的開放平臺專 題做了名為《新浪微博開放平臺中的Redis實踐》的講座,並和參會者做了熱烈的討論。會後,InfoQ中文站對唐福林做了採訪。

新浪微博的註冊使用者數在3個月內從1.4億增長到2億,使用者之間的關注,粉絲關係更是要再高出一個數量級,而且讀取量還在以更快的速度增長。新浪微 博開放平臺的介面中還有很多的數字,這些數字的讀寫量巨大,而且對一致性,實時性都要求很高。傳統的 mysql+memcache 方案在這些場景下越來越力不從心,於是新浪微博開放平臺大膽啟用了 NoSql 領域的新貴 Redis 。

LAMP

Lamp,ruby

Twitter使用的大部分工具都是開源的。其結構是用Rails作前端,C,Scala和Java組成中間的業務層,使用MySQL儲存資料。所有的東西都儲存在RAM裡,而資料庫只是用作備份。Rails前端處理展現,快取組織,DB查詢以及同步插入。這一前端主要由幾部分客戶服務粘合而成,大部分是C寫的:MySQL客戶端,Memcached客戶端,一個JSON端,以及其它。

中介軟體使用了Memcached,Varnish用於頁面快取,一個用Scala寫成的MQ,Kestrel和一個Comet伺服器也正在規劃之中,該伺服器也是用Scala寫成,當客戶端想要跟蹤大量的tweet時它就能派上用場。

Twitter是作為一個“內容管理平臺而非訊息管理平臺”開始的,因此從一開始基於聚合讀取的模型改變到現在的所有使用者都需要更新最新tweet的訊息模型,需要許許多多的優化。這一改動主要在於三個方面:快取,MQ以及Memcached客戶端。

架構的變遷

7.eBay

lamp

8.凡客

.net,c,c++

· 日均 IP [周平均]
6990000

· 日均 PV [周平均]
62910000

· 日均 IP [月平均]
7650000

· 日均 PV [月平均]
68850000

· 日均 IP [三月平均]
7983000

· 日均 PV [三月平均]
71847000

9.一號店

Java, jsp, linux, mysql, postgresql, oracle

· 日均 IP [周平均]
2610000

· 日均 PV [周平均]
23490000

· 日均 IP [月平均]
2793000

· 日均 PV [月平均]
25137000

· 日均 IP [三月平均]
2583000

· 日均 PV [三月平均]
20664000

10.銀泰網

.net,jsp,java

11.噹噹

.net,php,jquery

CDN

CDN的全稱是Content Delivery Network,即內容分發網路。其基本思路是儘可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。通過在網路各 處放置節點伺服器所構成的在現有的網際網路基礎之上的一層智慧虛擬網路,CDN系統能夠實時地根據網路流量和各節點的連線、負載狀況以及到使用者的距離和響應 時間等綜合資訊將使用者的請求重新導向離使用者最近的服務節點上。其目的是使使用者可就近取得所需內容,解決 Internet網路擁擠的狀況,提高使用者訪問網站的響應速度。

1、大型網站架構設計圖

clip_image025

2、PlentyOfFish 網站架構

超過 3000 萬的日點選率

對於動態出站(outbound)的資料進行壓縮,這耗費了30%的CPU能力,但節省了頻寬資源

負載均衡採用 ServerIron (Conf Refer)(ServerIron 使用簡單,而且功能比 NLB 更豐富)

一共三臺 SQL Server,一臺作為主庫,另外兩臺只讀資料庫支撐查詢,大力氣優化 DB

3、YouTube 的架構

相當大的資料流量——每天有10億次下載以及6,5000次上傳

大部分程式碼都是 Python 開發的

Web 伺服器有部分是 Apache, 用 FastCGI 模式。對於視訊內容則用 Lighttpd 。(國內的豆瓣用的Lighttpd)

啟用了單獨的伺服器群組來承擔視訊壓力,並且針對 Cache 和 OS 做了部分優化,訪問量大的視訊放在CDN上,自己的只需承擔小部分訪問壓力

用 MySQL 儲存元資料--使用者資訊、視訊資訊什麼的。

業務層面的分割槽(在使用者名稱字或者 ID 上做文章,應用程式控制查詢機制)

4、Yahoo!社群架構

5、Amazon 的 Dynamo 架構

clip_image029

6、財幫子(caibangzi.com)網站架構

7、說說大型高併發高負載網站的系統架構(更新)