集群内的任务分发,有什么推荐的方案?

2016-03-15 15:05:18 +08:00
 timchou
一个上千台机器的集群,需要对其中的机器下发不同任务,前端是 web 网页端触发,比如 web 端发起对 10.10.10.111 机器上重启 mysqld 进程的操作。

大致的结构是:

web
|
service
| | ... |
server 1 server 2 ... server n

理想中是:前端 web 端给用户进行操作。中间 service 层提供 http rest 接口, web 端调用 service 层相应的接口, service 层接收操作并且丢到 MQ 里。最下面的 server ,类似一个个 worker ,连接到 service 层的 MQ ,然后 pull 属于自己的 task ,然后进行执行。


以上这些预期是想用 celery 来做,但是 celery 中的问题是,每个 server(相当于 worker),对于 MQ 来说,都是相同的,但是我们的 worker 是有区别的,每个 task ,只能在指定的 worker 上执行(试想重启服务器这种 task)。

我查了 celery 的文档,好像有 route 相关的东西,那是不是我每个 worker 要有一个自己的 queue ,那机器数量几千台,就要有几千个 queue 吗?并且我需要动态添加机器,但是 celery 貌似只支持配置文件中配置 queue 。

所以目前看来 celery 并不能很好的满足。

特来请教下针对这种场景有什么合适的解决方案吗?谢谢大集。
3049 次点击
所在节点    Linux
7 条回复
lecher
2016-03-15 15:46:37 +08:00
如果 worker 的客户端处理写得很健全,用组播机制,或者 pub/sub 的订阅机制,保证所有 worker 都能收到相同的消息,特定消息加上 worker 的机器标识。 worker 执行之前检测是否与本机一致。

其实底层的 Redis 是支持动态创建消息队列的,实在要开几千个队列也是可以的。
calease
2016-03-15 16:10:23 +08:00
配置管理用 saltstack, ansible, puppet, chef...
defunct9
2016-03-15 17:54:16 +08:00
用 salt 即可,以前在京东管 hadoop ,就是用 salt 。
leopku
2016-03-15 22:36:50 +08:00
推一下 beanstalk ,有 cube 的概念
timchou
2016-03-16 09:17:44 +08:00
@calease
@defunct9
cool ,我来学习下 saltstack ,谢谢了!


@leopku 谢谢!不过这个 beanstalk 貌似是个代码托管以及协作平台?
taijia
2016-03-16 10:59:56 +08:00
异步 beanstalk ,同步 gearman ,根据场景可以试试
monnand
2016-03-16 13:13:43 +08:00
这种调度系统很多现成的, Google 的 Kubernetes, Apache 的 mesos , docker 的 swarm

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/263649

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX