spikeSystem icon indicating copy to clipboard operation
spikeSystem copied to clipboard

代码都看了,当某台服务器挂了,上面的余票怎么重新分配到剩余服务器上,最关键的地方没写。

Open MukuroSama opened this issue 5 years ago • 7 comments

MukuroSama avatar Nov 16 '19 09:11 MukuroSama

不是说通过每台机器上留 buffer 解决吗?比如 100 台机器每台分配 105 张票,这样就有 500 张 buff 票,就能容忍 5 台机器宕机。 最后通过 redis 的统一库存就能保证不会超买这 500 张 buffer 票

wcp1231 avatar Nov 20 '19 02:11 wcp1231

不是说通过每台机器上留 buffer 解决吗?比如 100 台机器每台分配 105 张票,这样就有 500 张 buff 票,就能容忍 5 台机器宕机。 最后通过 redis 的统一库存就能保证不会超买这 500 张 buffer 票

但是这个逻辑 localSpike.LocalDeductionStock() 是不是会导致少买宕机机器上的余票?

hegw avatar Nov 25 '19 07:11 hegw

不是说通过每台机器上留 buffer 解决吗?比如 100 台机器每台分配 105 张票,这样就有 500 张 buff 票,就能容忍 5 台机器宕机。 最后通过 redis 的统一库存就能保证不会超买这 500 张 buffer 票

但是这个逻辑 localSpike.LocalDeductionStock() 是不是会导致少买宕机机器上的余票?

为啥会少买?比如 redis 缓存总的票有 10000 张。100 台机器每台分配 105 张票,这样所有机器本地的票加起来有 10500 张,就算一开始就立马挂了两台,本地机器的票加起来也有 10290 张。不会因为挂了两台就只卖 9800 张啊,因为剩下的机器的本地总票比 10000 张还多了 290 张。

本地 LocalDeductionStock 的作用是为了减少不必要的 redis 请求吧,本地的卖完了就不用请求 redis 了。然后因为有负载均衡,所以每台机器的请求应该是均匀的,不会出现一台机器卖完了很久其他机器都还没卖完。

wcp1231 avatar Nov 25 '19 08:11 wcp1231

不是说通过每台机器上留 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缓存总的票,误认为这部分少了。 非常感谢! !!

hegw avatar Nov 26 '19 06:11 hegw

这种方式和扣减redis库存失败后在服务器上缓存一个库存已消耗光的标志位的方式相比 收益很大么?

Angelof7 avatar Dec 11 '19 10:12 Angelof7

这种方式和扣减redis库存失败后在服务器上缓存一个库存已消耗光的标志位的方式相比 收益很大么?

同问 @GuoZhaoran

yeongjet avatar Mar 26 '20 08:03 yeongjet

我有个疑惑,就是写MQ的时机,我在代码上有看到扣减远端redis,但没有看到扣减MQ的时机。在图片上看到是订单量100连到MQ,这是说本地服务扣减满100后去写MQ嘛? 这里要是本地服务宕机,那不是数据就出现不一致了?

younglifestyle avatar Jan 28 '21 01:01 younglifestyle