18

电商系统中,50W-100W高并发,秒杀功能是怎么实现的?

 3 years ago
source link: https://zhuanlan.zhihu.com/p/345603042
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

电商系统中,50W-100W高并发,秒杀功能是怎么实现的?

美帝代码搬运工,资深面试官,微信公众号-九章算法

秒杀系统是我在面试中问得比较多的,如果说程序 = 算法 +数据结构的话,那么系统 = 服务 + 数据存储。所以系统设计中,我们更多的是围绕服务和数据存储来讨论。

有时间的同学可以看下阿里面试官关于秒杀系统的干货分享:淘宝秒杀系统怎么设计?

举个简单例子:双11,商家以4499的价格上架了某iphone,比官网价格便宜了1000元,库存总数10台,运营设置11/11 00:00活动生效,一人只能购买1台,商品售完为止。
梳理下用户端的流程图

v2-d882b2f82bcb57a418e7a171c1cf58d9_720w.jpg

根据九章算法独家系统设计4S分析法,第一步Scenario场景。需要确定设计哪些功能,承受多大的访问量?

这里有个常见概念QPS(Query Per Second),即一秒内可以处理的请求数量。假如一个服务的RT是20ms,则QPS为50,这里计算的是单机单线程QPS,如果计算集群的话,需要考虑集群数量和线程数量。

这时候需要确认秒杀商品的请求QPS是多少。如果面试官说峰值大概量级在100万,那么按照服务单线程QPS是50,单台最大线程数按3来计算的话,单台机器最大支撑150的QPS,那么至少需要100W/150=6667台机器。

常见的组件最大QPS,mysql单机1000QPS,Redis单机10万QPS。

第二步,Service服务。秒杀系统服务设计大致如下

v2-b8be2eb4bf35abcc77b13d7027136113_720w.jpg

第三步,Storage存储,数据是如何存储和访问的。为每个服务选择合适的存储结构,然后细化数据表结构。这个例子中,秒杀系统数据库设计如下

v2-1218318a157b9a2f9ee121901e4998d5_720w.jpg

于是我们可以得到秒杀活动中,数据库之间的关系如图所示

v2-8fc3a45b93d02154010974ba764235b1_720w.jpg

接下来就是mysql扣库存了。秒杀系统一定会遇到的就是并发问题,这里说下乐观锁和悲观锁。

悲观锁的流程如下:

v2-0b238296db1cf727757737212e306fc6_720w.jpg

乐观锁流程如下:

可以看到悲观锁的问题是会占用大量的线程资源,可能导致mysql的线程耗尽。在对于数据一致性要求非常高的场景中,一般用悲观锁;而乐观锁在version变动频繁的情况下则不适用,比如这里的秒杀系统就不太适合用乐观锁,因为库存变化太快了。

另外可以再看下Redis下的秒杀系统数据库设计。

几个关于秒杀系统中Redis的常见问题:

1.什么时候把库存写入到Redis?
秒杀活动创建/维护时写入Redis。
2.如何保证活动数据库和库存数据一致?
可以使用分布式事务或消息队列。
分布式事务:保证多个数据库的操作同时成功或者同时失败。对强一致性有要求的业务场景可以考虑使用分布式事务,比如银行转账

消息队列:基于生产者/消费者模型的组件,一般实现异步任务(非实时处理)时会引入消息队列。消息队列的好处是任务可以慢慢处理,不必同步处理等着响应结果。目前主流的消息队列有RocketMQ、Kafka等。使用场景除了异步任务之外,一般还用于失败的情况下重试处理,重复消费直到消费成功。

3.下单减库存/支付减库存?
下单锁定库存,支付减库存。
4.如何防止商品被超卖?
把库存数据放入到缓存中,利用缓存的原子特性保证同时只有一个线程操作库存。
5.库存写回数据库的时机?
采用定时任务同步Redis的数据写回数据库。

最后,4S分析法的第四步,Scale扩展。对于秒杀系统来说,就是高并发场景下如何保证系统稳定和高可用,以及后续的优化。限于篇幅,可以来看看《系统架构设计 System Design 2020 版》。

另外关于秒杀系统的实操和代码实现,我们新开了一门《秒杀系统项目课》,将通过9天时间详细剖析秒杀系统涉及的8大技术架构和15个核心技术点,手把手带你实现秒杀系统,可直接写入简历,为简历增色。首节直播免费开放,有兴趣的同学可以先来占个坑。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK