首先聲明,下面的內(nèi)容都是我個人根據(jù)一些工具形成的猜想。并不保證和現(xiàn)實中各大門戶網(wǎng)站所用的架構(gòu)一摸一樣,不過我認為八九不離十了。
新浪和搜狐在國內(nèi)的知名度可謂無人不知無人不曉。他們每天的點擊率都在千萬以上。這樣大的訪問量對于新浪和搜狐來說怎樣利用有限的資源讓網(wǎng)民獲得最快的速度成為首要的前提,畢竟現(xiàn)在網(wǎng)絡(luò)公司已經(jīng)離開了燒錢的階段,開始了良性發(fā)展,每一筆錢砸下去都需要一定回響才行的。另一方面,技術(shù)人員要絞盡腦汁,不能讓用戶老是無法訪問、或者訪問速度極慢。這樣就算有再好的編輯、再好的銷售,他們也很難將廣告位賣出去,等待他們的將是關(guān)門。當然這些情況都沒有發(fā)生,因為他們的技術(shù)人員都充分的利用了現(xiàn)有資源并將他們發(fā)揮到了極至。說到底就是用squid做web cache server,而apache在squid的后面提供真正的web服務(wù)。當然使用這樣的架構(gòu)必須要保證主頁上大部分都是靜態(tài)頁面。這就需要程序員的配合將頁面在反饋給客戶端之前將頁面全部轉(zhuǎn)換成靜態(tài)頁面。好了基本架構(gòu)就這樣,下面說說我怎么猜到的以及具體的架構(gòu):
法寶之一:nslookup
實戰(zhàn):
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,開始有人會想果然新浪財大氣粗啊。其實不然,繼續(xù)往下看:
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
細心的人可以發(fā)現(xiàn)了news這個頻道的ip數(shù)和首頁上一樣,而且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數(shù)要多于sina的IP數(shù),那么sohu上各個頻道用的服務(wù)器就要多于sina了?當然不能這么說,因為一臺服務(wù)器可以綁定多個IP,因此不能從IP數(shù)的多少來判斷用了多少服務(wù)器。
從上面這些實驗可以基本看出sina和sohu對于頻道等欄目都用了相同的技術(shù),即squid來監(jiān)聽這些IP的80端口,而真正的web server來監(jiān)聽另外一個端口。從用戶的感覺上來說不會有任何的區(qū)別,而相對于將web server直接和客戶端連在一起的方式,這樣的方式明顯的節(jié)省的帶寬和服務(wù)器。用戶訪問的速度感覺也會更快。
1. 難道就根據(jù)幾個域名的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試試看,訪問下來的結(jié)果應(yīng)該是如下圖所示:
由此可以證明sina是在dns中設(shè)置了很多ip來指向域名sqsh-19.sina.com.cn,而其他各種相同性質(zhì)的頻道都只是sqsh-19.sina.com.cn一個別名,用CNAME指定。dns的設(shè)置應(yīng)該是這樣的,然后server方面,通過squid 2.5.STABLE5(最新的穩(wěn)定版為STABLE6)來偵聽80端口。上面這些是根據(jù)一些信息分析而出的,應(yīng)該基本正確的。下面一些就是我的個人的猜想:
它的真正的web server也同樣是偵聽80端口,因為在squid配置文件中有一項是:
httpd_accel_port 80
如果你設(shè)成其他端口號(比如88)的話,那上圖的錯誤信息就會變成
While trying to retrieve the URL: http://61.172.201.19:88
工具2:nmap掃描程序:可以用來檢查服務(wù)器開了什么端口。
我現(xiàn)在用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打開的,這點剛才已經(jīng)驗證過了。而22端口是用來ssh遠程連接的,主要是sa用來遠程操作服務(wù)器用的安全性非常高的方法。
工具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,還設(shè)了過期時間為2分鐘。最后修改時間。這些都是要在編譯apache的時候載入的,特別是Last-Modified還需要小小的改一把源碼--至少我是這樣做的。
綜上所述
sina的架構(gòu)應(yīng)該是前面squid,按照現(xiàn)在的服務(wù)器2u,2g內(nèi)存一般每臺服務(wù)器至少可以跑4個squid2.5stable5. 這樣它16個ip就用了4臺服務(wù)器。后面一層是apache2.0.49應(yīng)該會用2臺。這2臺可能用的全是私有ip,通過前面的squid服務(wù)器在hosts文件中指定。具體的實現(xiàn)方法我會下次整理出我做實驗的文檔:)而apache的htdocs可能是有一個或2個磁盤陣列作nfs。apache mount nfs server的時候應(yīng)該是只讀的,然后另外還有服務(wù)器轉(zhuǎn)門用來做編輯器服務(wù)器,用來編輯人員更新文章。這臺服務(wù)器應(yīng)該對nfs server是具有可寫的權(quán)限。
----這就一套完整的sina所運用的方案,當然很多是靠猜測的,我沒有和sina的技術(shù)人員有過任何溝通(因為一個也不認識),否則我也就不會寫出來了。其他sohu,163應(yīng)該也有這樣的架構(gòu)。
最后聲明:這只是一些靜態(tài)頁面組成頻道的一個架構(gòu),sina還有很多其他服務(wù)器,什么下載,在線更新等不在這個架構(gòu)中。