spikeSystem
spikeSystem copied to clipboard
代码都看了,当某台服务器挂了,上面的余票怎么重新分配到剩余服务器上,最关键的地方没写。
不是说通过每台机器上留 buffer 解决吗?比如 100 台机器每台分配 105 张票,这样就有 500 张 buff 票,就能容忍 5 台机器宕机。 最后通过 redis 的统一库存就能保证不会超买这 500 张 buffer 票
不是说通过每台机器上留 buffer 解决吗?比如 100 台机器每台分配 105 张票,这样就有 500 张 buff 票,就能容忍 5 台机器宕机。 最后通过 redis 的统一库存就能保证不会超买这 500 张 buffer 票
但是这个逻辑 localSpike.LocalDeductionStock() 是不是会导致少买宕机机器上的余票?
不是说通过每台机器上留 buffer 解决吗?比如 100 台机器每台分配 105 张票,这样就有 500 张 buff 票,就能容忍 5 台机器宕机。 最后通过 redis 的统一库存就能保证不会超买这 500 张 buffer 票
但是这个逻辑 localSpike.LocalDeductionStock() 是不是会导致少买宕机机器上的余票?
为啥会少买?比如 redis 缓存总的票有 10000 张。100 台机器每台分配 105 张票,这样所有机器本地的票加起来有 10500 张,就算一开始就立马挂了两台,本地机器的票加起来也有 10290 张。不会因为挂了两台就只卖 9800 张啊,因为剩下的机器的本地总票比 10000 张还多了 290 张。
本地 LocalDeductionStock
的作用是为了减少不必要的 redis 请求吧,本地的卖完了就不用请求 redis 了。然后因为有负载均衡,所以每台机器的请求应该是均匀的,不会出现一台机器卖完了很久其他机器都还没卖完。
不是说通过每台机器上留 buffer 解决吗?比如 100 台机器每台分配 105 张票,这样就有 500 张 buff 票,就能容忍 5 台机器宕机。 最后通过 redis 的统一库存就能保证不会超买这 500 张 buffer 票
但是这个逻辑 localSpike.LocalDeductionStock() 是不是会导致少买宕机机器上的余票?
为啥会少买?比如 redis 缓存总的票有 10000 张。100 台机器每台分配 105 张票,这样所有机器本地的票加起来有 10500 张,就算一开始就立马挂了两台,本地机器的票加起来也有 10290 张。不会因为挂了两台就只卖 9800 张啊,因为剩下的机器的本地总票比 10000 张还多了 290 张。
本地
LocalDeductionStock
的作用是为了减少不必要的 redis 请求吧,本地的卖完了就不用请求 redis 了。然后因为有负载均衡,所以每台机器的请求应该是均匀的,不会出现一台机器卖完了很久其他机器都还没卖完。
@wcp1231 你这么说我就明白了,是我理解错了,错将buff票计入了redis缓存总的票,误认为这部分少了。 非常感谢! !!
这种方式和扣减redis库存失败后在服务器上缓存一个库存已消耗光的标志位的方式相比 收益很大么?
这种方式和扣减redis库存失败后在服务器上缓存一个库存已消耗光的标志位的方式相比 收益很大么?
同问 @GuoZhaoran
我有个疑惑,就是写MQ的时机,我在代码上有看到扣减远端redis,但没有看到扣减MQ的时机。在图片上看到是订单量100连到MQ,这是说本地服务扣减满100后去写MQ嘛? 这里要是本地服务宕机,那不是数据就出现不一致了?