Martinet 是分布式任务管理工具。
Martinet 数据库后端,基于 zeroMQ 的分布式任务管理系统。Martinet 可以使用任意的 sequelize.js 兼容的数据库(默认是 SQLite)。
Martinet 使用 push-pull 管理模式来确保在分布式的环境下高效的运行。
npm install martinet
Martinet 包括两个部分: Martinet
对象,处理调度和调度任务; Worker
对象,接受任务和定义。
var Martinet = require('martinet'); var martinet = new Martinet(); // Martinet allows you to create multiple workers // so that you can keep worker code in separate // logical modules.martinet.addWorker('WORKER_NAME_1', 'WORKER_PORT_1'); martinet.addWorker('WORKER_NAME_2', 'WORKER_PORT_2');
martinet.execute({ worker: 'WORKER_NAME', name: 'task_name', description: 'Do a thing' // Used in the backend so it's easier to lookup tasks later }, args); // args JSON object of named arguments, so like // { // thing_id: 1 // } // // this object gets serialized and passed to the Worker //
martinet.schedule('in 20 minutes', { worker: 'WORKER_NAME', name: 'task_name', description: 'Do a thing in 20 minutes'}, args);
martinet.every('30 minutes', { worker: 'WORKER_NAME', name: 'task_name', description: 'Do a thing every half hour', run_at: 'midnight' // optional time to start the recurring task}, args);
var MartinetWorker = require('martinet').Worker;var WORKER_PORT = 3000;var worker = new MartinetWorker(WORKER_PORT, { martinet_url: '127.0.0.1', martinet_port: '8089'});
worker.on('task_name', function(taskId, data, callback) { // do a thing. // if it's successful, callback(), // if there's an error, callback(err)});
Martinet 的 pull socket 监听端口:
var Martinet = require('martinet');var options = { port: 8009};var martinet = new Martinet(options);
后端数据库的连接信息,使用 sequelize.js 选项。
默认:
var Martinet = require('martinet');var options = { db: { database: 'martinet-db', username: process.env.USER, password: null, options: { dialect: 'sqlite', storage: 'martinet.db', logging: false, omitNull: true }, sync: true }};var martinet = new Martinet(options);
使用 postgres:
var Martinet = require('martinet');var options = { db: { database: 'martinet-db', username: process.env.USER, password: null, options: { dialect: 'postgres', port: 5432, host: 'database.host' logging: false, omitNull: true }, sync: true }};var martinet = new Martinet(options);
你现在拥有了一个远程 Git 版本库,能为所有开发者共享代码提供服务,在一个本地工作流程下,你也已经熟悉了基本 Git 命令。你现在可以学习如何利用 Git 提供的一些分布式工作流程了。 这一章中,你将会学习如何作为贡献者或整合者,在一个分布式协作的环境中使用 Git。 你会学习为一个项目成功地贡献代码,并接触一些最佳实践方式,让你和项目的维护者能轻松地完成这个过程。另外,你也会学到如何管理有很多
同传统的集中式版本控制系统(CVCS)不同,Git 的分布式特性使得开发者间的协作变得更加灵活多样。 在集中式系统中,每个开发者就像是连接在集线器上的节点,彼此的工作方式大体相像。 而在 Git 中,每个开发者同时扮演着节点和集线器的角色——也就是说,每个开发者既可以将自己的代码贡献到其他的仓库中,同时也能维护自己的公开仓库,让其他人可以在其基础上工作并贡献代码。 由此,Git 的分布式协作可以为
问题内容: 您是否知道/使用任何针对python的分布式作业队列?您可以共享链接或工具吗 问题答案: 如果您使用的是Django,那么除了进行多处理之外,还有Celery项目。
假设Alice现在开始了一个新项目,在/home/alice/project建了一个新的git 仓库(repository);另外Bob的工作目录也在同一台机器,他要提交代码。 Bob 执行了这样的命令: $ git clone /home/alice/project myrepo 这就建了一个新的叫"myrepo"的目录,这个目录里包含了一份Alice的仓库的 克隆(clone). 这份克隆和
问题内容: 我无法理解“分布式任务队列”的目的。例如,python的celery库。 我知道在celery(Python框架)中,你可以为要执行的功能设置定时窗口。但是,这也可以在针对python脚本的linux crontab中轻松完成。 据我所知,并通过我自己的django-celery网络应用显示,celery所消耗的RAM内存比仅仅设置一个原始crontab还要多。对于相对较小的应用程序,
有没有更好的方法/工具/框架来做到这一点?
一、分布式锁 数据库的唯一索引 Redis 的 SETNX 指令 Redis 的 RedLock 算法 Zookeeper 的有序节点 二、分布式事务 2PC 本地消息表 三、CAP 一致性 可用性 分区容忍性 权衡 四、BASE 基本可用 软状态 最终一致性 五、Paxos 执行过程 约束条件 六、Raft 单个 Candidate 的竞选 多个 Candidate 竞选 数据同步 参考 一、分
我尝试使用hadoop作为分布式模式,并且我进行了设置,但是发生了一个错误。我将在下面描述安装过程: 0/etc/hosts 已安装的软件包 获取hadoop 0/etc/hadoop/core-site.xml 0/etc/hadoop/hdfs-site.xml 0/etc/hadoop/mapred-site.xml 主服务器是 节点服务器是 然后我尝试使用这个命令 结果如下: 0node1