1. 程式人生 > >淘寶如何解決超賣問題

淘寶如何解決超賣問題

這篇文章是我從某文庫爬下來的,放在這裡供大家學習。

淘寶超賣現象的產生及解決方案

一、什麼是超賣現象? 
超賣即“超賣缺貨”,當寶貝庫存接近0時,如果多個買家同時付款購買此寶貝,將會出現“超賣缺貨”現象。產生超賣缺貨這種情況是商家無法控制的,並且發生這種情況的概率極低。 
二、電子商務的主交易流程: 
1,查詢商品 2,建立訂單 3,扣減庫存 4,更新訂單 5,付款 6,賣家發貨 
(1)減庫存的操作 
有兩種選擇,一種是拍下減庫存 另外一種是付款減庫存 
目前淘寶採用的“拍下減庫存”的方式,拍下就是一瞬間的事,對使用者體驗會好些。 
庫存會帶來“超賣”的問題:售出數量多於庫存數量 
由於庫存併發更新的問題,導致在實際庫存已經不足的情況下,庫存依然在減,導致賣家的商品賣得件數超過秒殺的預期。這樣的損失只能由淘寶來負責了。 
三、如何解決超賣的問題? 
方案:採用樂觀鎖。 
1,秒殺由於存在的廣泛的使用者,併發暴漲的情況下,一定要注意在          
文案方面做得儘量人性話些。在系統承載不足的情況,不能讓會員覺得被欺騙了。同時對於一些重要資訊需要做到可查,比如顯示訂單的下單資訊,付款資訊等。 
2,在秒殺的時候,由於瞬時訪問量導致應用的壓力暴漲,資料庫的load上升,IC(商品中心)的壓力很大,從而導致了其他非秒殺的交易也受到了影響。 
解決方案:

1,增加應用的機器 

2,將秒殺應用與普通交易相隔離。對IC做了分組隔離,從而保證秒殺不會影響主站的其他交易。

3,由於商品詳情頁面(detail)該頁面使用者的重新整理頻率很高,所以 儘量將該頁面靜態化,淘寶的秒殺商品詳情頁面,去除了很多不必要的後臺查詢邏輯,比如賣家的信譽,星級等資訊。 
4,detail頁面的響應時間在3-5秒,主要原因是需要到資料庫查詢庫存資訊,該操作所花時間比較長,對資料庫的壓力也很大。所以採用了從快取取庫存資訊。淘寶有一個tair快取,在應用起來的時候,會將商品的庫存資訊載入到tair中。 
5,聚划算的一次秒殺活動中,出現超賣的情況,原因是:庫存資訊是從tair中取的,拍下時在tair中減少了庫存,但是在真正購買時,會去更新資料庫中的庫存,這樣就導致資料庫的當前庫存資訊又去更新了tair中的庫存資訊。 


這件事情帶來的思考是:儘量將資訊保持一致,能夠做到同一處修改最好。比如保持總庫存以及sku的庫存修改保持一致。 
後來的方案是:資料庫中只記錄預設的庫存資訊,對庫存的更新都放在tair中去做。不過這個就要保證tair的足夠穩定,不然tair掛掉,購買資訊就全丟了。所以可以採用一些機制保證資訊的可恢復。比如記日誌,不過這種涉及到IO的也會影響效能了。 

6,最後,還可以租用更多的IDC,採用異地IDC架構,高效的CDN架構,及其全域性服務負載均衡系統,完全可以解決問題。