Skip to content

Latest commit

 

History

History
58 lines (40 loc) · 1.94 KB

File metadata and controls

58 lines (40 loc) · 1.94 KB

场景应用

微信红包

概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量

  • 什么时候算微信金额
  • 抢到红包,点开发现没有?
  • 红包的金额怎么算?为什么各红包的金额相差很大?
  • 红包的设计
  • 红包如何计算被抢完?
  • 如何保存8w每秒的写入
  • 扩容量多少?
  • 查询红包分配,压力大不?
  • 一个红包一个队列?
  • 如何从数据上证明每个红包的概率是不是均等的?
  • 拍脑袋算法,会不会出现两个最佳?
  • 每领一个红包就更新数据么?
  • 红包如何入库入账?
  • 入账出错怎么办?比如红包个数没了,金额还有?

秒杀系统

  • 秒杀系统应该考虑什么问题?

    • 超卖问题

      假如库存只有100,超卖了200。

    • 高并发

      秒杀时间短,并发量大,秒杀持续时间只有几分钟,后端如何防止并发过高造成缓存击穿或失效,击垮数据库等?

    • 接口防刷

      针对秒杀软件(模拟不断向后台服务器发起请求),如何防止这类软件的重复无效请求?防止不断发起的请求?

    • 秒杀URL

      在未到规定时间,秒杀的按钮是灰色的,一旦到达规定时间,灰色按钮变为可点击状态。一般可以通过F12看到浏览器的network找到秒杀的URL,可以通过特定的软件请求URL实现秒杀,如何防止?

    • 数据库设计

      秒杀有击垮服务器的风险,如果和其他业务的数据库耦合在一起,就很可能牵连和影响其他的业务。如何防止秒杀发生宕机、服务器卡死的问题,尽量不影响线上正常运行的业务。

  • 设计方案?

    • 数据库设计
    • 秒杀URL设计
    • 页面静态化设计
    • 单体redis升级为集群redis
    • 使用Nginx
    • 精简SQL
    • redis预减库存
    • 接口限流
    • 异步下单
    • 服务降级