库存同步shopify

场景:当trendsi的sku库存发生变更后,需要将sku的实时库存同步shopify.同步过程中有三个条件约束

1.shopify的推送接口,针对shopId有限流设置,即相同shop ID,一秒内只能有2次推送

2.数据量庞大,相同sku可能被shopify的多个店铺导出,需要查询出sku的关联店铺,全部进行推送

3.sku变更后,推送有优先级顺序,例如 sku库存0->N或者N->0的优先级高于 5->7或9->6

设计思路:

这对以上三个卡点,分别采用一下方式实现:

1.接口限流,

将shopify推送接口分装为本地bean的public方法 syncShopify(Long shopId,Sku sku),使用sentinel的热点数据限流,对参数shopId进行限流,保证每秒只有2个请求。被限的请求数据,重新返回队列(每个店铺一个redis队列,FIFO队列,异常请求sku返回对尾,保证最早变更的sku优先同步)

2.数据量庞大

每次消费sku,都需要获取导出过此sku的店铺列表。数据查询缓慢,可以通过redis Bitmap(步长为shopId,value true表示导出,false表示未导出)快速判断

3.sku推送优先级

接收sku队列设置三个,SkuLevel1(最高) ,SkuLevel2(中等),SkuLevel3(最低),消费数据获取顺序

SkuLevel1>SkuLevel2>SkuLevel3.

4.兜底方案

为防止redis异常,使用rocketmq做兜底。

设置全局开关,

开关关闭,sku通过redis进行消费。

开发开启,sku通过mq发布订阅消费(消费异常,重置回对列)

流程图:

1.sku变更流程

限流下如何提高并发 - 图1

2.sku消费