聊聊秒杀系统的设计(四)

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:227131b4-eed9-4dc0-85ad-b5d80bee3848

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:0b41a7e9-8991-48e4-9061-7ac1daf4b28d

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:5967a3e2-e6f5-4e1f-940d-6e207e6581f6

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:e2d70769-49c5-4977-8cff-4923dc15f000

1.下单减库存:下单后,在商品的总库存中减去购买数量,下单减库存是最简单的减库存方式,也是控制最精确的一种,下单时直接通过数据库的事务机制控制商品库存,这样一定不会出现超卖的情况。

2.付款减库存:下单后,并不立即减库存,而是等到付款后才真正减库存,否则库存一直保留给其他买家,但因为付款时才减库存,如果并发比较高,有可能出现买家下单后付不了款的情况,可能商品已经被其他人买走了。

3.预扣库存:下单后,库存为其保留一定的时间, 超过这个时间,库存将会自动释放,释放后其他买家就可以继续购买,在买家付款前,系统会校验该库存是否还有保留,如果没有保留,则再次尝试预扣;如果库存不足则不允许继续付款;如果预扣成功,则完成付款并实际地减去库存,这种方式相对复杂一些。

以上这几种减库存的方式都会存在一些问题。 假如我们采用”下单减库存”的方式,正常情况下,买家下单后付款的概率会很高,所以不会有太大问题,但是有一种场景例外,就是当卖家参加某个活动时,此时活动的有效时间是商品的黄金售卖时间,通过恶意下单的方式将该卖家的商品全部下单,那么这款商品就不能正常售卖了。要知道,这些恶意下单的人是不会真正付款的。

既然”下单减库存”可能导致恶意下单,从而影响卖家的商品销售,那么有没有办法解决呢?你可能会想,采用”付款减库存”的方式是不是就可以了?的确可以,但是 “付款减库存”又会 导致另外一个问题:库存超卖。假如有10件商品,因为下单时不会减库存,就可能出现100人下单成功的情况,这样一 来,就会导致很多买家下单成功但是付不了款,购物体验自然比较差。

既然”下单减库存”和”付款减库存”都有缺点,我们能否采用”预扣库存”这种方式呢? 这种方案确实可以在一定程度上缓解上面的问题,但是否就彻底解决了呢?针对恶意 下单这种情况,虽然把有效的付款时间设置为10分钟,但是恶意买家完全可以在10分钟后再次下单。

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:56ea7c62-8626-45ba-8874-d6e134e6ebb1

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:e5a1639c-fa61-4405-985d-bafea0d681ab

由于参加秒杀的商品成功下单后却不付款的情况比较少,再加上卖家对秒杀商品的库存有严格限制,所以秒杀商品采用”下单减库存”更加合理。一般我们有多种解决方案: 一种是在应用程序中通过事务来判断,即保证减后库存不能为负数,否则就回滚;另一种办法是直接设置数据库的字段数据为 无符号整数, 这样减后库存字段值小于零时会直接执行SQL语句来报错。

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:27a4a978-b5ca-4b08-a040-2107f89512f9

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:f86983b1-38a7-484c-a256-287e31775dd2

1.架构阶段:架构阶段主要考虑系统的可扩展性和容错性,要避免系统出现单点问题,例如多机房部署,即使某个机房出现整体故障,仍然不会影响整体网站的运转。

2.编码阶段:编码最重要的是保证代码的健壮性,例如涉及远程调用问题时,要设置合理的超时退出机制,防止被其他系统拖垮。

3.测试阶段:测试主要是保证测试用例的覆盖度,保证最坏情况发生时,我们也有相应的处理流 程。

4.运行阶段:系统大部分时间都会处于运行态,运行态最重要的是对系统的监控要准确及时,发现问题能够准确报警并且报警数据要准确详细,以便于排查问题。

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:7a0deefd-c49d-496a-8157-b49994a1bbe7

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:9e1f1ca5-f422-4e8f-b6f6-357700e181e3

降级:就是当系统的容量达到一定程度时,限制或者关闭系统的某些非核心功能,从而把有限的资源保留给更核心的业务。降级方案可以这样设计:当秒杀流量达到5w/s时,把成交记录的获取从展示20条降级到只展示5条。

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:28ac5aa3-0ffc-4ac0-a663-c864beaceebf

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:20dca1f1-87f6-4401-be13-650a47e3da38

限流: 如果说降级是牺牲了一部分次要的功能和用户的体验效果,那么限流就是更极端的一种保护措施 了。限流就是当系统容量达到瓶颈时,我们需要通过限制一部分流量来保护系统,并做到既可以人工执行开关,也支持自动化保护的措施。

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:77fb6bb9-15b4-429f-b66b-57241aa151cc

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:871f0843-e19d-4345-ab51-6392c8e0e15a

以上的内容就是我所介绍的秒杀系统设计中的难点和一些解决思路,不是每个方案都完美,选择一个适合自己的才重要。

Original: https://www.cnblogs.com/hhhnicvscs/p/16710774.html
Author: 平凡程序猿
Title: 聊聊秒杀系统的设计(四)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/561845/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球