Martinet

Node.js 分布式作业队列
授权协议 MIT
开发语言 JavaScript
所属分类 程序开发、 作业/任务调度
软件类型 开源软件
地区 不详
投 递 者 柳向明
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Martinet 是分布式任务管理工具。

Martinet 数据库后端,基于 zeroMQ 的分布式任务管理系统。Martinet 可以使用任意的 sequelize.js 兼容的数据库(默认是 SQLite)。

Martinet 使用 push-pull 管理模式来确保在分布式的环境下高效的运行。

安装

npm install martinet

使用

Martinet 包括两个部分: Martinet 对象,处理调度和调度任务; Worker 对象,接受任务和定义。

Martinet

安装

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);

Workers

安装

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);

DB

后端数据库的连接信息,使用 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