onlyliuxin / coding2017

218 stars 643 forks source link

多台机跑Job的问题 #566

Open gqipan opened 7 years ago

gqipan commented 7 years ago

现在有一个Job, 目前只放在一台机上。因为比较耗时,只能每分钟处理6条记录。 目前我想放到多台机上跑, 但是Job的任务那张表里面的任务该怎么分配呢。 单机的时候,我是每次从表中取一条,然后去跑。 多机的时候,怎么才能保证这个任务分发正确性。 PS: 机器总数是3台,但是非促销时期,去减少一台。

Mrchenli commented 7 years ago

可以用kafka 建一个topic1 然后指定三个partition 然后一个消费组里面三个消费者分别消费一个分区 ,没具体实践过 。。感觉应该可行

gqipan commented 7 years ago

@Mrchenli Kafka 不行感觉不行, 我这个是Job,并不需要消息中间件

Mrchenli commented 7 years ago

是取这个job慢还是 处理job的业务慢啊

Mrchenli commented 7 years ago

我想的是 数据库加个字段 一个job如果是机器1触发的 先找到那条job然后贴上自己的标签(数据库更新应该是有锁的) 然后再去取这条job消费 不过这样会改变表结构而且会增加单条请求的时间

Wrecksoul commented 7 years ago

这个不是MapReduce要解决的问题吗?就是用hadoop呗。 如果只是简单实用的话,hadoop肯定有太多的学习曲线。可以简单的利用取模来分配呀,虽然这样在软负载均衡方面很难把控,但是对于job不多的简单系统还是足够的。

ddyblackhat commented 7 years ago

我们用7台机器做影像转换,把所有要转换的都放到redis中,数据结构用的list,从右边放 拿一台机器根据机器可执行的线程数和总得要做转换的影像,给每台机器分配任务,触发转换方法。 或许可以提供些思路

justtree commented 7 years ago

1、单机。抓取数据,放进线程池异步处理 2、集群。新建一个服务,获取到数据后,发送MQ,调用服务处理具体业务