什么叫中等并發(fā)?不是高并發(fā),不是低并發(fā)
| 并發(fā)度 | 說明 | 舉?? | 典型方案 |
|---|---|---|---|
| 高并發(fā) | 短時間內(nèi)的大量并發(fā)沖突 | 秒殺活動 | redis緩存 + 串行化 + 異步 |
| 低并發(fā) | TPS很低。基本沒有并發(fā)沖突 | 后臺配置系統(tǒng) | 不需要處理/悲觀鎖/樂觀鎖 |
| 中并發(fā) | TPS比較平均,且有一定的并發(fā)沖突。 | 一般性的事務(wù)性系統(tǒng)。訂單,庫存,支付 | 下面詳細(xì)介紹 |
并發(fā)需要解決的兩大問題:
-
競態(tài)條件
競態(tài)條件.jpg
并發(fā)策略
| 策略 | 舉?? | 并發(fā)度 |
|---|---|---|
| 帶邊界更新 | update inventory set stock = stock - 1 where stock > 0 | **** |
| CAS | update order set status = 'confirmed' where status = 'init' | *** |
| 版本號 | update user set age = 18, version = version + 1 where version = ? | ** |
| 悲觀鎖 | select for update/update/delete | * |
-
冪等
冪等.jpg
冪等策略
| 場景 | 策略 | 舉?? |
|---|---|---|
| 插入冪等 | 檢測duplicated key沖突 | unique key(ordersn); insert into order(ordersn, ...) values ('SNXXX1', ...) |
| 刪除冪等 | 天然冪等 | delete from order where ordersn = 1 |
| 更新冪等 | 更新失敗后檢測值 | update order set status = 'confirmd' where status = 'init'; if updated = 0; select status from order; if status = 'confirmed' return true |
| 更新冪等 | 帶外部流水號,插入日志表,檢測duplicated key沖突 | insert into order_action(sequence, ...) values('流水號',...); update order set status = 'confirmd' where status = 'init'; |

