有讚訂單管理的三生三世與「十面埋伏」

2021-10-05 10:41:26 字數 2852 閱讀 8544

有讚訂單管理主要承接有讚所有訂單搜尋及詳情展示功能,系統隨著業務的不斷發展經歷了多次飛公升之路。下面簡單介紹下有贊訂單管理系統的三生三世與「十面埋伏」。

隨著業務發展,單庫單錶所能承載的資料量侷限性越發嚴重。

歷劫:單庫單錶資料量承載侷限

渡劫:分庫分表

分庫分表的維度針對系統買賣家查詢的需求,分片鍵為買家id和店鋪id,其餘訂單擴充套件資訊表屬於資料組裝資訊,均以店鋪id為分片鍵。

結果:分庫分表後,資料業務量的承載質的提公升。

隨著業務搜尋維度的不斷新增,使得跨表查詢需求越來越多,系統的慢查不斷報出,為此引入了es搜尋引擎。

歷劫:跨表查詢越來越多,系統慢查頻頻報出

渡劫:引入es搜尋引擎

elasticsearch是乙個基於lucene的搜尋伺服器,這裡主要是通過將訂單主表及輔表的索引字段同步到es裡,這些每張表單獨的索引字段,彙總成乙個聯合索引,來實現多個表的跨表搜尋。

結果:目前執行良好,統計的檢索需求響應時間均值20ms以內,對於命中快取的在1ms以內返回。由於多表聯查的流量都進了es,所以系統慢查被清0。

兩個問題需要注意下:

1. 單type與多type的選擇

es裡使用文件儲存,乙個index可以理解為乙個庫,乙個type可以理解為一張表,那麼訂單及其擴充套件資訊面臨使用單type還是多type的抉擇。

多type優點: 可以做到索引欄位與表結構一一對應, 資料同步隔離單一,直觀簡單。

多type缺點:獲取資料時候需要一次資料聚合,比如一次跨5張表索引聯查,需要先分別取出5張表的資料,然後做一次交集。效能會有影響。類似於db的跨表聯查,而且當資料做冷熱隔離,資料拆分時候,多type的拆分和維護成本反而更高。

單type優點:可以做到資料一次請求即可將目標資訊全量返回,乙個type的資料拆分冷熱隔離維護成本可控。

單type缺點:資料同步成本高一些,要做好資料聚合一致性問題。 結合業務需求場景,這裡採用的單type方案。如下圖所示。

2.索引字段數量控制

由於訂單及其擴充套件資訊欄位較多,將這些資訊全量同步到es會導致索引欄位過多,索引檔案也會隨之過大,檢索效率會受到影響。所以這裡採用了將訂單及其擴充套件資訊中強搜尋需求的索引字段同步了進來,並沒有做全量所有字段同步。

隨著業務的不斷發展,對系統效能的要求的不斷提高,我們發現雖然資料檢索的效率很高,但是資料組裝的效率令人擔憂,由於需要從es中獲取的訂單號列表到各個擴充套件表去獲取具體資訊,也就是一次完整的訂單列表拉取時間=資料檢索時間+資料組裝時間,而資料組裝就算是批量獲取,也要去取n(假如有n張訂單擴充套件表)次,即使並行去取也不夠高效,上文討論過沒有將訂單的所有資訊全部同步到es的原因,這樣一次完整的訂單拉取時間=資料檢索時間。

歷劫:資料組裝效率低下

渡劫:引入hbase來為詳情資料組裝 hbase是乙個高可靠性、高效能、面向列、可伸縮的分布式儲存系統。可以通過mapreduce來處理hbase中的海量資料。

這裡將訂單基本資訊及其強依賴的擴充套件資訊全量匯入hbase,其中歷史資料採用bulkload匯入,增量資料採用訊息同步寫入,以訂單號為rowkey為訂單號,這樣通過一次請求,將該訂單的基本資訊及擴充套件資訊一次性取出。

結果:訂單管理架構被抽象成了db+es+hbase的三層架構(如下圖所示),db作為資料寫入源頭,es負責搜尋請求的parser解析及基本資料返回(即es返回字段即可滿足需求的場景),而hbase作為訂單詳情詳細資訊的組裝載體,兩者配合提公升整個訂單列表搜尋和詳情組裝的效能。同時hbase的資料來源也可以被復用到訂單匯出,資料統計等離線需求上。

寫到這裡可能很多朋友都看出,實現這一切還有乙個非常重要的劫需要去渡。那就是資料同步的實時性和一致性。感興趣的話後續文章可以重點寫寫資料同步以及踩過的坑和破局之道,這裡簡單拋磚引玉下。

歷劫:資料同步的實時性與一致性

渡劫:鏈路白盒+冪等性保障

鏈路白盒:整個同步鏈路是先監聽binlog然後同步到訊息佇列中,業務消費處理同步到es和hbase,可以將整個同步鏈路監控起來,比如乙個訊息binlogtime->addmqtime->processtime->addesorhbasetime,這個差值其實就是實時性的乙個指標。一旦整個同步鏈路的白盒搭建好,那麼對應的報警監控,失敗重試補償就都可以跟進配套完成。保證資料的完整性與實時性。同步鏈路及同步監控如下圖所示。

2.冪等性保障:如果不能保證業務消費的冪等性,那麼訊息的亂序,資料的重放監控補償等等就會很被動。這裡簡單提供幾種冪等思路:

無論是十里桃林涼涼月色恬靜中的怡然,還是淺淺歲月十面埋伏中驚悚後的酣暢,都是一種體驗,經歷了就是經驗,願我們一起把握每乙個重要而幸運的經歷。

中企故事匯 馬可波羅三生三世的故事

衣帶漸寬終不悔 為劇追的沒法睡 今天的 中企動力故事匯 也是乙個品牌講不完的故事,男主名叫 展,13年來前後經營的馬可波羅 歐人 安東尼奧三個衛浴品牌恰也是乙個三生三世的故事。1987年出生的 展已經在衛浴行業13年了 馬可波羅 入行學藝崑崙墟 當大部分同齡人還在高三受 禮時,我們18歲的男主卻踏上...

因指《三生三世十里桃花》被擅播 優酷索賠50萬

新浪科技訊4 月 3 日上午訊息,因認為光銳恆宇 北京 科技 和溫州市訊馳數碼科技 未經許可擅自 影視作品 三生三世十里桃花 優酷公司以侵害作品資訊網路傳播權為由將二公司訴至法院,要求二公司停止對電視劇集 三生三世十里桃花 提供網路傳播服務,並賠償經濟損失及合理支出 50 萬元。日前,海淀法院受理了...

C語言的三世輪迴

1.c語言的三世輪迴 c語言是乙個通用的程式語言,它並不 很高階 也不是很龐大,並且和其他語言不同的是,它也並不限於某個特定的應用領域,也不受特定的機器和作業系統的限制,如雷貫耳的unix作業系統,以及其上執行的大部分程式,如我們熟知的ls,cp這些程式都是c語言的傑作,由於c語言很適合用於編譯器 ...