背景
最近在做一个新的对账平台,旧的对账系统存在很多问题,其中一个问题就是性能问题,因此新的对账平台从设计之初就考虑了性能这一块,下面不会讲为什么选择做新的对账平台,也不会讲对账平台的其他设计,就说一下如何使用xxl的分片广播路由策略实现对账的分片计算。
场景分析
渠道对账,一天一个批次,我们对接了100个渠道,然后每个渠道一天有100W的订单数,这是假设,不过对账平台的对账数据量的确会不断增加,事实上我们的对账平台不仅仅只有渠道对账,还有内部业务对账,因此单机计算不行,很自然的想到分片计算,就是我们可以通过增加对账服务实例数量来增加对账的性能,以此来保障性能要求。
实现原理
抽象出两个概念对账批次和对账单,一个对账批次下有多笔对账单,批次下的每个对账单都对齐了那这个对账批次就算对齐了,分片计算就是作用在单笔对账单上。我们拿订单ID去mod总分片数,如果值等于当前对账服务的分片序号那就分配给当前实例来计算。
具体实现
1、设置job的路由策略
2、获取总分片数和当前服务的分片序号
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
int index = 0;
int total = 1;
if (shardingVO != null) {
index = shar