SOHU門戶使用的一些技術(轉)


原文作者:鄒丹 "我在SOHU這幾年做的一些門戶級別的程序系統(C/C++開發)"

bserv:

用於高負載,高讀寫速度的單點和集合數據。內核爲BerkeleyDB,外殼爲UDP線程池。接口爲讀寫單點數據或者集合數據。單點數據就是Key->Value數據。集合數據就是有索引的數據,List->Keys->Values。比如一個班級所有成員,一個主貼所有回帖等等。 DBDS性能很高,每秒讀取>800個每秒,寫>300個每秒(志強xeon:2G*2,72Gscsi,Ram:2G)配合java接口,目前應用在ChinaRen所有項目中(ChinaRen校內,校友錄,社區等等)。是整個ChinaRen的核心數據服務,大概配備了50臺服務器。特點:高速,高請求量。用於各種數據的低成本存儲,解決數據庫無法實現超高速讀寫的問題。門戶級別的高速數據服務。

OnlineServer:

ChinaRen/SOHU小紙條系統核心核心爲3個小server系統:online2(在線系統業務邏輯),userv(用戶資料系統),cserv(LRU緩存) 這三個子系統都是UDP+線程池結構,單進程+多線程。配備java接口,apache_mod的json和xml接口。 online2包括了大部分業務邏輯,包括,上線,好友系統,紙條系統。 userv包括設置用戶各種屬性,信息。 cserv是個大的lru緩存,用於減小磁盤IO。可以放各種信息塊,包括用戶信息,好友,留言等。目前配備4臺服務器(DL380,xeon:3G*2,SCSI:146G raid,Ram:2G),用戶分佈到4臺服務器上,相互交互。服務器可以由1臺到2臺,到4臺,到8臺。底層存儲爲文件存儲(無數據庫),用reiserfs。配套系統: mod_online,兩個版本,apache和lighttpd版本,用於頁面上顯示蠟燭人。請求量巨大,目前用lighttpd版本的mod_online。放在sohu的squid前端機器上,運行在8080,大概8臺,每臺請求量大概500-800個每秒。蠟燭人在所有ChinaRen頁面有ID的地方顯示用戶是否在線。目前這套在線系統,作爲SOHUIM的內核原型。準備開發WEBIM系統,用戶所有SOHU矩陣用戶的聯絡。

apache_mod

cserv:

高速LRU緩存系統。內核是UDP+線程池+LRU結構(hash+PQueue)。用於存放各種數據塊,Key->Value結構。通過LRU方式提供給應用,可減小文件IO,磁盤IO等慢速操作。目前用於ChinaRen在線系統的用戶資料緩存。特點:高速讀寫,低成本。

ddap:

UDP+線程池,單進程,多線程的服務端程序原型,大部分程序由這個結構開始。性能爲8000-10000個請求每秒。

eserv:

訪問統計系統用於用戶訪問的次數和最後上線時間的存儲和讀寫。用於ChinaRen校友錄每個班級的訪問記錄。存儲爲文件存儲,並有同時寫入後備的bserv,用於備份和檢索。目前性能,每臺機器每秒50個記錄,100個讀每秒。能滿足校友錄巨大的用戶登錄記錄的需要。特點:無數據庫,純文件存儲,高速讀寫。低成本

logserver:

用於各種事件的日誌記錄核心爲ddap,UDP+線程池功能是分模塊記錄各種日誌。ChinaRen所有用戶服務,系統日誌,都記錄在logserver中。用於統計,查詢。寫入性能很好,每秒100個單臺機器。特點:高速高效,低成本,海量。

SessionServ:

session系統核心爲ddap,UDP+線程池用於在內存中存儲臨時數據。有get/put/del/inc等操作。廣泛的用於固定時間窗口的小數據存儲。比如過期,數據有效性檢測,應用同步等等。由於是全內存操作,所以速度很快,存取速度應該>1000個每秒。目前廣泛用與ChinaRen社區,校內,校友錄等業務當中。特點:高速高效,低成本,應用廣泛。

其他server:

MO_dispatcher:用於短信上行接口的的數據轉發,使用TCP。能高速大流量根據業務號碼分發到各個應用服務中。目前用於SOHU短信到ChinaRen各短信服務的轉發。 sync:用於靜態前端同步,分客戶端和服務端程序。客戶端通過TCP鏈接和服務端獲取需要同步的文件列表,並且通過TCP高速更新本地文件。此同步程序用於多客戶端,單服務端。比如一臺服務器生成靜態文件,同步這些文件到若干客戶前端去。特點:門戶級靜態內容服務器間同步,高效,高速,大流量。目前用於ChinaRen社區的靜態帖子。

總結一下:

門戶的核心服務,要求是高效率,高密度存取,海量數據,最好還是低成本。不要用數據庫,不要用java,不要用mswin。用C,用內存,用文件,用linux就對了。系列:

基於apache2的服務有很多,用於高請求量,快速顯示的地方。 1.mod_gen_verifyimg2:

用於顯示驗證碼,使用GD2,freetype。直接在apache端返回gif流,顯示隨機的字體,角度,顏色等等。用於ChinaRen各個需要驗證碼的頁面,請求量很大。 2.mod_ip2loc

用於apache端的IP->物理地址轉換,高速,高效。讀取數據文件到內部數據樹,高速檢索,獲得客戶端ip的物理地址。用於需要IP自動定位的產品,還有就是數據統計等。比如ChinaRen校內,每個客戶端請求都能獲得物理地址,用於應用的邏輯處理。 3.mod_pvserver2

ChinaRen社區帖子點擊的記錄和顯示。根據URL,得到帖子ID,通過UDP數據包,統計到bserv系統。並且把結果通過Cookie返回到客戶端。html直接用javascript顯示點擊數在帖子上。解決了點擊數量高效記錄,高效讀取和非動態頁面程序顯示的問題。 4.mod_online

用於ChinaRen頁面上的蠟燭人顯示。和onlineserver通訊,得到用戶在線狀態和其他狀態信息。請求量很大,每臺前端大概500-800個請求。 5.其他mod 還有一些認證的,訪問統計的,特種url過慮跳轉的,頁面key生成的,還有若干。特點:高速,密集超高請求量。前端分擔應用服務器壓力,高效。

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