①问题场景:一个新用户注册后,会有一个任务开始执行,每个用户都有自己对应单独的一个任务.这个任务是24*7一直在实时运行监控的(计算任务/Http请求/耗时任务).(有点类似携程app高铁票抢票的意思.)②我的思路:一开始想的是一个新用户进来就新开一条线程.或者管理一个线程池,把任务全都放进一个队列中.循环的在线程池进行任务的计算.但是中途会有新用户(任务)进来.而且这样如果用户量一多的话好像想过不是很理性.也就是线程池每批进行n个任务的运行.但是这样所有用户一轮下来时间好像有点长.③向大佬请教:我也挺小白的,所以想问一下具体这种场景比较推荐怎么样的实现方式/思路.困扰了我好久.**感谢大佬.!**
2 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
建立任务池,多个任务节点监控任务池,一旦有任务进入任务池就自动领任务定时任务创建程序定时将任务扔入任务池用户注册成功之后加入定时任务里任务创建-->任务池-->任务节点运行任务
Helenr
TA贡献1780条经验 获得超4个赞
单机的就不说了。数据量大了,肯定要用分布式。下面说下分布式的思想(假设有n个任务节点):可以通过一致性hash的方式去分配任务,用zookeeper做任务注册,管理中心。有新用户注册,就向数据库写一条任务数据,并向zookeeper注册任务id。节点通过zookeeper去获取任务id,然后去数据库查询相应任务数据,并运行。或者简单点,任务节点直接去数据库取模jobId%n获取任务,jobId为任务的自增id。只不过这样的话,相比一致性hash,当增加/减少节点时,任务的重新分配会比较麻烦。
添加回答
举报
0/150
提交
取消