业务特点和常用技术方案
秒杀抢购是一种常见的用于聚集流量和吸引注意力的业务模式,为了吸引人群并提高下单欲望,我们决定通过发布秒杀优惠券活动来提高流量。
同时,必须了解秒杀抢购业务有如下的特点:
时间限制:通常设置一个小时或更短时间,当然限量销售并不会有这么长的时间。
限量销售:秒杀抢购商品通常数量有限,销售数量是提前确定的。
高并发和服务器压力: 抢购开始时大量用户会同时访问在线商城,导致网站服务器承受巨大压力。因此,网站的服务器和网络基础设施需要具备高并发处理能力,以应对瞬时大量的用户请求。
技术要求高:秒杀抢购业务对技术要求非常高,包括网站性能优化、数据库优化、缓存技术、负载均衡等方面的技术应用。
常用技术方案如下:
- 缓存方案
使用缓存技术(如Redis)来存储热点数据,例如商品信息和库存数量。这样可以减轻数据库的压力,提高读取数据的速度。 - 异步处理方案
当用户成功秒杀后,将抢购信息发送到队列,然后由消费者多线程异步处理订单,减轻系统的实时压力,使用Redis、RabbitMQ等技术都可以实现队列。 - 防止超卖方案
超卖是最终下单购买数量大于库存数量,比如:库存100个用户最终购买了101个,多出这一个就是超卖了,在秒杀抢购业务中这也是需要解决的问题,可以使用分布式锁、Redis等技术都可以防止超卖。 - 限流与防刷方案
使用限流算法(如令牌桶、漏桶算法)来控制请求的并发数,防止服务器被过多请求压垮。可以在服务端使用限流技术,比如:sentinel、nginx、验证码等技术。 - 数据库优化方案
对数据库进行优化,包括索引的设计、SQL语句的优化、数据库连接池的使用等,以提高数据库的查询和更新速度。 - 数据库分库分表方案
在数据库层面进行分库分表,将数据分散存储在不同的数据库实例或表中,提高数据库的读写性能。 - 负载均衡
使用负载均衡技术,例如Nginx、Spring Cloud Gateway等,将请求分发到多个服务器上,增加系统的处理能力。 - CDN加速
CDN(Content DeliveryNetwork)即内容分发网络,CDN用于加速静态资源的访问,将内容分发到CDN节点就近为客户提供服务。 - 安全性处理
确保系统的安全性,防止SQL注入、XSS攻击(跨站脚本攻击)等,同时在后端实现防刷、验证码等安全措施,保护系统免受恶意攻击。
抢券业务实现
需求分析得到抢券业务包含三部分内容:
1、活动查询
进入抢券页面查询优惠券活动信息。
2、抢券
点击抢券按钮进行抢券。
3、我的优惠券
抢券成功进入我的优惠券页面查询抢到的优惠券。
下边按顺序开发每一部分。
1、抢券活动查询
显示的数据
活动信息:
包括两个部分数据:
- 进行中还未到结束的优惠券活动。
- 1个月内待开始的优惠券活动。
信息内容包括:
优惠券活动名称
优惠券满减或折扣信息
活动的起止时间
是否抢光(根据库存剩余量判断)
活动的状态。
高并发场景下如何提高活动查询性能🌟
此部分信息来源于优惠券活动表,由于抢券页面面向C端用户且请求并发量大,如何在高并发下提高活动查询的性能呢?
如果直接查询数据库无法满足需求并且对数据库造成巨大的压力从而影响其它功能使用数据库,我们可以使用缓存,将优惠券活动信息存入缓存,比如Redis,从Redis查询避免查询数据库。
如何保证缓存一致性?避免缓存击穿?
通过定时预热程序保证缓存一致性,抢券页面列出的活动信息属于热点信息,对于热点信息通过定时预热防止缓存击穿,定时预热程序通过定时任务定时执行,定时将活动信息存入Redis。
Redis的数据结构如何设计?
因为要预热的活动信息内容有限,我们可以将要预热的活动信息转为json串存入redis,活动查询程序读取json串也方便进行解析。
redis结构:String类型
key: “ACTIVITY:LIST”
value: 符合条件的优惠券活动列表JSON数据。
过期时间:永不过期
如何保证定时任务准时开启?
- 前端请求后端接口查询活动信息
- 后端接口从redis查询活动信息,并根据活动开始和结束时间判断活动的最新状态
- 最后将活动信息及最新状态返回给前端。
2、抢券
提高高并发吞吐量
QPS:每秒查询数(Queries Per Second),它表示系统在每秒内能够处理的查询或请求的数量,是衡量一个系统处理请求的性能和吞吐量的指标。
在10秒内处理1万个请求,QPS为1000。每个请求处理的时间越短,QPS越大。
TPS:表示系统每秒完成的事务数,与QPS不同,TPS更关注系统的事务处理能力,而不仅仅是单纯的查询或请求,一次事务通常会包括多个请求。在高度事务性的系统中,如在线交易系统、支付系统等,TPS是一个关键指标,用于衡量系统的处理能力。
在开发中,对以上性能指标的优化,可通过CDN、缓存、异步处理、数据库优化、多线程、集群、负载均衡等技术去提高系统的吞吐量。当然,再优化也不要忘记系统保护,通过限流技术根据系统的性能指标进行限流保护。
限流是什么
限流是一种应用程序或系统资源管理的策略,用于控制对某个服务、接口或功能的访问速率。它的主要目的是防止过度的请求或流量超过系统的处理能力,从而保护系统的稳定性、可靠性和安全性。
限流主