PlentyOfFish.com .NET網站的又一傳奇

PlentyOfFish(以下簡稱POF)是一家在美國廣受歡迎的婚介交友網站,平均每月有4千5百萬的訪問者,每天有3千萬的訪問量(這是前一段時間的數據了),但你萬萬想不到的是,這個被估值$1000000000的網站卻只有一個人每天只幹兩小時活。

POF對網友是100%免費的,所有的收入來自於Google廣告點擊,不像中國有的婚介交友網站廣告紛亂,POF只有一個廣告通欄,此外沒有任何彈出廣告,感覺非常的簡潔。 它的成功的關鍵因素可能就是在基本功能方面能很符合用戶的需要,在UE方面做的也比較貼心,同時也讓用戶能夠坦然接受這個免費網站的UI的醜陋和服務的不穩定性,而更爲願意通過這個平臺來發布一些內容,share一些個人圖片,通過這個網站來找靚妞或者帥哥dating了。

我們先暫且不談他在用戶體驗上是如何勝出的,光是系統架構上就值得我們好好體味一下了,畢竟一個人花那麼少點時間就可以維護如此龐大的系統,由此可見其架構是如此的簡單、靈活、高效。那我們就簡單來分析他的架構吧。

  1. 用Microsoft Windows操作系統作爲服務器
    該網站採用的是Windows x64 Server 2003。採用Windows的原因是並不是站長認爲Windows適合POF,而是因爲站長本人建站時候的技術很差,完全不會使用Linux和Unix。他辦這個網站的初衷其實是學習ASP。也因爲如此,整個網站的標準就是簡單、簡單、再簡單。對於大流量負載均衡的處理,站長目前沒有使用Windows 的負載均衡Network Load Balancing (NLB),他認爲NLB不能保持sessions狀態。對於不能保持sessions狀態,倒也可以存儲session狀態到數據庫,或者共享文件系統。8-12個NLB服務器可以共同放入一個farm,而且farm的數量也是沒有限制的。然後將一個 DNS輪轉調度策略(round-robin scheme)用在farm之間。其實這樣的架構,也曾經一度被用在POF——總計70個前端Web服務器(front end web servers),可以支持30萬人的併發訪問。NLB也是一個不錯的選擇。但是這樣的軟件解決方案顯得有點貴,而且很麻煩,最終站長選擇了硬件來完成負載均衡任務。
  2. 使用ASP.NET技術
    ASP.NET中的緩存功能完全沒有啓用。因爲該網站的動態特性,往往還沒等緩存儲存,數據就已經改變或消失了。另外,該站點也沒有用ASP.NET開發什麼組件,所有的組件都是現成的,一切都以簡單出發。
  3. 使用IIS作爲Web容器
    由於IIS限制了最大64000的連接數,所以POF不得不添加負載均衡器來處理爲數衆多的併發連接。站長曾經考慮過添加第二IP,並採用輪轉調度(Round-Robin)來解決訪問量過大的問題,但是這樣太過複雜,有悖於一個人的簡單管理,最後被放棄了。其實用多個Web服務器就可以簡單解決。
  4. 用Akamai CDN來緩存網頁
    該站點部署了Akamai CDN(網頁緩存加速),每天處理大約1億幅圖片的緩存加速。CDN的原理是將你站點部分的內容,分發到CDN服務商的服務器上,因爲CDN服務商廣泛分佈的服務器可以更加接近最終用戶的地域,這樣速度就會更快。假如你當前的POF頁面有8幅圖片,每幅圖片的下載需要100毫秒,那麼光下載這些圖片就需要花上一秒鐘。所以分配這些圖片到離用戶更近的區域是非常必要的,而且CDN也一定程度緩解了不同網絡服務商之間的線路差異。當然,也不是所有的圖片都採用了CDN,一些小於2KB的圖片還是緩存於本地內存。可能因爲部署了CDN,POF雖然是國外網站,但速度卻非常快,與國內網站無二。有關CDN技術,可以參考http://baike.baidu.com/view/21895.htm
  5. 用Foundry ServerIron 來做負載均衡
    POF採用了網捷網絡公司的Web交換器ServerIron,ServerIron 能夠有效地處理超過 16,000,000個併發連接,而且能夠改善服務器負載均衡和緩衝轉換。正如上文所述,最終站長放棄了NLB而採用了ServerIron 負載均衡,經過詳細計算之後,他發現部署ServerIron要比NLB便宜。其實也不只是POF,很多大網站都採用ServerIron來處理TCP 連接pooling和bot自動監察。ServerIron除了負載均衡還能做很多事情,因此還是值得的考慮的。
  6. 數據庫優化
    3臺SQL Server,採用master-slave架構,兩臺負責read操作,master那臺負責寫操作。這個和myspace早期的後臺數據庫架構是一樣,看來這種架構很流行嘛。POF 有一個主要的數據庫,兩個搜索數據庫。監測使用任務管理器來完成。過去,有些問題會將數據庫堵塞,其實這都是數據庫自己的問題,好在POF沒用.net的library,找出問題相對容易一些。不過假如你使用了framework的很多層級,找出問題就可能很困難了。對於POF而言,數據庫不僅僅是不出問題,還需要穩定和快速。由於POF網站的動態特性,基本用不到緩存,所以站長幾年來花了很大功夫,在很多細節上優化了數據庫,讓數據庫的相應更加迅速。
  7. Memory和CPU
    把最近常使用的圖片直接放在內存中,所以內存會那麼大;CPU配置也挺好,gzip是相當耗費CPU計算的。

    Markus說他碰到問題基本上是IO操作方面的瓶頸,很少是被.Net block住。Markus在Session,Farm,以及數據庫反範式等很多方面都有很不錯的經驗,很值得我們學習和借鑑,更多的細節大家可以參考後面的鏈接的幾篇文章。

  8. 壓縮
    所有的request數據都使用了gzip壓縮,大概耗費了30%的CPU,但是降低了帶寬成本。歐美的帶寬不便宜。

 

中國的經濟環境持續向好,所以很多公司的IT部門都得到了更多的預算,但這些預算被合理的使用了嗎?這些預算往往被用來採購更好的服務器硬件,更新的操作系統和數據庫軟件,還有各式各樣的行業應用。倒不是說這些部署不好,只是說我們的IT部署一定要以實用爲出發點,少做一些可有可無的投資。我們要多向POF學習,其實穩定、快速、便捷才是制勝的關鍵。正如POF站長一再強調的簡單哲學,所有複雜的東西都儘量不去使用。


雖然站長一開始的技術一般,但是隨着建站時間的加長,他現在也已經是一個網站架構專家,他花了很多力氣來優化數據庫和維護系統,而且他也採用了CDN來加快不同地域的用戶訪問網站空間。不過其實該網站的搭建可以更加合理,比如可以採用S3來外包其圖片存儲,採用更輕質化的操作系統或者Web服務器等等。這些年來,類似於這樣的建議非常多,但是站長還是堅持了他的簡單策略,而且也拒絕對主頁面進行美工優化,因爲他認爲多餘的工作只會引來他人反感,實用纔是關鍵。可見,保持簡單性,和持續勤勞的維護是服務器運行良好的法寶。

相信我們可以從POF上學習的東西還有很多,畢竟該網站以一己之力,達到了史無前例的高度,淨利潤竟然逼近了500多人的大型IT網站。POF的成功必然有它的深刻理由,不僅是網站的整體的服務器和軟件架構、很多細節的處理也同樣值得我們借鑑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章