主持人:
網(wǎng)上沖浪已經(jīng)成為網(wǎng)友們生活中必不可少的一部分,大家在網(wǎng)上網(wǎng)羅信息交流互動(dòng),網(wǎng)站的技術(shù)架構(gòu)決定著網(wǎng)站的運(yùn)營(yíng),目前主流的網(wǎng)站架構(gòu)包括以下三種,即以J2EE為首的Java傳統(tǒng)PHP架構(gòu),以及微軟的ASP.net,今天我們的訪(fǎng)談也將圍繞網(wǎng)站架構(gòu)的一些問(wèn)題展開(kāi)。MySpace聚友網(wǎng)是一個(gè)在線(xiàn)社區(qū),在這里可以結(jié)交更多的新朋友,MySpace選擇了PHP和ASP.net并存的架構(gòu),今天我們邀請(qǐng)了MySpace的凌聰先生與我們探討一下MySpace的架構(gòu)完成。
凌聰:
大家好!
主持人:
首先介紹一下MySpace在國(guó)內(nèi)發(fā)展的歷程。
凌聰:
MySpace是在07年4月份在美國(guó)8月服務(wù)器遷到中國(guó),除此之外我們還保持著跟美國(guó)用戶(hù)的互聯(lián)互通,MySpace目前的定位是一個(gè)泛社區(qū),音樂(lè)產(chǎn)品是我們的主要產(chǎn)品。也有游戲和微博客等。
主持人:
現(xiàn)在MySpace網(wǎng)站注冊(cè)用戶(hù)大概多少?
凌聰:
1200萬(wàn),活躍用戶(hù)600萬(wàn)左右。
主持人:
每天訪(fǎng)問(wèn)量大概是什么范圍?
凌聰:
2400萬(wàn)左右。
主持人:
這么大的訪(fǎng)問(wèn)對(duì)網(wǎng)站架構(gòu)肯定有很高的要求,MySpace找朋友版塊里,雖然有很多的圖片打開(kāi)速度很快,這個(gè)是怎么實(shí)現(xiàn)的呢?
凌聰:
找朋友版塊圖片很多,之前是用table做的,影響頁(yè)面加載速度,現(xiàn)在我們采用div和DBBT形式實(shí)現(xiàn),還有就是后置渲染,我們是框架完成以后用JS填充,這種效果是先切出框架再添進(jìn)去。
主持人:
在對(duì)MySpace有了初步了解之后下面一起討論一下網(wǎng)站的技術(shù)架構(gòu)問(wèn)題。前面已經(jīng)提到MySpace選擇的是PHP與ASP.net并存的架構(gòu),MySpace為什么要選擇這樣的架構(gòu)呢?
凌聰:
MySpace一開(kāi)始從美國(guó)遷過(guò)來(lái)的時(shí)候是.NET架構(gòu),它相對(duì)來(lái)說(shuō)性能比PHP稍微快一些。另外ASP.net能夠做一些并行框架。比如說(shuō)訪(fǎng)問(wèn)一個(gè)Home的時(shí)候可以并發(fā)的從不同的數(shù)據(jù)源獲取數(shù)據(jù)整合起來(lái),像目前myrebuild的框架,也就是制作一個(gè)實(shí)時(shí)的myrebuild的框架,在A(yíng)SP.net是很容易實(shí)現(xiàn)的,但是用PHP就需要制作中間件,這樣第一速度比較快,可以做分布式的框架,另外ASP.net可以比較容易集成自己語(yǔ)言的特性。現(xiàn)在來(lái)說(shuō),我們的緩存系統(tǒng)是我們自己build的,它也是保證我們網(wǎng)站性能很重要的一部分。傳統(tǒng)的memory cache都是C寫(xiě)的,但是我們的是用.NET寫(xiě)的,它可以集成C++的元素。現(xiàn)在這個(gè)架構(gòu)是擴(kuò)展性很高存儲(chǔ)性能比較高框架。PHP比較容易學(xué)開(kāi)發(fā)速度比較快,上手比較快,相對(duì)來(lái)說(shuō)開(kāi)發(fā)成本比較低,對(duì)于一些快速開(kāi)發(fā)應(yīng)用用PHP合適,所以我們兩種架構(gòu)并存。現(xiàn)在新開(kāi)發(fā)的項(xiàng)目一般用PHP開(kāi)發(fā),因?yàn)殚_(kāi)發(fā)速度相對(duì)快一些。
主持人:
在網(wǎng)站中不同的部分選擇不同的架構(gòu)嗎?
凌聰:
對(duì)。性能比較高的用ASP.net去做,比如home,blog,SNS核心模塊是用ASP.net做,比如音樂(lè)是用PHP做的,它們之間的通信由中間件來(lái)實(shí)現(xiàn)。
主持人:
這兩個(gè)會(huì)用不同的東西實(shí)現(xiàn)嗎?
凌聰:
現(xiàn)在A(yíng)SP.net主要在Windows上做的,PHP用linux做的。
主持人:
目前ASP.net用的是什么版本?
凌聰:
3.5SPE版本。
主持人:
您在使用ASP.net進(jìn)行網(wǎng)站開(kāi)發(fā)過(guò)程中有沒(méi)有遇到什么問(wèn)題或者困難,您是怎么解決的呢?
凌聰:
ASP.net的困難比較多,第一ASP.net因?yàn)樗且粋€(gè)編譯執(zhí)行的語(yǔ)言,這就很痛苦。比如今天發(fā)現(xiàn)某個(gè)字錯(cuò)了,要改這個(gè)字,會(huì)有一個(gè)比較麻煩的動(dòng)作,更改一個(gè)字的話(huà)頁(yè)面會(huì)出編譯,這會(huì)影響它的速度。另外ASP.net IDE很多人喜歡QBI代碼,很多人寫(xiě)到CS代碼里,結(jié)果改一個(gè)東西可能要編譯,編譯再部署的話(huà)會(huì)直接影響網(wǎng)站速度?,F(xiàn)在我們解決的方式是增長(zhǎng)了部署的流程,我們做了自動(dòng)化部署的腳本,是分批部署,三分之一機(jī)器下線(xiàn)部署,預(yù)熱,然后再上線(xiàn)?,F(xiàn)在是自動(dòng)化部署的過(guò)程,整個(gè)過(guò)程大概是20分鐘。美國(guó)那邊也是這樣的,它的機(jī)器更多,大概兩個(gè)小時(shí)部署完所有的機(jī)器,大概幾千臺(tái)機(jī)器。所以部署是一個(gè)很大的問(wèn)題,ASP.net和JAVA是一樣的,因?yàn)樗木幾g語(yǔ)言。PHP部署相當(dāng)快就沒(méi)有這個(gè)問(wèn)題。
另外,在并行開(kāi)發(fā)上ASP.net必須走一個(gè)build的過(guò)程,把代碼merger起來(lái)。我們做了一個(gè)自動(dòng)build腳本,開(kāi)發(fā)人員把代碼確定到TFS里面,由一個(gè)工程師從開(kāi)發(fā)源代碼服務(wù)器同步到部署的服務(wù)器,部署服務(wù)器做自動(dòng)編譯的腳步來(lái)自動(dòng)部署,這樣要做大量的工具開(kāi)發(fā),另外一個(gè)是要做非常多大量的部署腳本。
主持人:
目前還是有很多網(wǎng)友在用ASP.net進(jìn)行網(wǎng)站開(kāi)發(fā)。我們也希望您分享一些這方面的經(jīng)驗(yàn)讓大家可以借鑒一下。
凌聰:
我建議大家不要用ASP.net Sever control,ASP.net里面會(huì)有一些state數(shù)據(jù),數(shù)據(jù)量過(guò)大,這些數(shù)據(jù)會(huì)增加客戶(hù)端的傳輸量,所以我建議大家少用或者不用ASP.net Sever control。ASP.net MVC正在廢棄這個(gè)框架,這是很明智的。
MySpace的cashe系統(tǒng)還是比較先進(jìn)的,cashe系統(tǒng)主要分為三層,一層叫RELAY,RELAY是做一消息傳輸?shù)臋C(jī)制,比如要存儲(chǔ)某一類(lèi)型的數(shù)據(jù),首先會(huì)找到哪組服務(wù)器存儲(chǔ)這個(gè)數(shù)據(jù),它會(huì)把數(shù)據(jù)扔到這組服務(wù)器上。RELAY比如要做一個(gè)存儲(chǔ)的消息的傳送機(jī)制,把這個(gè)數(shù)據(jù)拿出來(lái),會(huì)在這組服務(wù)器挑一個(gè)節(jié)點(diǎn)把這個(gè)數(shù)據(jù)吐出來(lái)給你,如果存儲(chǔ)一個(gè)數(shù)據(jù)找到任何一個(gè)結(jié)點(diǎn),這個(gè)結(jié)點(diǎn)會(huì)做異布分發(fā)?,F(xiàn)在網(wǎng)站用的比如一個(gè)數(shù)據(jù)在一個(gè)單點(diǎn)的的話(huà),這個(gè)結(jié)點(diǎn)會(huì)從一個(gè)地方去拿,如果這個(gè)點(diǎn)down了就要從數(shù)據(jù)庫(kù)去讀取,我們現(xiàn)在的RELAY結(jié)構(gòu)做的是多點(diǎn)供應(yīng)的。而在cashe系統(tǒng)中, 消息傳遞的系統(tǒng)是很重要的,消息傳遞系統(tǒng)一個(gè)要支持類(lèi)型系統(tǒng)。
另外要支持分布式冗余存儲(chǔ),還有如果數(shù)據(jù)量大的話(huà)還要支持不同模式的分塊,我們支持MODE模式、cashe模式、renge模式分塊,如:我們按用戶(hù)ID分,比如0-1000萬(wàn)是一個(gè)區(qū),1-2千萬(wàn)是另一個(gè)區(qū)。有多種模式的算法,這是消息傳輸機(jī)制。
我們的框架還支持多種存儲(chǔ)components,我們下面一層就是存儲(chǔ),我們還有不同的數(shù)據(jù)可以存到不同的數(shù)據(jù)存儲(chǔ)區(qū),不同存儲(chǔ)區(qū)有性能的區(qū)別,比如我們有一個(gè)最快叫ImageMemory storage,支持的ops大概是66萬(wàn)次每秒,這時(shí)相當(dāng)快的。比它差一點(diǎn)的是28萬(wàn)次每秒。我們已經(jīng)引入了Memory components,現(xiàn)在做的是7萬(wàn)次ops每秒,我們可以按照不同的需求存儲(chǔ)到不同的存儲(chǔ)區(qū)域。比如我們可以最快的拿取用戶(hù)的基本信息,這個(gè)可能要求很快,我們會(huì)放到最快的存儲(chǔ)里。而其他的非重要信息可以存儲(chǔ)到速度差一些的存儲(chǔ)區(qū)里。我們的存儲(chǔ)組件多種多樣可以按照不同的需求做不同的存儲(chǔ)組件。
下一層叫計(jì)算Component,我的優(yōu)勢(shì)所在。我們可以在存儲(chǔ)結(jié)點(diǎn)上做計(jì)算,離存儲(chǔ)結(jié)點(diǎn)最近的地方做計(jì)算,這樣可以防止大量網(wǎng)絡(luò)消耗。很多第三方網(wǎng)站用的是把所有的數(shù)據(jù)吐出來(lái)做計(jì)算,這樣會(huì)帶來(lái)很多計(jì)算消耗。我們?cè)谏厦孀隽擞?jì)算組件可以把數(shù)據(jù)做整合,直接進(jìn)行數(shù)據(jù)過(guò)濾,這樣可以防止過(guò)多的數(shù)據(jù)傳輸?shù)酵饷?,減少網(wǎng)絡(luò)帶寬的消耗。這是我們一個(gè)比較出彩的部分。就是我們直接做矩形計(jì)算,因?yàn)榫徒?jì)算有很大變化,這個(gè)如果用C做的數(shù)據(jù)有很大的差異,如果用ASP.net做的話(huà)還是有能力的。
主持人:
我聽(tīng)您講的我理解的就是咱們做了一個(gè)過(guò)濾器對(duì)數(shù)據(jù)進(jìn)行不同的劃分,一方面節(jié)約了網(wǎng)絡(luò)的帶寬資源,另一方面哪些信息比較急可以先進(jìn)行發(fā)布或者存儲(chǔ)?
凌聰:
也不是這樣比如我做的過(guò)濾是一種計(jì)算,運(yùn)算是一種計(jì)算,計(jì)算組件這部分是負(fù)責(zé)要做一些實(shí)時(shí)的計(jì)算,比如說(shuō)我要計(jì)算我的好友在線(xiàn)人數(shù),就把好友ID直接傳進(jìn)來(lái),然后直接把存儲(chǔ)上計(jì)算出來(lái),不會(huì)像傳統(tǒng)的結(jié)構(gòu)首先把服務(wù)器上的數(shù)據(jù)全部拿出來(lái),然后在WEB服務(wù)器上做計(jì)算,這樣很浪費(fèi)帶寬資源。我們是直接在計(jì)算組件上做計(jì)算。另外myrebuilds框架,我們前面會(huì)把數(shù)據(jù)做分發(fā),客戶(hù)端組件會(huì)把這些數(shù)據(jù)并發(fā)的發(fā)到各個(gè)組件,數(shù)據(jù)采集完了做一個(gè)rebuilds的過(guò)程,然后把數(shù)量數(shù)據(jù)吐出來(lái)給用戶(hù)。這是三層,前面那層是消息傳遞層relay,有一層是存儲(chǔ)層,存儲(chǔ)層上面有一層計(jì)算組件是計(jì)算這些數(shù)據(jù)的。如果不需要對(duì)數(shù)據(jù)進(jìn)行計(jì)算只是簡(jiǎn)單存儲(chǔ)的話(huà),這組件就可以沒(méi)有。我們引進(jìn)的概念叫就近概念。
主持人:
現(xiàn)在有一種新技術(shù)叫AJAX技術(shù),能簡(jiǎn)單介紹一下嗎?
凌聰:
我們網(wǎng)站使用主要是強(qiáng)用戶(hù)交互上,比如發(fā)一個(gè)微博客,直接顯示在頁(yè)面上,這不需要做太多的頁(yè)面交互。因?yàn)檫@樣對(duì)用戶(hù)感受來(lái)說(shuō)很差,每次要刷頁(yè)面。另外是在帶寬的節(jié)省上,因?yàn)槊克⒁淮雾?yè)面帶來(lái)的問(wèn)題會(huì)增加很多傳輸量。
主持人:
AJAX技術(shù)主要實(shí)現(xiàn)什么?
凌聰:
實(shí)現(xiàn)頁(yè)面不刷新,主要目的是提高用戶(hù)體驗(yàn)度,以及可以節(jié)省帶寬。
主持人:
剛剛您已經(jīng)提到MySpace上面應(yīng)用了一些部分,除了這些部分之外AJAX應(yīng)用對(duì)咱們網(wǎng)站帶來(lái)了哪些實(shí)際應(yīng)用?用戶(hù)體驗(yàn)方面呢?
凌聰:
用戶(hù)會(huì)感覺(jué)到都在一個(gè)頁(yè)面上完成他的工作,對(duì)他的感受會(huì)好很多。比如說(shuō)我上傳一個(gè)文件,那個(gè)文件很大,可能一個(gè)圖片最大是5兆,如果1兆帶寬可用就是100K左右,要傳50秒,死等的話(huà)會(huì)有一個(gè)問(wèn)題,我們有一個(gè)圈不斷滾,這樣給大家一個(gè)直觀(guān)的感受,不斷告訴他上傳了多少。另外我們的加好友之類(lèi)的都是用AJAX去做的,這就是提高用戶(hù)的功能性還是比較直觀(guān)的。
主持人:
ASP.net框架前面已經(jīng)聊了很多了,您希望這個(gè)框架再有哪些方面的改進(jìn)嗎?
凌聰:
第一,現(xiàn)在A(yíng)SP.net第一次打開(kāi)速度還是很慢的,這個(gè)有待提高。第二,可以讓它先出來(lái),高亮的后面加都沒(méi)問(wèn)題,現(xiàn)在在2008上打開(kāi)一個(gè)頁(yè)面做開(kāi)發(fā)還是挺慢的。另外ASP.net原來(lái)Sever control的設(shè)計(jì)想法很好,實(shí)現(xiàn)起來(lái)很一般,我覺(jué)得這個(gè)框架可能考慮用其他東西替代,比如ASP.net MVC這個(gè)框架還是不錯(cuò)的。我們現(xiàn)在的框架是MOTOOLS的,最好能對(duì)這塊有支持。
主持人:
最后請(qǐng)凌聰先生給我們介紹一下MySpace網(wǎng)站技術(shù)架構(gòu)升級(jí)方面有哪些計(jì)劃?
凌聰:
第一,我們網(wǎng)站可能會(huì)引入云計(jì)算。云計(jì)算主要是做用戶(hù)數(shù)據(jù)的分析,其實(shí)用戶(hù)數(shù)據(jù)分析是一個(gè)金礦,但是這個(gè)金礦必須有好的工具去挖,用比較好的機(jī)制篩選出來(lái)。因?yàn)槲覀兙W(wǎng)站每天訪(fǎng)問(wèn)數(shù)據(jù)量挺大的,幾個(gè)T的數(shù)據(jù),怎么統(tǒng)計(jì)呢?可能是要有一個(gè)分布式計(jì)算的平臺(tái)。MySpace自己有一個(gè)分布計(jì)算的平臺(tái),我們正在看這個(gè)框架和另外一個(gè)do框架對(duì)分布式計(jì)算的程序?qū)懘a的難度以及可靠性。另外,做完云計(jì)算平臺(tái)之后我們可以把日志放進(jìn)去做一數(shù)據(jù)倉(cāng)庫(kù)然后做用戶(hù)分析,然后我們可以找出好友的親密度,這樣有利于我們做好友推薦。
做完這個(gè)東西之后我們利用這些東西做Feed的分析,F(xiàn)eed對(duì)我來(lái)說(shuō)很我可能是沒(méi)有用的。我們希望找到一個(gè)更智能的方法讓他找到他更想起要東西。比如可以通過(guò)他的點(diǎn)擊,比如博客或者玩音樂(lè)推他相關(guān)的東西,這樣可能更適合。數(shù)據(jù)分析包括用戶(hù)的缺省,包括用戶(hù)性等,所以用戶(hù)數(shù)據(jù)也是非常重要的事兒。
另外要發(fā)力用戶(hù)客戶(hù)端,現(xiàn)在手機(jī)用戶(hù)也很多,我們現(xiàn)在有一個(gè)聲色微博可以說(shuō)一句話(huà)發(fā)到語(yǔ)聊上面去,但是有的人是話(huà)癆,他喜歡說(shuō)很長(zhǎng),而移動(dòng)限制了300k,有些手機(jī)只支持50K,用戶(hù)覺(jué)得很不爽,300k還可以說(shuō)三分鐘,50k只能說(shuō)1分鐘,他就開(kāi)始抱怨覺(jué)得這個(gè)怎么傳這么少,這也沒(méi)有辦法,是彩信的限制,這也是我們?yōu)槭裁匆隹蛻?hù)端很重要的原因。
主持人:
為了讓網(wǎng)友們有更好的體驗(yàn),我們的技術(shù)人員盡心盡力在做開(kāi)發(fā)了。非常感謝凌聰先生與我們探討了這么多網(wǎng)站開(kāi)發(fā)方面的經(jīng)驗(yàn)和技術(shù),謝謝大家!


