成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

京東評價系統海量數據存儲設計

開發 開發工具
京東的商品評論目前已達到數十億條,每天提供的服務調用也有數十億次,而這些數據每年還在成倍增長,而數據存儲是其中最重要的部分之一,接下來就介紹下京東評論系統的數據存儲是如何設計的。

京東評價系統海量數據存儲設計

京東的商品評論目前已達到數十億條,每天提供的服務調用也有數十億次,而這些數據每年還在成倍增長,而數據存儲是其中最重要的部分之一,接下來就介紹下京東評論系統的數據存儲是如何設計的。

整體數據存儲包括基礎數據存儲、文本存儲、數據索引、數據緩存幾個部分。

基礎數據存儲

基礎數據存儲使用mysql,因用戶評論為文本信息,通常包含文字、字符等,占用的存儲空間比較大,為此mysql作為基礎數據庫只存儲非文本的評論基礎信息,包括評論狀態、用戶、時間等基礎數據,以及圖片、標簽、點贊等附加數據。而不同的數據又可選擇不同的庫表拆分方案,參考如下:

  • 評論基礎數據按用戶ID進行拆庫并拆表;
  • 圖片及標簽處于同一數據庫下,根據商品編號分別進行拆表;
  • 其它的擴展信息數據,因數據量不大、訪問量不高,處理于同一庫下且不做分表即可。

因人而異、因系統而異,根據不同的數據場景選擇不同存儲方案,有效利用資源的同時還能解決數據存儲問題,為高性能、高可用服務打下堅實基礎。

文本存儲

文本存儲使用了mongodb、hbase,選擇nosql而非mysql,一是減輕了mysql存儲壓力,釋放msyql,龐大的存儲也有了可靠的保障;二是nosql的高性能讀寫大大提升了系統的吞吐量并降低了延遲。存儲的升級過程嘗試了cassandra、mongodb等分布式的nosql存儲,cassandra適用于寫多讀少的情況,而 mongodb也是基于分布式文件存儲的數據庫,介于關系型數據庫與非關系型數據庫之間,同時也是內存級數據庫,mongo寫性能不及 cassandra,但讀寫分離情況下讀性能相當不錯,因此從應用場景上我們選擇了mongodb。mongodb確實不錯,也支持了系統穩定運行了好幾年。

但從今后的數據增長、業務擴增、應用擴展等多方面考慮,hbase才是***的選擇,它的存儲能力、可靠性、可擴展性都是毋庸置疑的。選擇了 hbase,只需要根據評論ID構建Rowkey,然后將評論文本信息進行存儲,查詢時只需要根據ID便能快速讀取評論的文本內容,當然也可將評論的其它字段信息進行冗余存儲,這樣根據評論ID讀取評論信息后不用再從mysql進行讀取,減少數據操作,提升查詢性能。

數據索引

京東的評論是以用戶和商品兩個維度進行劃分的。對于用戶而言,用戶需要發表評論、上傳曬圖、查看自己的評論等,因此mysql數據庫中只要根據用戶ID對評論數據進行拆庫拆表進行存儲,便能解決用戶數據讀寫問題。而對于商品而言,前臺需要將統計商品的評論數并將所有評論展示出來,后臺需根據評論的全字段進行檢索同時還帶模糊查詢,而評論數據是按userId進行庫表拆分的,現在要按商品去獲取評論,顯然當前的拆分庫是無法實現的。起初考慮過根據商品編號再進行拆庫拆表,但經過多層分析后發現行不通,因為再按商品編號進行拆分,得再多加一倍機器,硬件成本非常高,同時要保持用戶及商品兩維度的分庫數據高度一致,不僅增加了系統維護成本及業務復雜度,同時也無法解決評論的數據統計、列表篩選、模糊查詢等問題,為此引入了全文檢索框架solr(前臺)/elasticsearch(后臺)進行數據索引。

數據索引其實就是將評論數據構建成索引存儲于索引服務中,便于進行評論數據的模糊查詢、條件篩選及切面統計等,以彌補以上數據存儲無法完成的功能。京東評論系統為此使用了solr/elasticsearch搜索服務,它們都是基于Lucene的全文檢索框架,也是分布式的搜索框架(solr4.0后增加了solr cloud以支持分布式),支持數據分片、切面統計、高亮顯示、分詞檢索等功能,利用搜索框架能有效解決前臺評論數據統計、列表篩選問題,也能支持后臺系統中的關鍵詞顯示、多字段檢索及模糊查詢,可謂是一舉多得。

搜索在構建索引時,屬性字段可分為存儲字段與索引字段,存儲字段在創建索引后會將內容存儲于索引文檔中,同時也會占用相應的索引空間,查詢后可返回原始內容,而索引字段創建索引后不占用索引空間也無法返回原始內容,只能用于查詢,因此對于較長的內容建議不進行存儲索引。

評論搜索在構建索引時,主鍵評論ID的索引方式設置為存儲,其它字段設置為索引,這樣不僅減少索引文件的存儲空間,也大大提升了索引的構建效率與查詢性能。當然,在使用搜索框架時,業務數據量比較小的也可選擇將所有字段進行存儲,這樣在搜索中查詢出結果后將不需要從數據庫上查詢其它信息,也減輕了數據庫的壓力。

為了更好地應對前后臺不同的業務場景,搜索集群被劃分為前臺搜索集群和后臺搜索集群。

前臺搜索集群根據商品編號進行索引數據分片,用于解決評論前臺的評論數統計、評論列表篩選功能。評論數統計,如果使用常規數據庫進行統計時,需要進行sql上的group分組統計,如果只有單個分組統計性能上還能接受,但京東的評論數統計則需要對1到5分的評論分別進行統計,分組增加的同時隨著統計量的增加數據庫的壓力也會增加,因此在mysql上通過group方式進行統計是行不通的。而使用solr的切面統計,只需要一次查詢便能輕松地統計出商品每個分級的評論數,而且查詢性能也是毫秒級的。切面統計用法如下:

前臺搜索集群切面統計用法

評論列表,只需根據條件從搜索中查詢出評論ID集合,再根據評論ID到mysql、Hbase中查詢出評論的其它字段信息,經過數據組裝后便可返回前臺進行展示。

前臺搜索集群評論列表

后臺搜索集群,評論后臺系統需要對評論進行查詢,其中包括關鍵詞高亮顯示、全字段檢索、模糊查詢等,為此solr/elasticsearch都是個很好的選擇,目前使用elasticsearch。

未來也計劃將前臺搜索集群切換為elasticsearch。

數據緩存

面對數十億的數據請求,直接擊穿到mysql、搜索服務上都是無法承受的,所以需要對評論數據進行緩存,在此選擇了高性能緩存redis,根據不同的業務數據進行集群劃分,同時采用多機房主從方式部署解決單點問題,這樣只需要對不同的緩存集群進行相應的水平擴展便能快速提升數據吞吐能力,也有效地保證了服務的高性能、高可用。

當然,緩存設計時還有很多細節可以進行巧妙處理的,如:

  • 當用戶新發表一條評論,要實現前臺實時展示,可以將新增的評論數向首屏列表緩存中追加***的評論信息;
  • 評論數是讀多寫少,這樣就可以將評論數持久化到redis當中,只有當數據進行更新時通過異步的方式去將緩存刷新即可;評論數展示可通過nginx+lua的方式提供服務,服務請求無需回源到應用上,不僅提升服務性能,也能減輕應用系統的壓力;
  • 對于評論列表,通常訪問的都是***屏的數據,也就是***頁的數據,可以將***頁的數據緩存到redis當中,有數據更新時再通過異步程序去更新;
  • 對于秒殺類的商品,評論數據可以結合本地緩存提前進行預熱,這樣當秒殺流量瞬間涌入的時候也不會對緩存集群造成壓力;通過減短key長度、去掉多余屬性、壓縮文本等方式節省內存空間,提高內存使用率。

數據容災與高可用

引入了這么多的存儲方案就是為了解決大數據量存儲問題及實現數據服務的高可用,同時合理的部署設計與相應的容災處理也必須要有的。以上數據存儲基本都使用多機房主從方式部署,各機房內部實現主從結構進行數據同步。如圖:

京東評價系統數據容災

mysql集群數據庫拆庫后需要對各分庫進行多機房主從部署,系統應用進行讀寫分離并根據機房進行就近調用,當主機房數據庫出現故障后將故障機房的數據操作都切換到其它機房,待故障排除后再進行數據同步與流量切換。

使用主從機房部署的方式所有數據更新操作都要在主庫上進行,而當主機房故障是需要通過數據庫主從關系的重建、應用重新配置與發布等一系列操作后才能解決流量切換,過程較為復雜且影響面較大,所以這是個單點問題,為此實現數據服務多中心將是我們下一個目標。

多中心根據特定規則將用戶分別路由到不同機房進行數據讀寫,各機房間通過數據總線進行數據同步,當某一機房出現故障,只需要一鍵操作便能快速地將故障機房的用戶流量全部路由到其它機房,實現了數據的多寫多活,也進一步實現了服務的高可用。數據多中心如下:

京東評價系統數據中心

hbase集群目前使用的是京東的公有集群,實現了雙機房主備部署,主集群出現故障后自動將流量切換到備用集群,而當hbase整個集群故障時還可對其進行降級,同步只寫入緩存及備用存儲mongo,待集群恢復后再由后臺異步任務將數據回寫到hbase當中。

搜索集群根據商品編號進行索引數據分片多機房主從部署,并保證至少3個從節點并部署于多個機房當中,當主節點出現故障后從這些從節點選取其中一個作為新的主提供服務。集群主節點只提供異步任務進行索引更新操作,從節點根據應用機房部署情況提供索引查詢服務。

Redis緩存集群主從部署仍是標配,主節點只提供數據的更新操作,從節點提供前臺緩存讀服務,實現緩存數據的讀寫分離,提升了緩存服務的處理能力。當主節點出現故障,選取就近機房的一個從節點作為新主節點提供寫服務,并將主從關系進行重新構建。任何一從節點出現故障都可通過內部的配置中心進行一鍵切換,將故障節點的流量切換到其它的從節點上。

總結

整體數據架構并沒有什么高大上的設計,而且整體數據架構方案也是為了解決實際痛點和業務問題而演進過來的。數據存儲方案上沒有***的,只有最適合的,因此得根據不同的時期、不同的業務場景去選擇合適的設計才是最關鍵的,大家有什么好的方案和建議可以相互討論與借鑒,系統的穩定、高性能、高可用才是王道。

作者:韋仕,京東商城交易平臺評價社區負責人,2010年加入京東,先后參與了用戶、商品、評論等系統的架構升級工作。

 

【本文來自51CTO專欄作者張開濤的微信公眾號(開濤的博客),公眾號id: kaitao-1234567】

責任編輯:趙寧寧 來源: 開濤的博客
相關推薦

2015-07-22 11:03:25

網絡存儲海量數據

2011-03-08 09:58:21

海量數據

2018-01-02 20:00:28

數據庫MySQL分布式存儲

2012-09-05 13:22:40

華為UDS海量存儲

2012-09-04 13:58:50

存儲海量存儲華為

2013-05-14 13:37:46

華為UDS存儲系統

2011-04-28 09:36:22

海量數據存儲

2022-06-28 13:41:43

京東數據處理

2017-02-23 10:27:59

2012-06-06 09:03:24

曙光存儲大數據

2024-10-16 10:35:52

2014-09-01 15:18:42

浪潮統一存儲AS13000

2017-12-12 08:40:00

2019-06-17 23:25:04

NebulasFs架構分布式

2015-05-13 15:15:16

HadoopHBaseMapReduce

2018-03-06 10:03:10

微信數據監控

2017-12-15 09:05:55

對象存儲塊存儲文件存儲

2018-02-02 08:31:22

數據存儲分子

2017-07-13 08:26:47

NAS存儲數據

2018-03-07 10:35:45

云計算存儲系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频免费观看 | 国产精品视频免费看 | 国产精品久久久久久影院8一贰佰 | a a毛片| 久久综合888 | 蜜桃官网 | 精品91视频 | 日本电影免费完整观看 | 手机看片在线播放 | 国产精品久久久久久网站 | 国内精品久久精品 | 国产日韩欧美在线观看 | 久久在线| 日韩高清中文字幕 | 91精品在线播放 | 欧美精品成人一区二区三区四区 | 九七午夜剧场福利写真 | 夜夜摸夜夜操 | 国产成人一区二区三区 | 视频一区欧美 | 欧美黄在线观看 | 久久精品免费一区二区 | 在线播放国产一区二区三区 | 欧美精品区 | 精品国产欧美一区二区三区成人 | 欧美日韩在线一区二区三区 | 国产超碰人人爽人人做人人爱 | 一区二区在线免费观看 | 国产亚洲欧美日韩精品一区二区三区 | 中文字幕第一页在线 | 国产精品久久久久久一区二区三区 | 成人1区2区 | 日韩av一区二区在线观看 | 亚洲综合色丁香婷婷六月图片 | 黄色片在线免费看 | 一区二区在线 | 我我色综合 | 欧美日韩中文国产一区发布 | 欧美成人自拍 | 成人午夜 | www.日本三级 |