秒杀大促-淘宝用缓存实现方式

62 篇文章 1 订阅
62 篇文章 1 订阅

从淘宝缓存产品的研发和使用场景的历程来看,是随着业务的快速发展以及某些特定业务场景的出现而逐步演变的。早期通过缓存实现应用分布式session,以避免应用实例间会话的复制,

后来发展为将缓存用于业务去重判断、交易快照、图片索引等场景,最后替换数据库在业务交易处理中的职能,缓存平台在业务场景中扮演了越来越重要的角色。目前在整个阿里巴巴集团部

署了近千台缓存服务器,保存了百亿级别的数据,满足业务对数据库90%以上的请求。

所谓的大促、秒杀场景,其关键词有“低廉 价格”、“大幅推广”、“瞬时售空”,只有满足这三 个关键词的场景才能称为大促、秒杀的场景。

比如库存为10个,秒杀价格为1元的手机则 是典型的小库存商品秒杀活动。在这种类型的秒 杀活动中,因为商品会在极短的瞬间库存会降到 0,所以只要处理好商品的库存的扣减,不要出 现商品超卖的情况就能平稳地度过这次秒杀活动。

首先一定要让负责秒杀场景的商品中心应用 实例(图中“秒杀IC”)与满足普通商品正常访问 的商品中心应用实例(图中IC)隔离部署,通过 服务分组方式,保持两个运行环境的隔离。

将商品的详细信息(包括库存信息)保 存在缓存服务器上,商品详情页和购买页所有有 关商品的信息均是通过缓存服务器获取,则无需 访问后端数据库。

通过JavaScript代 码的方式修改定时器时间使商品界面上提前显示 出商品下单的操作按钮,或是通过跳过定时器控 制的方式直接访问商品的下单链接URL,达到在 秒杀活动前就提前对秒杀商品的下单。

为了杜绝 这种现象的发生,解决的方法则是在服务端在接 收到用户提交商品下单的请求后,一定要检查一 下当前服务器的时间是否晚于秒杀活动的开始时间,否则就要拒绝该商品下单请求。 将事务开始前获取的库 存数量带入到SQL语句中与目前数据库记录中的 库存数量进行判断,如果数量相等,则该条更新 库存的语句成功执行;如果不相等,则表示该商 品的库存信息在当前事务执行过程中已经被其他 事务修改,则会放弃该条update的执行,可以采 用重试的机制重新执行该事务,避免商品超卖的发生。

在小库存商品的秒杀场景中,缓存平台提供了对商品相关信息的缓存服务,使得用户只有在最终的下单环节才需要对数据库进行访问操作,大大降低了数据库的访问频率,而且因为商品的库存少,秒杀活动转瞬间就结束了,所以采用这 样的架构基本就能满足该类大促秒杀场景业务的要求。

在数据库中成功创建订单详单后,会发送一 个库存修改的请求到消息服务器。因为一般的缓 存平台还不支持MVCC或数据锁的功能,此时利用消息服务可让库存修改的请求线性处理,这里可利用上文提到的事务消息的方式,保证在订单详单创建成功后,发送消息到消息服务器,当消息的订阅程序从消息服务器获取到消息后,则对缓存中的库存数据进行更新处理。因为缓存数据更新时间在纳秒级,所以整体的库存处理性能相比传统数据库方式差别至少在百倍。当缓存中的 库存数据成功更新后,则将之前创建的订单详情状态修改为成功下单状态,整个订单创建过程结束。

****************************************************************************

【如果文字看累了,可b站搜索“沙皮狗2021”,用听的方式领略知识的魅力】

   传送门 :https://space.bilibili.com/407643589

【微信公众号】:沙皮狗2021

****************************************************************************

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛慢慢向上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值