所谓秒杀系统就是短时间大量请求涌入导致系统无法承载的情况的处理
首先从请求层级进行分析:
browser->DNS->Web server->Business(Site)->Cache->DB
browser:浏览器,即客户端,通常为前端
DNS:域名统一转发器,一般我们程序中涉及不到,只在超大型应用中需要优化
Web server:站点服务器,接收服务并交给我们的业务代码处理
Business:我们的业务处理站点,也是我们平时编码比较多的地方
Cache:缓存,临时数据库,存储系统部分数据,吞吐量高
DB:数据库,数据持久化保存,为应用中的数据核心
这是我们一般应用开发的基础及流量的流向。
面对大量请求的涌入我们的解决方案:
1.请求过滤
在browser层对用户进行过滤,避免用户出现重复提交的情况,超出库存等情况。服务端代码做用户身份验证,同一ip短时间的重复提交拒绝服务。
这一操作的目的时处理各种无效请求,保证进入服务的的请求都是有效请求。总之能在上层处理的验证就不要交给下层,比如能
操作前端就不要操作后端,能在网关过滤就不要在服务里面过滤,能操作缓存就不要操作数据库。
2.缓存
服务器的承载只是一方面,一般系统高并发的瓶颈在于数据库的吞吐量,数据库的连接数时非常有限的,但是缓存的吞吐量比数据库要高的多
一般通过缓存帮助数据库缓解压力可以显著提高系统的吞吐量。如第一次查询时查数据库,后续用户查询同一条记录,就取缓存中的记录,用户更新数据时删除缓存。
一般互联网系统查的场景要比改的场景要多的多,这样设置以后可以显著减少数据库的压力
3.锁库存
一旦用户下单成功,我们需要锁库存,避免超卖或没货的情况
4.队列
队列处理一些耗时长的操作,为应用减压
5.限流熔断
不管我们的系统设计的再好,总有一个最大的承载量,一旦超出承载量,即把服务熔断,避免服务器宕机
总结:
所学有限,抛砖引玉,望大佬指点。