热点隔离
秒杀系统设计的第一个原则就是将这种热点数据隔离出来,不要让1%的请求影响到另外的99%,隔离出来后也更方便对这1%的请求做针对性优化。针对秒杀我们做了多个层次的隔离:
- 业务隔离。把秒杀做成一种营销活动,卖家要参加秒杀这种营销活动需要单独报名,从技术上来说,卖家报名后对我们来说就是已知热点,当真正开始时我们可以提前做好预热。
- 系统隔离。系统隔离更多是运行时的隔离,可以通过分组部署的方式和另外99%分开。秒杀还申请了单独的域名,目的也是让请求落到不同的集群中。
- 数据隔离。秒杀所调用的数据大部分都是热数据,比如会启用单独cache集群或MySQL数据库来放热点数据,目前也是不想0.01%的数据影响另外99.99%。
优化思路
缓存、把整个页面Cache在用户浏览器,将90%的数据缓存在客户端浏览器。
秒杀答题、验证码、拼图、防止秒杀器。
分流、限流保护。
库存不能减为负数。
主备,如果有条件做好主备容灾方案也是非常有必要的。
异步,分析并识别出可以异步处理的逻辑,比如日志,缩短系统响应时间。
思考
如何防止单个用户重复秒杀下单?
如何防止恶意调用秒杀接口?
如果用户秒杀成功,一直不支付该怎么办?
消息队列处理完成后,如果异步通知给用户秒杀成功?
如何保障 Redis、Zookeeper 、Kafka 服务的正常运行(高可用)?
高并发下秒杀业务如何做到不影响其他业务(隔离性)?
网友评论