高併發寫操作設計方案

2022-08-18 01:33:10 字數 2136 閱讀 4675

秒殺,搶coupon,大轉盤等業務,會吸引大量使用者同時高併發訪問,而這些業務都需要對資料庫有寫操作,在高併發下,這個類似的場景一般都有下面特點:

一、寫庫前邏輯校驗限制,比如秒殺的庫存檢驗,coupon發放量檢驗等邏輯複雜。

二、更新資料庫時候,集中更新在某些特定的記錄上面,造成少量資料同時大量寫請求。

這種方式是最常用的方式,一般併發量不大的時候適合用這種方式,這種分布式鎖特點:

實現簡單:通過第三方的原子操作鎖(redis, zookeeper)在業務開始之前加鎖,業務結束後釋放鎖來完成。

效能低:在分布式鎖的這個階段中,需要相同鎖的資源相當於序列執行。鎖中間的業務耗時多,或者鎖的粒度大會嚴重降低服務效能。

這個方式在業務邏輯上,區分上一種方式,將校驗資料部分區分開,找出關鍵點資料的校驗。關鍵點資料或者叫做易變資料,是指經常變化的,一般每次寫操作都會導致這個資料發生變化。

找出這個關鍵點資料,將關鍵點資料的校驗和更新操作合併為乙個資料庫原子操作,例如庫存檢查操作update table set count = count-1 where count-1 > 0 and item=?,將這個檢驗更新操作,在資料庫層面新增樂觀鎖方式實現,如果執行更新成功,再執行後續操作,如果失敗表示校驗失敗,不通過檢查。

特點:業務實現不複雜,關鍵是找出可以合併更新為乙個的原子資料庫操作。找不出的話就不適合這個方案。

效能瓶頸點在於更新操作,一般是大量併發,修改相同的記錄,例如大量使用者領取相同的一種優惠券,關鍵點合併檢查更新在資料庫裡面都會序列等待這個記錄的寫鎖。

本方式是優化了上面方案的關鍵點併發更新的情況,擴充套件資料庫中的關鍵點資料表,從乙個資料表橫向擴充套件為10,100個,這樣相比於上面方案,這個的併發量相當於提公升了10倍,100倍。

在資料建立階段就將關鍵點的資料(庫存,領取量)按照一點規則分配到各個表中。在執行繫結coupon的時候,會隨機或者其他規則從乙個關鍵點表中更新資料,如果不成功,重試2次其他資料表更新。

特點:效能提公升:通過橫向擴充套件表,將併發提高n倍

實現比較服務,在資料庫層面將關鍵點資料橫向拆分成多表資料,業務處理時候要更新不同表中資料。

資料可靠:上面幾種方式都是直接運算元據庫,在極端情況下服務宕機不可用,資料都會儲存資料庫中。

該方案是通過redis高效能incr, decr原子操作實現關鍵點資料檢查的方式實現。在資料建立時候將關鍵點資料儲存到redis中,處理業務時候,執行到檢查易變資料時,直接更新通過redis.decr操作校驗資料,通過後將後續操作通過可靠mq非同步處理。mq的消費端在更新關鍵點資料時候,將多條記錄合併一次更新,比如50條扣減數量,一次update更新,提高資料庫的寫效能。後續的其他資料庫操作也都批量操作。

特點:資料可靠性依賴redis, mq,要保證redis可靠穩定。

資料庫層面不需要擴充套件,業務相對簡單些。

這個情況,不能將關鍵點資料的檢查和更新使用同乙個資料庫原子操作完成,咱們現在coupon服務就是這種情況,每個coupon的已經發放數量在 coupon表裡面沒有記錄,而是通過每次count關聯表來計算出來的,這個關鍵點資料檢查就是每次繫結前都count關聯表數量,然後對比發放最大人群數量。這種情況都是在獲取數量前加鎖,領取完成後釋放鎖,效能很低。

該方案是上面方案的簡化方式,通過在資料建立階段,將初始資料更新到redis中,每次有領取coupon的請求過來,在關鍵點資料檢查時候,redis.incr/decr方式,判斷資料是否檢查通過。通過之後執行後續資料庫操作,這種情況不存在高併發修改少量資料情況,效能不受寫鎖限制。

特點:資料可靠性依賴redis,要保證redis可靠穩定。

方案簡單。

查詢資料略慢,需要每次count關聯表數量。

如何寫專案設計方案

如何寫安防監控工程設計方案書 其他專案也適用 乙份成功安防監控工程設計方案是贏得單子的重要砝碼,如何寫乙份令客戶心動的安防監控工程設計方案則需要下苦功夫。監控系統是屬於弱電系統中的一種安防範系統,它集微機自動識別技術和現代安全管理措施為一體,是一種先進的 防範能力極強的綜合系統,它可以通過遙控攝像機...

TinyURL設計方案

現在貌似tinyurl很火爆,也逐漸成為一種流行趨勢。對應於php版本的tinyurl也有一些演算法,其實本質上來說是一種hash。除此之外,還有另外一種tinyurl方案 類似於http img.ly 其實這種設計 是最簡單的,沒有使用hash,而是遞增,這種的好 處就是資料庫 可以無限擴充套件,...

許可權設計方案

簡要介紹一下該許可權管理系統的特點,該系統功能上做到了靈活授權,操控細緻,許可權可以細到按鈕及超鏈級別,而且部署簡單,下面談談我自己的設計經驗。該系統主要功能如下 1 自定義操作動作 如增加 刪除 修改 審核等,不再是以前見過的那種粗粒度的 按模組分配許可權,或者稍微先進點的規定死某幾個操作了 2 ...