洪強寧-關於豆瓣
系統架構圖
洪強寧:關於豆瓣的系統架構圖,首先我們在Web server上做個劃分,把網站內容分為動態內容和靜態內容。在豆瓣上所有的html都是動態內容,圖片都是靜態內容。分成兩個Web 服務可以做不同的調優。 對動態內容,我們用的是nginx和lighttpd的混合,nginx做負載的平衡,lighttpd通過SCGi 與application server相連,application server是基於 quixote這個框架寫的。
利用外部的資源
application server拿到用戶的請求,分析用戶的url,並且利用外部的資源,比如資料庫,組合成一個html,返回。從資料庫存取會比較慢,資料庫有大量的IO,我們使用cache,我們使用的是Memcached,這是一個分散式的記憶體的cache,比如你可以用很多機器,每個機器有兩個G的記憶體,我們自己開發了client端來使用它,另外如果用戶有搜尋請求,我們會用搜尋引擎。Xapian是一個C++寫的開源的搜尋引擎,我們通過Web service去訪問它。其他,我們還提供了另外的Web service接口回響用戶的請求,比如要訪問某個檔案。spread是我們最近加了一部分,用戶有的請求可以採用這樣的異步服務.
資料庫是這樣的,兩個MySQL做成一對,一個master ,一個 slave,根據套用劃分,使得load不會太高。這個圖上»¬的是兩對,實際上有三對。還有一個slave,一方面作為備份,一方面用作數據挖掘,因為不能對線上的數據做直接操作。
靜態部分
對於靜態部分,我們也是用nginx,你注意到豆瓣現在有日記的貼圖功能系統,用戶可能上傳很多圖片,我們採用的方案是用了mogile FS ,這是一個分散式的檔案系統,同時可以做備份,保持高可用性,可以提高很大的IO。關於application server,它都是用Python寫的。我們是用的MVC方式,Controller我們用的是quixote ,它接受用戶的請求,根據這個URL去找到Model的某個具體的函式來執行,它是一個dispatcher,當中會判斷用戶的許可權等。然後再傳給View,View根據模版進行渲染,形成網頁。View的模版,我們以前是用的是PTL,PTL很高效,最近引用了mako,這是一個比較現代的開源的模版,用它寫出的代碼比較好維護,比PTL好維護一些.。同時,在使用mako的同時,我們的工程師做了很多加速的工作,現在mako的代碼有很多是豆瓣的人寫的。你如果注意過Python的Web開發框架的話,你會發現Python的有三個比較著名的框架,Django,Pylons,TurboGears,Pylons默認的模版就是Mako。
洪強寧-研討會紀實
“中國網際網路的OpenAPI”研討會紀實
洪強寧:今天OpenAPI成為熱門話題其實可以分兩端看。一端是開發者,就像剛才黃晶提到的,程式設計師常常通過自己編寫的軟體去網頁上獲取內容,每當網頁作出調整的時候,程式設計師編寫的代碼就需要進行相應的調整,通常還需要對文本進行分析,剝離那些並不需要的標籤,這讓開發者常常覺得很不愉快。另外一端是平台。今天的網際網路平台和以前的不一樣,通常這些網站都需要與合作夥伴進行數據交換。以豆瓣網為例,我們談第一家合作夥伴的時候,為對方專門開發了一套數據訪問的接口,隨後不久,另外一家合作夥伴也加入了合作的陣營當中,我們不得不選擇再重新開發一套數據訪問的接口,但是等到第三家合作夥伴出現的時候,我們選擇了將訪問的標準統一起來,這也為未來網站平台的發展提供了良好的先決條件。因此開放API對於個人用戶和企業用戶來說,是一個雙贏,我們沒有理由不去開放它。
洪強寧:其實OpenAPI給豆瓣帶來了非常直接的好處,比較明顯的就是帶來了數量規模可觀的用戶群體。這一點從最早開放的豆瓣秀就可以看出來,很多人原來並不知道豆瓣這個網站,但不少我們用戶在他們的部落格上放置了豆瓣秀的Widget,用戶覺得有意思,很快就過來註冊了。這對於一個網際網路公司獲取用戶的途徑來說,明顯是一種新的多元化。除了上述這種個人行為之外,通過OpenAPI提供商業合作的模式,也給豆瓣帶來了可觀的收益。就像剛才蔣濤提到的,通過開放API,很多原來我們的一些套用開發計畫,在產品開發的優先權當中排名很低,以至於一年時間過去之後,它仍然擺在原來的位置。這時候,通過開放API的這種形式,一旦用戶覺得這件事情非常有意義,我們就會鼓勵他們協助豆瓣來完成這個產品的開發。同時,通過對幫助我們開發Widget的用戶進行推廣,從而達到雙贏的目的。