目录
秒杀系统本质上仍然是读数据的热点问题,而且是最简单的 前面已经提及通过业务隔离能够提前识别热点数据,就好比通过分析历史成交记录可以发现热门商品、通过分析用户的购物车记录也可以发现比较好卖的商品一样。难点在于未能提前发现的商品突然成为热点------这就要通过实时热点数据分析来判断了。我们做了可以在3秒内发现交易链路上的实时热点数据的设计,并根据实时发现的热点数据实时保护每个系统,它的具体实现步骤简述如下。
热点数据实时保护步骤
第一步,构建一个异步的、可以收集交易链路上各个中间件产品(如 TengineTair 缓存、 HSF 等)本身统计的热点 key ( Tengine Tair 缓存等中间件产品本身已经有热点统计模块)。
第二步,建立热点上报和可以按照需求订阅的热点服务的下发规范,主要目的是通过交易链路上各个系统(详情、购物车、交易、优惠、库存、物流)访问的时间差,把上游已经发现的热点透传给下游系统,提前做好保护(比如在大促高峰期,详情系统是最早知道哪些是热点商品的),在统计接入层上用 Teng in 模块统计出热 URL。
第三步,将上游系统收集到的热点数据发送到热点服务台上,这样下游系统如交易系统就会知道哪些商品被频繁调用,再对此做热点保护。
重要注意事项如下
热点服务后台抓取热点数据日志最好是异步的,一方面便于做到通用性,另一方面不影响业务系统和中间件产品的主流程。
热点服务后台、现有各个中间件和应用本身的保护措施没有取代关系,每个中间件和应用还需要保护自己 热点服务台提供收集热点数据、热点订阅服务的统一规范和工具,便于各个系统热点数据透明化。
热点发现要做到实时(3 秒以内)。
实时热点发现策略
针对秒杀系统中的实时热点数据发现,可以采取以下策略:
一、构建异步系统
秒杀系统可以构建一个异步系统,用于收集交易链路上各个环节的中间件产品的热点key信息,如Nginx访问URL、缓存命中情况等。
这些中间件产品(如Nginx、缓存系统、RPC服务框架等)本身可能具备热点统计模块,可以实时收集并上报热点数据。
二、热点上报和订阅机制
建立热点上报和按需订阅热点服务的下发规范。通过交易链路上的各个系统(如详情页、购物车、交易、优惠、库存、物流等)之间的时间差,将上游系统发现的热点数据透传给下游系统。
例如,在大促期间,详情页系统最早知道哪些商品可能成为热点,然后通过统一接入的Nginx模块统计热点URL,并将这些信息上报给热点服务台。
三、实时数据分析
对收集到的热点数据进行实时分析,通过大数据计算、统计等方法识别出真正的热点数据。
分析结果可以通过订阅分发的方式推送到各个系统,各系统根据自身需求决定如何处理这些热点数据,如进行缓存、限流等。
四、异步采集与秒级响应
热点数据采集最好采用异步方式,以保证不影响业务的核心交易链路。
热点发现应做到秒级实时,以便在热点数据产生时立即做出响应,防止系统过载。
热点数据处理
一旦热点数据被发现,需要进行有效的处理以减轻系统压力。
一、缓存优化
缓存热点数据是最为有效的优化手段。通过缓存热点数据,可以减少对后端数据库的访问次数,降低系统压力。
热点数据可以存储在Redis等高速缓存系统中,并设置合理的过期时间和淘汰策略。
二、限流与隔离
对热点操作进行限流处理,防止恶意刷单或过度访问导致系统崩溃。
隔离热点数据与普通数据,确保热点数据的处理不会影响到其他正常数据的处理。
可以通过业务隔离、系统隔离和数据隔离等多种方式实现隔离效果。
三、动态调整
根据热点数据的实时变化动态调整系统资源分配和处理策略。
例如,在热点数据流量激增时,可以自动增加缓存容量、调整限流阈值或增加服务器资源等。
秒杀商品测试时需要注意的事项?
一、功能测试
秒杀时间设置:确保秒杀活动在设定的时间范围内正确开启和结束,用户可以在指定时间内参与秒杀。
限购数量:测试用户购买数量的限制,包括边界值测试(如最大购买数量、最小购买数量)和异常测试(如一个ID多次购买)。
付款时间:测试付款时间的边界值,如支付超时后的处理逻辑。
库存处理:测试秒杀过程中库存的实时变化,包括超时支付后库存的恢复处理。
并发购买:测试多个用户同时购买同一商品时的成交规则,确保系统的幂等性(即同一订单只能成交一次,其他尝试失败)。
订单回调:测试订单在不同状态(如支付成功、支付失败、自动取消支付、风控取消)下的回调处理逻辑。
主动查询:测试用户主动查询订单状态的功能,确保系统能够准确同步并返回订单的最新状态。
二、性能测试
并发数测试:模拟高并发情况,测试系统同时支持多少用户一起秒杀,确保系统在高并发下的稳定性和响应速度。
接口限制:测试系统接口的访问限制,如一秒内允许的最大访问次数,以保证系统的稳定性和防止恶意攻击。
响应速度:测试系统的响应速度和页面加载速度,确保用户在秒杀过程中能够快速完成操作。
三、安全测试
越权下单:测试无权购买某个商品的用户尝试下单时系统的处理逻辑,防止越权操作。
数据越权:测试无权查看某些数据的用户是否能够获取到这些数据,确保数据的安全性。
支付接口加密:测试支付接口的数据加密传输情况,确保用户的支付信息在传输过程中不被窃取。
数据库日志加密:测试数据库日志中的敏感信息是否加密存储,防止敏感信息泄露。
四、其他测试
用户场景测试:针对不同的用户场景进行测试,如新用户、老用户、不同设备、不同网络环境等,确保系统在各种场景下都能正常运行。
容错性测试:测试系统在高负载、数据库连接超时等异常情况下的容错能力,确保系统能够自动处理这些错误并恢复正常运行。
标签:缓存,数据,系统,实时,秒杀,测试,热点 From: https://blog.csdn.net/qd_lifeng/article/details/141927362