高并发
并发扣款,保证数据的一致性
方案:使用CAS解决,更新前确保原金额未改变
UPDATE t_account SET money=$new_money WHERE uid=$uid AND money=$old_money;
基于“值”的CAS乐观锁,可能导致ABA问题
方案:CAS乐观锁,由“值”比对优化成“版本号”比对
UPDATE t_account SET money=38, version=$version_new WHERE uid=$uid AND version=$version_old;
系统层面,秒杀业务的优化方向如何?
- 将请求尽量拦截在系统上游,而不要让锁冲突落到数据库
- 充分利用缓存,例如用redis加锁拦截掉90%的请求
如何提升系统的并发能力?
- 垂直扩展
- 水平扩展
什么是垂直扩展?
- 增强单机硬件性能,例如:增加CPU核数如32核
- 提升单机架构性能,例如:使用Cache来减少IO次数
什么是水平扩展?
- 反向代理层可以通过“DNS轮询”的方式来进行水平扩展
- 站点层可以通过nginx来进行水平扩展
- 服务层的水平扩展,是通过“服务连接池”实现的
- 数据库可以按照数据范围,或者数据哈希的方式来进行水平扩展
凡事都有它的原因,决策才是最重要的

浙公网安备 33010602011771号