Become.com的 Web Crawler: 一个超大规模的Java应用程序(想开发自己的搜索引擎增值服务的必读)
原文地址:http://java./developer/technicalArticles/WebServices/become/?feed=JSC 1 Become.com准备开发他们的第二代搜索引擎。他们曾经花了一年的时间开发了一个C++版本的web crawler ,但是有明显的内存和线程问题。 2 现在他们决定用java重新开发这个引擎。两个开发者,花了3个月,就构建了一个原型Crawler A。使用Java的网络库,多线程框架和RMI。虽然有一些内存和线程问题,但是性能仍然让人满意。 3 接下来他们开发了下一个版本Crawer B。其中取数据器(爬虫)使用Java,而控制器部分用C++实现。取数据部分负责I/O部分。采集,解析和分析web页的内容,从中提取出链接并发送给控制器。控制器负责管理数据结构和把数据存储到磁盘。多个取数据器和控制器通信,但是彼此间没有通信。 两个版本爬虫都是用纯java写的,没有用JNI,两个版本共享了一些内容分析的包也是完全用java实现的 4 C++用来构建索引,他对CPU要求很高。而爬虫(处理机器学习,分类和拼写检查是Java)。一开始数据是存放在关系数据库里面的,但是由于性能问题被替换掉。他们开发了一种内部格式,有java和C++的接口 5 使用jfreechart作为图表显示工具。控制器是RMI服务器,而爬虫是RMI客户端 6 开发者使用j2se内建的库和免费java组件来加速他们的开发。他们无需花费任何时间对内存错误进行调试。 7 他们一开始就是用j2se5.0 ,使用泛型来简化代码和使代码易读。广泛使用阻塞队列将工作从一个线程转移到另一个线程。由于页面到来的时间是异步的。 爬虫A从原型到令人基本满意花了大该六个月时间。 8 使用perl脚本来重启死掉的爬虫进程。 9 在爬虫B的开发中,他们使用了java.nio库,这比使用多线程带来了更好的性能,但是一些类,例如URL不支持NIO,他们自己实现了一个URLConnection. 10 配置文件使用JAXB存储为xml形式 11 在比较了eclipse和IDEJ之后,他们最终选择了Netbean作为开发工具。因为它extremely fast compared to Eclipse 12 他们还将继续使用java平台,因为能够快速开发比精确的内存控制更重要 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=470892 |
|