淘寶聚石塔防止同步訂單漏單策略總結

  • 最近在參與做一個電商管理系統,負責了訂單同步這塊微服務,其中就有從淘寶這個渠道來同步訂單。據瞭解,貌似大部分商家都是會接上淘寶的一個平臺,叫做聚石塔,對商家來說,相當於提供一個對商家的基礎數據服務的一個平臺,可以說是一個數據庫吧,然後淘寶還提供各種接口來提供對數據的服務,關於聚石塔就不作多餘的闡述了,可以從官網去了解,這篇博文僅作一些總結,總結一下結合聚石塔,訂單同步過程中防止漏單的策略這個業務需求。
  1. 淘寶聚石塔提供的訂單是按照訂單更新時間升序排序的(存儲在數據庫的方式),訂單的狀態很多情況都會發生變動,如物流更新、買家申請退款、賣家發貨、買家簽收等等,都會對該訂單進行更新,其中有一個字段來標識訂單更新時間,該訂單數據也會隨着更新而自動按照時間升序排序,如下圖所示,聚石塔是按照訂單更新時間升序排序的:

聚石塔訂單更新位置的變動.png

  1. 無論是何種渠道的訂單同步,均有可能出現潛在的漏單風險。會出現漏單的原因是在某時間段內的訂單可能很多(尤其是大促期間),不可能進行全量同步,只能進行分頁的同步。使用分頁同步的時候,就可能漏單了,如下圖所示:

分頁同步訂單過程中出現訂單更新的時候.png

  1. 如何防止同步訂單的時候漏單,聚石塔官方文檔給出了一種策略,就是分頁同步訂單的時候,根據逆序分頁來同步訂單,即假設早上7點-12點這個時間段內聚石塔有9條訂單,根據訂單更新時間升序排序的,我們假設分頁同步訂單一頁的大小是3條訂單,那麼可以分成第1-3,4-6,7-9三頁訂單,逆序分頁同步訂單,首先從倒數第一頁開始同步訂單第7-9條訂單,在同步倒數第二頁的時候,即第4-6條訂單時,第5條訂單恰好更新了,不落在7-12點這個時間段內,此時查回來的數據7-12點只有8條數據了,那麼逆序分頁同步倒數第二頁第4-6條訂單的時候,實際上這個時候我們重複同步了第7條訂單而不會造成漏了同步訂單,重複同步訂單我們後續可以做過濾,而漏單的話造成的後果是很嚴重的。如下圖所示:

防漏單策略.png

  1. 按記錄的變化時間,來輪詢查詢記錄,如何才能不漏單?聚石塔官方給出的答案是這樣子的:

按變化時間倒序,然後從後向前翻頁。
目的:防止在翻頁過程中,有記錄變化了。
原因:從後往前翻頁"是防止漏單的必要條件,是防止已經讀取過的數據變化了,導致後續數據整體遷移1位。
倒序: 倒序+從後向前翻頁還有個好處,能夠記錄已經讀過的時間點,如果中斷,下次可以從這個時間點開始讀。

  • 本文只是記錄一下前陣子做的部分業務,也有參考了我們的開發設計部分內容,這個逆序分頁同步這個場景比較少用,理解起來也有點費勁,故也總結一下。

一磚一瓦,堅持寫博文,希望能提高自己的代碼能力。如果文章有誤或不足之處,歡迎指出

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