高阶面试-写缓存

场景

超低价预约大型线上活动,在某天9:00~9:15期间,用户可以前往详情页半价预约抢购一款热门商品。根据市场部门的策划方案,这次活动的运营目标是几十万左右的预约量。

设计目标

设计的目标是:用户1分钟内就完成90%的预约量,即90万预约。那么推算出目标的TPS(吞吐量)就是9万/60=1.5万

原来预约就是个简单的功能,并没有做高并发设计。对它做了一次压力测试,结果最大的TPS是2200左右,与需求值差距较大。

思路

写缓存的思路是后台服务接收到用户请求时,如果请求校验没问题,数据并不会直接落库,而是先存储在缓存层中,缓存层中写请求达到一定数量时再进行批量落库。利用写缓存比数据库高几个量级的吞吐能力来承受洪峰流量,再匀速迁移数据到数据库

写请求和批量落库是同步还是异步

优缺点比较

同步

  • 优点:用户预约成功后,可在“我的预约”页面立即看到预约数据
  • 缺点:用户提交预约后,还需要等待一段时间才能返回结果,且这个时间不定

异步:

  • 优点:用户能快速知道提交结果
  • 缺点:用户提交完成后,如果查看“我的预约”页面,可能会出现没有数据的情况
复杂度:

同步:写请求提交数据时,写请求的线程被堵塞或者等待,待批量落库完成后再发送信号给写请求的线程,这个线程获得落库完成的信号后,返回预约成功提示给用户

会引申出一系列问题

  • 用户要等多久,需要设置时间窗,比如100ms批量落库一次
  • 批量落库超时怎么处理 设置写请求阻塞的超时时间
  • 批量落库失败 是否重试,重试几次

异步不需要考虑 超时处理、重试,更合适

用户体验优化:预约成功,进入预

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值