2012年5月17日 星期四

全文檢索、資料採擷、推薦引擎系列1---技術架構


在後web2.0時代,簡單的允許使用者產生內容,連接使用者組成社交網路,滿足使用者個性化需求,已經變成各個網站的標配,不可能成為網站的特色和競爭優勢了。然而,隨著使用者產生內容的增多,使用者與系統交互手段的豐富,使用者可供選擇的選項的增多,使用者迫切需要一種可以處理當前資訊爆炸時代的工具,可以迅速找到自己想要的內容,更加容易的做出正確的決策,因此在後web2.0時代,全文檢索、資料採擷、推薦引擎的應用,將是各大網站下一輪競爭的焦點。
但是應用這三種技術需要一個統一的技術架構,在這個統一的架構下,才能將全文檢索、資料採擷、推薦引擎的功能發揮出來。我們將全文檢索、資料採擷、推薦引擎統成為商業智慧系統,而與使用者交互的部分稱為前端系統。根據後臺商業智慧系統的功能不同,可以將後臺商業智慧系統分為三大類服務:同步服務、非同步服務、後臺執行緒。
  1. 同步服務:主要處理用戶即時全文檢索查詢請求,給出推薦條目,通常同步服務使用非同步服務或後臺進程產生的商業智慧資料,這些資料存在緩存中如memcached或資料庫mysql中,通過Web ServiceRestful方式提供
  2. 非同步服務:為了完成即時搜索、即時推薦等即時性需求,用戶的每個交互,在保存到資料庫中的同時,系統會將該事件寫入消息伺服器中,非同步服務元件通過監聽消息伺服器上的topic來啟動業務處理邏輯,從而實現近即時需求。例如,使用者為某個產品寫下評論或博客後,立即就可以通過全文檢索中查詢中該內容,使用者對內容的打分或投票也可以立即反映到給用戶的推薦列表中
  3. 後臺服務:主要指需要長時間在後臺運行的服務,例如聚合網站中對資訊源的抓取,內容批量導入的處理等等
為了滿足上述需求,自然對所選用的技術和產品有一定的要求。
  • 程式設計語言選擇:對於後臺的商業智慧系統而言,資料處理需要強大的處理能力,顯示PHPPython等不是最佳選擇,選擇Java可能更能滿足要求,因為基於Java的全文檢索、資料採擷、推薦引擎均有成熟的開源軟體可供選擇,如LuceneWEKAMahout。另外,在性能擴展方面,Hadoop是當前的最通用的Map/Reduce選項,其本身就是Java實現的
  • 應用伺服器:考慮到需要同時滿足同步服務、非同步服務及後臺進程的需求,要求應用伺服器(Web伺服器)具有消息中介軟體的功能,而單從這點來看,選擇Glassfish似乎是更好的選擇,因為Tomcat再加上HttpdActiveMQ/OpenJMS配置相對要複雜一些
  • 資料庫系統:當前對大型系統而言,常常糾結於選擇SQL還是NoSQLNoSQL的性能好,但是不能處理複雜的查詢,而SQL可以處理複雜查詢,但是性能上又會差很多,通常的折衷解決方案是資料庫加緩存系統,但是當MySQL 5.6.2InnoDB引擎與Memcached相結合之後,似乎選擇MySQL這種集成解決方案更具有優勢,這讓我們看到了SQLNoSQL的融合趨勢,這種方案的唯一缺陷是目前MySQL 5.6.2還沒有GA,這種方案還有成功案例可供借簽
綜上所述,個人認為採用Java+Lucene+WEKA/Mahout+Glassfish+MySQL(>5.6.2)是實現後臺商業智慧的合理架構。

沒有留言: