MapReduce和online實時訪問共存的一種架構——MongoDB

     這兩天閱讀有關MongoDB的技術文章,也一直在思考一個問題。使用MongoDB的MapReduce在做數據的統計運算時,如何不影響MongoDB提供的實時訪問服務。結合HBase的使用經驗,談談自己的體會。

     這段時間,我一直思考並打算使用MongoDB替換MySQL,存儲社區的相關數據,提供實時的數據查詢服務。除此之外,MongoDB還支持MapReduce計算模型和GridFS分佈式文件系統。那麼就問自己:除了讓MongoDB提供實時的數據查詢服務,能不能同時擔當數據的統計、分析工作,這是MapReduce的強項。

     在淘寶做產品搜的項目的時候(hbase),由於其他原因,ops當時臨時拼湊了45臺服務器,搭建產品搜的離線運算集羣。這45臺機器和淘寶的主搜索(寶貝搜索)在一個機房內,並且分散在不同交換機下,導致在做運算的時候,擠佔了大量帶寬,致使主搜索丟棄了大量用戶請求。MongoDB同時擔當兩種角色,服務器的網絡拓撲結構就更顯得重要。

     假設存在MongoDB裏的數據可以有3份拷貝,那麼我們可以讓兩份數據放在一個機櫃(機櫃A)下面,第三份數據放在另一個機櫃(機櫃B)下,這樣機櫃B也有一份完整的數據。master優先選擇機櫃A的兩份數據,機櫃A提供實時數據訪問服務,機櫃B提供MapReduce數據統計、分析服務。這樣兩邊的網絡流量就互不影響了。

     這樣的架構還有一個好處,就是當一個機櫃壞掉的時候,還有另一個機櫃有完整的數據。

     這是一個基本模型,多個機櫃的情況下,可以按此邏輯擴展。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章