豆瓣的技術概要

1. Web網站一般會有很多對IO的操作,比如對數據庫的訪問,對硬盤的訪問響應用戶的請求,80%,90%你的時間都花在IO上,語言的速度,相對而言,不是那麼重要。

 

2. 在豆瓣上所有的html都是動態內容,圖片都是靜態內容。分成兩個Web 服務可以做不同的調優。對動態內容,我們用的是nginx和lighttpd的混合,nginx做負載的平衡,lighttpd通過 SCGi 與application server相連,application server是基於 quixote這個框架寫的。

 

3. application server拿到用戶的請求,分析用戶的url,並且利用外部的資源,比如數據庫,組合成一個html,返回。從數據庫存取會比較慢,數據庫有大量的 IO,我們使用cache,我們使用的是Memcached,這是一個分佈式的內存的cache,比如你可以用很多機器,每個機器有兩個G的內存,我們自己開發了client端來使用它,另外如果用戶有搜索請求,我們會用搜索引擎。Xapian是一個C++寫的開源的搜索引擎,我們通過Web service去訪問它。其他,我們還提供了另外的Web service接口響應用戶的請求,比如要訪問某個文件。spread是我們最近加了一部分,用戶有的請求可以採用這樣的異步服務。

 

4. 數據庫是這樣的,兩個MySQL做成一對,一個master ,一個 slave,根據應用劃分,使得load不會太高。這個圖上»¬的是兩對,實際上有三對。還有一個slave,一方面作爲備份,一方面用作數據挖掘,因爲不能對線上的數據做直接操作。

 

5. 對於靜態部分,我們也是用nginx,你注意到豆瓣現在有日記的貼圖功能系統,用戶可能上傳很多圖片,我們採用的方案是用了mogile FS ,這是一個分佈式的文件系統,同時可以做備份,保持高可用性,可以提高很大的IO。

 

6. 關於application server,它都是用Python寫的。我們是用的MVC方式,Controller我們用的是quixote ,它接受用戶的請求,根據這個URL去找到Model的某個具體的函數來執行,它是一個dispatcher,當中會判斷用戶的權限等。然後再傳給 View,View根據模版進行渲染,形成網頁。View的模版,我們以前是用的是PTL,PTL很高效,最近引用了mako,這是一個比較現代的開源的模版,用它寫出的代碼比較好維護,比PTL好維護一些.。同時,在使用mako的同時,我們的工程師做了很多加速的工作,現在mako的代碼有很多是豆瓣的人寫的。

 

7. 與數據庫進行鏈接,我們一個很輕量級的與數據庫進行鏈接,這也是一個開源項目,SQL Farm Manager。這個Web service,豆瓣中有很多用的都是Web service。

 

8. Web2.0用戶的反覆的操作非常多,你需要一個非常流暢的體現。這需要一些技術來實現,比如Ajax;豆瓣花了很多錢很多精力,來提高性能,比如買好的機器,使用Gentoo Linux,爲什麼使用Gentoo Linux,因爲它方便調優。還有,大量的使用cache。在數據庫調優方面,我們也花了很大的精力。另一方面,Web 2,0是用戶提供數據的,用戶有很多寫操作。這樣很多1.0優化方法在2.0中行不通。豆瓣在數據庫上用的是分庫的方式。除此之外我們還嘗試了一些其他的方法。

 

9. 豆瓣與天涯這樣的BBS不同還在於,它首先有一個物的概念,比如書,音樂,和電影。

 

10. 豆瓣更關心的是人羣,就是對同一話題和事物有興趣的人羣,而不是帖子,這與傳統的BBS確實有一些區別。

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