全文检索、数据挖掘、推荐引擎系列1---技术架构思考

我的小说《最老程序员创业札记-全文检索、数据挖掘、推荐引擎应用》的技术系列文章的第一篇,由于本人也是在一个LBS问答项目中使用,各方面考虑得不完善,希望能够得到大家的帮助,谢谢大家的支持。

在后web2.0时代,简单的允许用户产生内容,连接用户组成社交网络,满足用户个性化需求,已经变成各个网站的标配,不可能成为网站的特色和竞争优势了。然而,随着用户产生内容的增多,用户与系统交互手段的丰富,用户可供选择的选项的增多,用户迫切需要一种可以处理当前信息爆炸时代的工具,可以迅速找到自己想要的内容,更加容易的做出正确的决策,因此在后web2.0时代,全文检索、数据挖掘、推荐引擎的应用,将是各大网站下一轮竞争的焦点。

但是应用这三种技术需要一个统一的技术架构,在这个统一的架构下,才能将全文检索、数据挖掘、推荐引擎的功能发挥出来。我们将全文检索、数据挖掘、推荐引擎统成为商业智能系统,而与用户交互的部分称为前端系统。根据后台商业智能系统的功能不同,可以将后台商业智能系统分为三大类服务:同步服务、异步服务、后台线程。

  1. 同步服务:主要处理用户即时全文检索查询请求,给出推荐条目,通常同步服务使用异步服务或后台进程产生的商业智能数据,这些数据存在缓存中如memcached或数据库mysql中,通过Web Service或Restful方式提供
  2. 异步服务:为了完成实时搜索、实时推荐等实时性需求,用户的每个交互,在保存到数据库中的同时,系统会将该事件写入消息服务器中,异步服务组件通过监听消息服务器上的topic来启动业务处理逻辑,从而实现近实时需求。例如,用户为某个产品写下评论或博客后,立即就可以通过全文检索中查询中该内容,用户对内容的打分或投票也可以立即反映到给用户的推荐列表中
  3. 后台服务:主要指需要长时间在后台运行的服务,例如聚合网站中对信息源的抓取,内容批量导入的处理等等。这里有两种情况,一种是定时任务,需要在特定的时间或是时间间隔来完成,另一种是条件触发的后台任务,例如在CPU利用率或并发数降低到一定程度后,后台自动运行的任务

为了满足上述需求,自然对所选用的技术和产品有一定的要求。在这里我想阐述一下我选择产品的原则,首先选择开源软件,其次是如果可以用一种产品实现的功能,不建议采用两种或多种产品组合来使用,虽然多种产品组合可能功能更为强大,但是配置的复杂性方面将成倍的提高,结果往往是得不偿失的。

  • 编程语言选择:对于后台的商业智能系统而言,数据处理需要强大的处理能力,显然PHP、Python等不是最佳选择,选择Java可能更能满足要求,因为基于Java的全文检索、数据挖掘、推荐引擎均有成熟的开源软件可供选择,如Lucene、WEKA、Mahout等。另外,在性能扩展方面,Hadoop是当前的最通用的Map/Reduce选项,其本身就是Java实现的
  • 应用服务器:考虑到需要同时满足同步服务、异步服务及后台进程的需求,要求应用服务器(Web服务器)具有消息中间件的功能,而单从这点来看,选择Glassfish似乎是更好的选择,因为Tomcat再加上Httpd、ActiveMQ/OpenJMS配置相对要复杂一些
  • 数据库系统:当前对大型系统而言,常常纠结于选择SQL还是NoSQL,NoSQL的性能好,但是不能处理复杂的查询,而SQL可以处理复杂查询,但是性能上又会差很多,通常的折衷解决方案是数据库加缓存系统,但是当MySQL 5.6.2将InnoDB引擎与Memcached相结合之后,似乎选择MySQL这种集成解决方案更具有优势,这让我们看到了SQL与NoSQL的融合趋势,这种方案的唯一缺陷是目前MySQL 5.6.2还没有GA,这种方案还有成功案例可供借签

综上所述,个人认为采用Java+Lucene+WEKA/Mahout+Glassfish+MySQL(>5.6.2)是实现后台商业智能的合理架构。

posted on 2011-08-11 09:30  最老程序员闫涛  阅读(2043)  评论(3编辑  收藏  举报

导航