Spring boot框架下,Scheduling在分布式场景下如何实现数据切分处理

Neon_Wang 发布于 2017/06/30 18:56
阅读 393
收藏 0

## 场景:

项目中有个定时任务,使用的是Spring的Scheduling的定时调度功能。

该任务会全量查询设备表里的设备,进行下发命令操作,目前设备量在百万左右。

### 当前处理方式:

任务启动时查询所有设备,在依据设备是否连接在当前实例中,来下发命令。 

当前这种处理方式只能把设备的连接管理和设备命令下发写在一个模块中,现在需要拆分为2个模块。

## 问题:

原本想采用Quartz来实现分布式任务调用,但是发现这种设计有缺陷: 单实例会查询所有设备并下发所有命令,会造成所在服务器巨大压力,不支持更大的设备量。

##目的:

解决思路: 不采用Quartz,依旧使用Spring的Scheduling,配合redis得到主节点,主节点依据zk得到节点数,把全量查询到的设备数量切片,发送消息给各子节点,子节点依据偏移量查询对应的设备并发下命令。

以上这种思路个人不是很满意,感觉步骤略多,所以在这抛出这个问题,想请教下各位有没有更优的思路?如果有,请不吝赐教,万分感谢。

 

最好是能实现自动数据切片给各实例~~ :)

 

 

 

 

加载中
0
武伟峰
武伟峰

直接做数据表拆分不是简单些,百万级了,不管是主节点还是分节点扫描都是很大的工作量。不如直接拆分表,譬如10个表,然后定时任务也起10个,各扫一个表。这样逻辑就简单了许多,也不依赖那么多中间件了。表拆分对于业务服务是透明的,不会影响。只用来方便你这个扫描业务。

Neon_Wang
Neon_Wang
这种方式还是避免不了数据量变多的情况,如果以后数据量更多,只能分更多的表,起更多的定时, 而且使用分布式的方式跑,不能避免所有任务在一个实例上启动的情况,依旧解决不了问题。 感觉最优的方案就是数据切片
0
许雪里
许雪里
你好,可以尝试#xxl-job# 的分片任务啊,支持动态分片,大数据量处理非常高效。
返回顶部
顶部