原文地址:http://java.sun.com/developer/technicalArticles/WebServices/become/?feed=JSC
1 Become.com準備開(kāi)發(fā)他們的第二代搜索引擎。他們曾經(jīng)花了一年的時(shí)間開(kāi)發(fā)了一個(gè)C++版本的web crawler ,但是有明顯的內存和線(xiàn)程問(wèn)題。
2 現在他們決定用java重新開(kāi)發(fā)這個(gè)引擎。兩個(gè)開(kāi)發(fā)者,花了3個(gè)月,就構建了一個(gè)原型Crawler A。使用Java的網(wǎng)絡(luò )庫,多線(xiàn)程框架和RMI。雖然有一些內存和線(xiàn)程問(wèn)題,但是性能仍然讓人滿(mǎn)意。
3 接下來(lái)他們開(kāi)發(fā)了下一個(gè)版本Crawer B。其中取數據器(爬蟲(chóng))使用Java,而控制器部分用C++實(shí)現。取數據部分負責I/O部分。采集,解析和分析web頁(yè)的內容,從中提取出鏈接并發(fā)送給控制器??刂破髫撠煿芾頂祿Y構和把數據存儲到磁盤(pán)。多個(gè)取數據器和控制器通信,但是彼此間沒(méi)有通信。
兩個(gè)版本爬蟲(chóng)都是用純java寫(xiě)的,沒(méi)有用JNI,兩個(gè)版本共享了一些內容分析的包也是完全用java實(shí)現的
4 C++用來(lái)構建索引,他對CPU要求很高。而爬蟲(chóng)(處理機器學(xué)習,分類(lèi)和拼寫(xiě)檢查是Java)。一開(kāi)始數據是存放在關(guān)系數據庫里面的,但是由于性能問(wèn)題被替換掉。他們開(kāi)發(fā)了一種內部格式,有java和C++的接口
5 使用jfreechart作為圖表顯示工具??刂破魇荝MI服務(wù)器,而爬蟲(chóng)是RMI客戶(hù)端
6 開(kāi)發(fā)者使用j2se內建的庫和免費java組件來(lái)加速他們的開(kāi)發(fā)。他們無(wú)需花費任何時(shí)間對內存錯誤進(jìn)行調試。
7 他們一開(kāi)始就是用j2se5.0 ,使用泛型來(lái)簡(jiǎn)化代碼和使代碼易讀。廣泛使用阻塞隊列將工作從一個(gè)線(xiàn)程轉移到另一個(gè)線(xiàn)程。由于頁(yè)面到來(lái)的時(shí)間是異步的。
爬蟲(chóng)A從原型到令人基本滿(mǎn)意花了大該六個(gè)月時(shí)間。
8 使用perl腳本來(lái)重啟死掉的爬蟲(chóng)進(jìn)程。
9 在爬蟲(chóng)B的開(kāi)發(fā)中,他們使用了java.nio庫,這比使用多線(xiàn)程帶來(lái)了更好的性能,但是一些類(lèi),例如URL不支持NIO,他們自己實(shí)現了一個(gè)URLConnection.
10 配置文件使用JAXB存儲為xml形式
11 在比較了eclipse和IDEJ之后,他們最終選擇了Netbean作為開(kāi)發(fā)工具。因為它extremely fast compared to Eclipse
12 他們還將繼續使用java平臺,因為能夠快速開(kāi)發(fā)比精確的內存控制更重要
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=470892
聯(lián)系客服