淘寶服務市場 淘寶訂單同步方案 - 丟單終結者

淘寶訂單同步方案 - 丟單終結者

 
訂單管理是不少賣家工具的必備功能之一,而訂單同步則是訂單管理中的數據來源,如何保證訂單同步的實時、高效、低碳和不丟單是很是重要的事情。

訂單同步接口
1.    taobao.trades.sold.get,根據訂單建立時間查詢3個月內已賣出的訂單。
2.    taobao.trades.sold.increment.get,根據訂單修改時間查詢1天內的增量訂單。
3.    taobao.trade.fullinfo.get,根據訂單ID查詢訂單的詳細信息。

丟單緣由分析
1、沒有檢查訂單同步接口的返回值是否成功。
2、只使用taobao.trades.sold.get同步訂單,此接口是按照訂單建立時間查詢的,一個訂單建立後什麼時候被修改(付款、發貨、確認收貨)是不肯定的,因此採用這種方案沒法肯定該同步哪一個時段內的訂單,除非你每次都同步3個月內的訂單(嚴重浪費資源,應該沒人會這麼作),不然無論選擇什麼時段同步都有丟單的可能。
3、沒有記錄每次訂單同步成功後的時間點。好比每10分鐘增量同步一次訂單,若是系統剛好在某個同步時刻出現異常,則此次的同步就有可能被停止。
4、整點偏差(時/分/秒)。好比每10分鐘增量同步一次訂單:第一次同步00:00:00 ~ 00:10:00時段的訂單,第二次同步00:10:01 ~ 00:20:00時段的訂單。這種方式就有可能丟失00:10:00的一部分訂單,特別是店鋪參加聚划算活動時更容易出現。
5、按狀態同步訂單,這種方式的問題在於訂單狀態過多,有可能會出現狀態遺漏,並且性能低效。

推薦同步方案
同步流程圖


流程圖解釋
1.    用戶第一次登陸時使用taobao.trades.sold.get同步3個月內的訂單,並把用戶登陸的時間作爲以後增量同步的時間起點。
2.    同時後臺啓動定時任務進行增量訂單同步,根據店鋪訂單量的不一樣和客戶來訪時間,可設置不一樣的同步頻率,每次增量同步完畢後,須要把增量同步的時間點記錄下來,以作爲下次增量同步的起點。

訂單同步技巧
1.    使用taobao.trades.sold.get同步3個月內的訂單時,最好把3個月分隔成若干個時段來查詢,不然很容易出現超時。因爲訂單的建立時間不會變化,因此分頁時從前翻頁仍是從後面翻頁都無所謂(前提是翻頁的過程當中不能改變查詢時間)。
2.    使用taobao.trades.sold.increment.get增量同步訂單時,查詢到的訂單是按修改時間倒序返回的,因此分頁時必須從最後一頁開始翻頁,不然有可能出現丟單。這是由於若是從第一頁開始翻頁,則翻頁過程當中發生變動的訂單就會減小訂單總數,使翻頁出現偏差。
3.    使用taobao.trades.sold.increment.get增量同步訂單時,能夠先經過只查詢tid字段獲得指定時段的訂單總數,而後計算出分頁數,後繼採用倒序翻頁時,設置use_has_next=true能夠禁止API接口去統計訂單總數,減小每次查詢時都作統計的開銷,能夠大大提升查詢性能。
4.    根據訂單量的不一樣,須要採用不一樣的同步時段。對於日均訂單量在1000左右的店鋪,若是設置每頁查詢50條記錄,每10分鐘同步一次,則每次同步基本上只須要一次分頁查詢就能完成同步。
5.    時刻記錄每次成功同步的時間點(好比存儲到數據庫中),避免重複勞動。
6.    對於用戶量較大,實時性要求較高的應用,最好採用多線程同步的方式。可創建一個固定大小的線程池(須要根據硬件條件和網絡情況不一樣設置不一樣的線程池大小),爲每一個用戶啓動一個線程去同步訂單。
7.    因爲API調用是有頻率限制的,採用多線程同步訂單時,有可能須要每次API調用後作一些短暫的停頓,以避免調用超頻,形成長時間不可訪問API。
8.    若是批量訂單查詢返回的數據不夠,須要經過訂單詳情接口獲取時,強烈推薦批量查詢訂單時,只查詢tid字段,而後經過taobao.trade.fullinfo.get查詢訂單詳情。
9.    使用taobao.time.get獲取的時間做爲當前時間。不然,若是ISV服務器的時間比淘寶服務器的時間快,則有可能提早同步訂單致使丟單。
10.    使用taobao.trades.sold.increment.get接口時,設置的查詢時間段返回的總記錄數最好不要超過2萬,不然很容易發生超時。

特別提醒:針對光棍節大促,因爲訂單量很大,若是使用倒序須要返回total_results,建議大商家抓單時間間隔設置小於5分鐘,使每次抓單儘可能不要超過2萬單,避免數目過多致使的性能和超時問題。
相關文章
相關標籤/搜索