小红书靠MySQL抗秒杀的方案
原文地址:https://mp.weixin.qq.com/s/Q-tap7xI3Y5diTMEt5hMyw 这个方案和我之前讲过的hint方案差不多,原文贴这里,供大家参考: “秒杀”是电商平台最典型的高并发促销场景,双十一等大促活动也常以秒杀能力作为数据库技术实力的标志。随着小红书电商业务快速增长,直播带货等爆品场景对极致下单速度的需求更加突出,希望将下单吞吐提升至 1W+/s。 基于 MySQL 内核实现的合并秒杀优化,相对排队秒杀方案,将秒杀写入能力再提升 5 倍,相对MySQL 社区版本更有百倍的性能提升。在设计上保持了和排队秒杀一致的能力,该能力对业务完全透明:仅需升级 MySQL 内核,无需改动 SQL,即可获得 5 倍以上性能提升。 该方案不仅显著提升库存、优惠券、红包等高抢购场景的用户体验,也能在热门笔记点赞等高频写入场景实现数量级性能增强。 24年小红书数据库团队首次通过对热点线程排队,将自研版本秒杀性能提升了10倍,但依然跟不上业务的快速发展。尤其是在直播带货、热门笔记点赞、爆品抢购等场景下,业务迫切需要更快的秒杀速度,本次数据库团队在自研内核上迭代实现了合并秒杀方案,将热点行更新速度提升5倍至1.5W/s+,极大提升了用户的使用体验。 合并秒杀版本在方案设计时考虑了和排队版本的兼容性,内核会根据SQL自动选择最优的秒杀方案。对于热点SQL,内核会依据SQL自动选择合并秒杀、排队秒杀和普通更新的最优解,只需升级MySQL内核版本,无需业务侧修改SQL即可享受到5倍以上的性能提升。 从下面性能分析图可以看到,在128线程秒杀时,TPS从4276提升至23543,提升约5.5倍。在1024线程极端场景下,仍然有4.7倍性能提升。随着线程数的升高,线程切换的开销越来越大,TPS也逐步下降,因此建议线程数保持在128-256之间以获得最佳性能。 测试数据均为sysbench模拟标准库存扣减模型进行的压测数据。 首先对秒杀场景进行分析,抽象出了它的事务模型。下面所示为最经典的库存扣减模型: begin; insert into inventory_log value (…); – 插入库存修改的流水表 ...