矽谷之路30:Twitter實時搜索引擎升職記
Twitter有非常強大的搜索引擎,它從最初的一個功能塊演變成為了可以支持很多核心業務的平台。今天我們就來一步步講解twitter是如何實現如此強大的搜索引擎的。
最開始的時候twitter並沒有開發自己的搜索引擎,而使用資料庫自帶的搜索。當一個新的tweets發表後,會通過Ingester存到MySQL資料庫中,在MySQL資料庫里,twitter基於時間做了index,分成了多個Timeslice table,當一個table寫滿了就寫下一個table。如果用戶發起了一個搜索請求,就通過搜索前端訪問MySQL資料庫進行查找。由於tweets的數量過於龐大,用這種架構搜索所有tweets並不現實,所以每次搜索只支持三天所有的數據的查找。
使用MySQL搜索能支持的查找方式非常單一,並且很難擴展。用戶往往並不滿足於只對單一的關鍵詞進行搜索,還會對多個關鍵詞排列組合進行搜索,需要filter過濾,甚至範圍搜索。如下圖所示,如果用戶需要搜索在用戶位置周圍的,圖片格式的Apple iPhone,就需要將這個請求進行層層改寫,最終表示為機器可以理解的語言在資料庫中進行查找。
面對更複雜的需求,twitter團隊使用Lucene這個開源庫開發了Earlybird這個新一代索引伺服器。Earlybird實時地為tweet建立倒排索引,這樣搜索就變得更方便快捷。當用戶需要搜索時,搜索前端直接和Earlybird通信,MySQL只負責數據的存儲。
因為數據太多,twitter「僱傭」了很多Earlybird,每個Earlybird負責資料庫里的一塊數據。這樣進行一次搜索時,搜索前端會詢問所有的Earlybird,並且可能很多Earlybird都查到了結果,這樣給搜索前端帶來了很大的壓力。所以twitter又招聘了一個部門經理來管理這些Earlybird,將它們的結果匯總給用戶,這個部門經理就是blender。
隨著服務的升級,一個新的需求是要搜索隱藏的,或者分組可見的推文,這時就不能用同一種Earlybird進行搜索了,就需要一種新的分化出的protected Earlybird部門來協助服務。
另一個升級是實現全文搜索,就是搜索的數據不僅僅局限於三天。可是這個數據量太龐大了,tweet有幾千億條,全部遍歷顯然是不可能實現。Twitter用了一個非常巧妙的方法就是採用某些演算法只保存2%質量最高、最可能被檢索的tweets在內存中,並且保存了16%的tweets在SSD硬碟中,這樣就可以基本滿足對歷史數據的搜索了。我們可以看到現在blender手下已經有四個部門了,blender已經全面升級為總監了。
隨著服務的進化,Earlybird已經平台化,可以滿足多客戶的需求;blender也已經技術化,成為一個框架,可以用不同的方式開發運營。
本文整理作者:Mengying Tian, 查看完整視頻: BitTiger
更多精彩內容, 請掃描下面二維碼,關注微信公眾賬號「論碼農的自我修養」推薦閱讀:
※Google+ 能在多大程度上取代 Facebook,Twitter,Foursquare 等(國內:人人,開心,微博,街旁等),成為一個綜合性的 SNS 超級平台?
※為什麼在美國仿造一個 Facebook,Twitter 的網站不可以呢?美國用什麼來控制抄襲創意?
※如果要撰寫一部關於中文 Twitter 圈的大百科,有哪些值得收錄的人和事?
※推特上有什麼值得關注或者有趣的人嗎?