数据库数据倾斜

[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/Bug-Log-Optimization/database-skew.html


其实改动不是很大,这里简单记录下

背景

  • OMS订单系统,日数据量较大平均近3kw/日,高峰达8kw+/日的订单需要存到数据库中(之前64库,现在扩到了128库);
  • 运维后台监控看到,各个库的压力不一,江浙沪,京津冀,深圳755等地区对应的数据库压力很高,而其他地区的数据库压力很低;

分析

  • 数据库通过mycat,以分库号字段进行分库,以内部订单号分表
  • 内部订单号规则: 3位分库号+系统来源(2位)+MMDDHHmmssSSS+订单类型+6位随机数+1位校验码=26位
  • 分库号生成规则为根据地区、网点进行生成;

因此,可以看出,同一地区的订单,分库号是一样的,因此,同一地区的订单,会落在同一个库中;

解决

直接粗暴修改分库号生成规则为0~127区间随机生成,因为原有订单的删、改、查最终都会带上原有的内部订单号,所以不会影响到历史数据,只是新的订单会落在不同的库中;

上线方案

因为是S级系统,上线加了开关,如若有问题,可以快速回滚,因为是中台消费者系统,期间如果出问题的数据通过关闭开关+kfk重置偏移量解决。

上线后效果

(此处应有截图)

作者

神奇宝贝大师

发布于

2021-05-04

更新于

2021-05-04

许可协议

评论