高并发

并发扣款,保证数据的一致性

方案:使用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来进行水平扩展
  • 服务层的水平扩展,是通过“服务连接池”实现的
  • 数据库可以按照数据范围,或者数据哈希的方式来进行水平扩展
posted @ 2020-03-29 22:22  灿钿  阅读(139)  评论(0)    收藏  举报