http://blog.csdn.net/starxu85/archive/2008/02/28/2126249.aspx 首先聲明,下面的內容都是我個人根據一些工具形成的猜想。並不保證和現實中各大門戶網站所用的架構一摸一樣,不過我認爲八九不離十了。 網易、新浪和搜狐在國內的知名 度可謂無人不知無人不曉。他們每天的點擊率都在千萬以上。這樣大的訪問量對於網易、搜狐等來說怎樣利用有限的資源讓網民獲得最快的速度成爲首要的前提,畢 竟現在網絡公司已經離開了燒錢的階段,開始了良性發展,每一筆錢砸下去都需要一定迴響才行的。另一方面,技術人員要絞盡腦汁,不能讓用戶老是無法訪問、或 者訪問速度極慢。這樣就算有再好的編輯、再好的銷售,他們也很難將廣告位賣出去,等待他們的將是關門。當然這些情況都沒有發生,因爲他們的技術人員都充分 的利用了現有資源並將他們發揮到了極至。說到底就是用squid做web cache server,而apache在squid的後面提供真正的web服務。當然使用這樣的架構必須要保證主頁上大部分都是靜態頁面。這就需要程序員的配合將頁面在反饋給客戶端之前將頁面全部轉換成靜態頁面。好了基本架構就這樣,下面說說我怎麼猜到的以及具體的架構: 法寶之一:nslookup 實戰: nslookup www.sina.com.cn Server: ns-px.online.sh.cn Address: 202.96.209.5 Non-authoritative answer: Name: taurus.sina.com.cn Addresses: 61.172.201.230, 61.172.201.231, 61.172.201.232, 61.172.201.233 61.172.201.221, 61.172.201.222, 61.172.201.223, 61.172.201.224, 61.172.201.225 61.172.201.226, 61.172.201.227, 61.172.201.228, 61.172.201.229 Aliases: www.sina.com.cn, jupiter.sina.com.cn 這裏可以看到新浪在首頁上用到了那麼多IP,開始有人會想果然新浪財大氣粗啊。其實不然,繼續往下看: nslookup news.sina.com.cn Server: ns-px.online.sh.cn Address: 202.96.209.5 Non-authoritative answer: Name: taurus.sina.com.cn Addresses: 61.172.201.228, 61.172.201.229, 61.172.201.230, 61.172.201.231 61.172.201.232, 61.172.201.233, 61.172.201.221, 61.172.201.222, 61.172.201.223 61.172.201.224, 61.172.201.225, 61.172.201.226, 61.172.201.227 Aliases: news.sina.com.cn, jupiter.sina.com.cn 細心的人可以發現了news這個頻道的ip數和首頁上一樣,而且IP也完全一樣。也就是這些IP在sina的DNS上的名字都叫taurus.sina.com.cn,那些IP都是這個域的A記錄。而news,sports,jczs.news。。。都是CNAME記錄。用DNS來做自動輪詢。還不信,再來一個,就體育頻道好了: nslookup sports.sina.com.cn Server: ns-px.online.sh.cn Address: 202.96.209.5 Non-authoritative answer: Name: taurus.sina.com.cn Addresses: 61.172.201.222, 61.172.201.223, 61.172.201.224, 61.172.201.225 61.172.201.226, 61.172.201.227, 61.172.201.228, 61.172.201.229, 61.172.201.230 61.172.201.231, 61.172.201.232, 61.172.201.233, 61.172.201.221 Aliases: sports.sina.com.cn, jupiter.sina.com.cn 其他的可以自己試。好了再來看看sohu的情況: nslookup www.sohu.com Server: ns-px.online.sh.cn Address: 202.96.209.5 Non-authoritative answer: Name: pagegrp1.sohu.com Addresses: 61.135.132.172, 61.135.132.173, 61.135.132.176, 61.135.133.109 61.135.145.47, 61.135.150.65, 61.135.150.67, 61.135.150.69, 61.135.150.74 61.135.150.75, 61.135.150.145, 61.135.131.73, 61.135.131.91, 61.135.131.180 61.135.131.182, 61.135.131.183, 61.135.132.65, 61.135.132.80 Aliases: www.sohu.com -------------------------------------------- nslookup news.sohu.com Server: ns-px.online.sh.cn Address: 202.96.209.5 Non-authoritative answer: Name: pagegrp1.sohu.com Addresses: 61.135.150.145, 61.135.131.73, 61.135.131.91, 61.135.131.180 61.135.131.182, 61.135.131.183, 61.135.132.65, 61.135.132.80, 61.135.132.172 61.135.132.173, 61.135.132.176, 61.135.133.109, 61.135.145.47, 61.135.150.65 61.135.150.67, 61.135.150.69, 61.135.150.74, 61.135.150.75 Aliases: news.sohu.com 情況和sina一樣,只是從表面來看sohu的IP數要多於sina的IP數,那麼sohu上各個頻道用的服務器就要多於sina了?當然不能這麼說,因爲一臺服務器可以綁定多個IP,因此不能從IP數的多少來判斷用了多少服務器。 從上面這些實驗可以基本看出sina和sohu對於頻道等欄目都用了相同的技術,即squid來監聽這些IP的80端口,而真正的web server來監聽另外一個端口。從用戶的感覺上來說不會有任何的區別,而相對於將web server直接和客戶端連在一起的方式,這樣的方式明顯的節省的帶寬和服務器。用戶訪問的速度感覺也會更快。 1. 難道就根據幾個域名的ip相同就可以證明他們是使用squid的嘛? 當然不是,前面都只是推測。下面纔是真正的證實我上面的猜測。先nslookup一把sina的體育頻道。 nslookup sports.sina.com.cn Server: ns1.china.com Address: 61.151.243.136 Non-authoritative answer: Name: taurus.sina.com.cn Addresses:61.172.201.231, 61.172.201.232, 61.172.201.233, 61.172.201.9 61.172.201.10, 61.172.201.11, 61.172.201.12, 61.172.201.13, 61.172.201.14 61.172.201.15, 61.172.201.16, 61.172.201.17, 61.172.201.227, 61.172.201.228 61.172.201.229, 61.172.201.230 Aliases: sports.sina.com.cn, jupiter.sina.com.cn 然後直接訪問這些ip中的任意一個ip試試看,訪問下來的結果應該是如下圖所示: CDN hspace=0 src="http://61.129.102.61:808/showimg.php?iid=13" align=baseline border=0> 由此可以證明sina是在DNS中設置了很多ip來指向域名sqsh-19.sina.com.cn,而其他各種相同性質的頻道都只是sqsh-19.sina.com.cn一個別名,用CNAME指定。DNS的設置應該是這樣的,然後server方面,通過squid 2.5.STABLE5(最新的穩定版爲STABLE6)來偵聽80端口。上面這些是根據一些信息分析而出的,應該基本正確的。下面一些就是我的個人的猜想: 它的真正的web server也同樣是偵聽80端口,因爲在squid配置文件中有一項是: httpd_accel_port 80 如果你設成其他端口號(比如88)的話,那上圖的錯誤信息就會變成 While trying to retrieve the URL: http://61.172.201.19:88 工具2:nmap掃描程序:可以用來檢查服務器開了什麼端口。 我現在用nmap來掃描sina的一個ip:61.172.201.19來進行分析 bash-2.05$ nmap 61.172.201.19 Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2004-07-30 13:31 GMT Interesting ports on 61.172.201.19: (The 1657 ports scanned but not shown below are in state: filtered) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http Nmap run completed -- 1 IP address (1 host up) scanned in 73.191 seconds 可以看到他對外只開了2個端口,80端口就是剛纔我們說的squid打開的,這點剛纔已經驗證過了。而22端口是用來ssh遠程連接的,主要是sa用來遠程操作服務器用的安全性非常高的方法。 工具3:lynx或者其他可以讀取http頭文件的工具及小程序: 直接看例子比較好理解: HTTP/1.0 200 OK Date: Fri, 30 Jul 2004 05:49:47 GMT Server: Apache/2.0.49 (Unix) Last-Modified: Fri, 30 Jul 2004 05:48:16 GMT Accept-Ranges: bytes Vary: Accept-Encoding Cache-Control: max-age=60 Expires: Fri, 30 Jul 2004 05:50:47 GMT Content-Length: 180747 Content-Type: text/html Age: 37 X-Cache: HIT from sqsh-230.sina.com.cn Connection: close 上面是sina的http頭的反饋信息。裏面有很多有價值的東東哦:)譬如,它後面的 apache是用2.0.49,還設了過期時間爲2分鐘。最後修改時間。這些都是要在編譯apache的時候載入的,特別是Last-Modified還 需要小小的改一把源碼--至少我是這樣做的。 綜上所述 sina的架構應該是前面squid,按照現在的服務器2u,2g內存一般每臺服務器至少可以跑4個squid2.5stable5. 這樣它16個ip就用了4臺服務器。後面一層是apache2.0.49應該會用2臺。這2臺可能用的全是私有ip,通過前面的squid服 務器在hosts文件中指定。具體的實現方法我會下次整理出我做實驗的文檔:)而apache的htdocs可能是有一個或2個磁盤陣列作nfs。 apache mount nfs server的時候應該是隻讀的,然後另外還有服務器轉門用來做編輯器服務器,用來編輯人員更新文章。這臺服務器應該對nfs server是具有可寫的權限。 ----這就一套完整的sina所運用的方案,當然很多是靠猜測的,我沒有和sina的技術人員有過任何溝通(因爲一個也不認識),否則我也就不會寫出來了。其他sohu,163應該也有這樣的架構。 最後聲明:這只是一些靜態頁面組成頻道的一個架構,sina還有很多其他服務器,什麼下載,在線更新等不在這個架構中。 |
1、 新浪 新浪採用了ChinaCache做的CDN系統,ChinaCache在全國分佈了四十多個點,同時採用基於動態dns分配的全球服務器負載均衡技術。 從新浪的站點結構可以看出: Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: libra.sina.com.cn Addresses: 61.135.152.71, 61.135.152.72, 61.135.152.73, 61.135.152.74 61.135.152.75, 61.135.152.76, 61.135.153.181, 61.135.153.182, 61.135.53.183, 61.135.153.184, 61.135.152.65, 61.135.152.66, 61.135.152.67, 61.135.12.68, 61.135.152.69, 61.135.152.70 Aliases: www.sina.com.cn, jupiter.sina.com.cn 在北京地區ChinaCache將www.sina.com.cn的網址解析到libra.sina.com.cn,然後libra.sina.com.cn做了dns負載均衡,將libra.sina.com.cn解析到61.135.152.71等16個ip上,這16個ip分佈在北京的多臺前臺緩存服務器上,使用squid做前臺緩存。如果是在其它地區訪問www.sina.com.cn可能解析到本地相應的服務器,例如pavo.sina.com.cn,然後pavo又對應了很多做了squid的ip。這樣就實現了在不同地區訪問自動轉到最近的服務器訪問,達到加快訪問速度的效果。 我們再看一個新浪其它頻道是指到哪裏的: > news.sina.com.cn Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: libra.sina.com.cn Addresses: 61.135.152.65, 61.135.152.66, 61.135.152.67, 61.135.152.68 61.135.152.69, 61.135.152.70, 61.135.152.71, 61.135.152.72, 61.135.152.73 61.135.153.178, 61.135.153.179, 61.135.153.180, 61.135.153.181, 61.135.153.182 61.135.153.183, 61.135.153.184 Aliases: news.sina.com.cn, jupiter.sina.com.cn 可以看出,各個頻道的前臺緩存集羣與www.sina.com.cn的前臺緩存集羣是相同的。 2、 搜狐 Sohu與新浪的原理差不多,下面是nslookup的結果: Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: pagegrp1.sohu.com Addresses: 61.135.132.172, 61.135.132.173, 61.135.132.176, 61.135.133.109 61.135.145.47, 61.135.150.65, 61.135.150.67, 61.135.150.69, 61.135.150.74 61.135.150.75, 61.135.150.113, 61.135.150.145, 61.135.131.73, 61.135.131.91 61.135.131.180, 61.135.131.182, 61.135.131.183, 61.135.132.65, 61.135. 132.80 Aliases: www.sohu.com 只不過libra.sina.com.cn換成了pagegrp1.sohu.com 我們再來看一下sohu的頻道: > news.sohu.com Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: pagegrp1.sohu.com Addresses: 61.135.145.47, 61.135.150.65, 61.135.150.67, 61.135.150.69 61.135.150.74, 61.135.150.75, 61.135.150.113, 61.135.150.145, 61.135.131.73 61.135.131.91, 61.135.131.180, 61.135.131.182, 61.135.131.183, 61.135.132.65 61.135.132.80, 61.135.132.172, 61.135.132.173, 61.135.132.176, 61.135.133.109 Aliases: news.sohu.com 同新浪相同,用的是同樣的服務器羣,這可能是因爲他們用的都是ChinaCache的服務吧,不過sohu的名字起的有點土,pagegrp1,沒有libra,pavo好聽,這名字聽起來有點像法語,比較浪漫。 3、 網易 網易似乎沒用ChinaCache的服務,下面是nslookup結果: Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: www.163.com Addresses: 202.106.168.103, 202.106.168.104, 202.106.168.109, 202.106.168.121 202.108.36.153, 202.108.36.155, 202.108.36.156, 202.108.36.167, 202.108.36.172 202.108.36.196 直接在www.163.com 這個域名上做了dns負載均衡。這樣的話就要求服務器必須放的非常靠近主節點,才能保證各地的用戶訪問的速度。 但163不同的頻道是放在不同的緩存集羣上的,這與sina,sohu有些不同,等於sina,sohu是按照地區劃分服務器集羣,而網易按照頻道劃分服務器集羣。 > 163.com Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: 163.com Addresses: 202.108.36.205, 202.108.36.206, 202.108.36.207, 202.108.36.201 202.108.36.202, 202.108.36.203, 202.108.36.204 顯然,這和www.163.com不是一個集羣,我們再來試一個: > sports.163.com Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: channel.cache.163.com Addresses: 202.108.36.136, 202.108.36.208, 202.108.36.209, 202.108.36.210 202.108.36.211, 202.108.36.212, 202.108.36.213 Aliases: sports.163.com 可以看出,和上面的集羣也是不同的。 4、 百度 百度的前臺服務器就不是很多了: Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: www.baidu.com Addresses: 202.108.250.249, 202.108.249.134
> baidu.com Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: baidu.com Address: 202.108.250.228
> mp3.baidu.com Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: mp3.baidu.com Address: 202.108.249.131 只有www.baidu.com做了兩臺服務器的集羣,頻道都用了一臺服務器做前臺
5、 一搜 > yisou.com Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: yisou.com Addresses: 202.165.102.114, 202.43.217.14, 202.43.217.15, 202.43.217.16 202.43.217.17, 202.165.102.111, 202.165.102.112, 202.165.102.113
Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: www.yisou.com Addresses: 202.43.217.17, 202.165.102.111, 202.165.102.112, 202.165.102.113 202.165.102.114, 202.43.217.14, 202.43.217.15, 202.43.217.16
> mp3.yisou.com Server: UnKnown Address: 192.168.1.254
Non-authoritative answer: Name: www.yisou.com Addresses: 202.165.102.113, 202.165.102.114, 202.43.217.14, 202.43.217.15 202.43.217.16, 202.43.217.17, 202.165.102.111, 22.165.102.112 Aliases: mp3.yisou.com 前臺做了8臺服務器的緩存集羣,www.yisou.com和 yisou.com以及mp3.yisou.com是用的同一個集羣。
通過前面的分析我們可以得到一個結論:sina和sohu使用了CDN與GSBL與dns負載均衡技術,每個地區一組前臺服務器羣,網易,百度使用了dns負載均衡技術,每個頻道一組前臺服務器,一搜使用了dns負載技術,所有頻道共用一組前臺服務器集羣。 |