Project Icon

cron-job.org

高性能分布式定时任务管理平台

cron-job.org是一个开源的分布式定时任务管理平台。该系统采用高性能架构,支持大规模并发HTTP请求处理,提供灵活的任务结果存储和自动清理机制。核心组件包括后端执行引擎、API接口、Web控制台和状态监控页面,便于部署和横向扩展。适用于各种需要可靠定时任务调度和监控的应用场景。

cron-job.org

构建状态 构建状态 构建状态 构建状态

结构

  • database 包含MySQL数据库结构。
  • chronos 是cron-job.org的定时任务执行守护进程,负责获取任务。
  • protocol 包含系统节点之间交互的接口定义。
  • frontend 包含Web界面。
  • statuspage 包含状态页面UI。
  • api 包含Web界面和状态页面UI使用的服务器API。

chronos

概念

chronos每分钟检查MySQL数据库以收集所有要执行的任务。每分钟会生成一个线程来处理所有任务。实际的HTTP获取是使用出色的curl multi库完成的,libev库用于提供事件循环。结合c-ares解析器,这允许同时进行数千个并行HTTP请求。

cron-job.org支持为用户方便起见存储任务结果。在MySQL数据库中存储结果数据很快会导致I/O瓶颈。(这也有清理旧条目极其昂贵的缺点。)为解决这个问题,chronos将结果存储在每个用户每天的SQLite数据库中。清理旧条目就像删除相应日期的数据库一样简单。

整个软件的优化侧重于性能而不是数据完整性,即当服务器崩溃或发生断电/硬件故障时,任务历史很可能会丢失。由于这本来就是易失性数据,因此不被认为是一个大问题。

chronos现在可以在多个节点上运行。每个节点需要自己的MySQL服务器/数据库并存储自己的任务。运行Web界面的主机还管理用户数据库和任务与节点之间的关联。Web界面可以通过protocol文件夹中定义的基于Thrift的协议从特定节点创建、删除、更新和获取任务以及任务日志。

先决条件

为了构建chronos,你需要以下开发文件:

  • curl(最好使用c-ares作为解析器,并使用libidn2支持IDN)
  • libev
  • mysqlclient
  • sqlite3
  • thrift(编译器和libthrift)

要构建,你需要C++14编译器和cmake。

构建

  1. 创建并进入构建文件夹:mkdir build && cd build
  2. 运行cmake:cmake -DCMAKE_BUILD_TYPE=Release ..
  3. 构建项目:make

运行

  1. 确保你已从database文件夹导入DB模式
  2. 根据你的系统自定义chronos.cfg(特别是添加你的MySQL登录信息)
  3. 执行 ./chronos /path/to/chronos.cfg

API

API使用PHP编写,需要在Web服务器上托管(cron-job.org使用nginx和php-fpm)。它由控制台和状态页面UI使用。

先决条件

  • nginx和php-fpm(PHP 7)
  • 可选,一个redis实例以支持API调用速率限制

入门

  • api/文件夹复制到你的Web服务器
  • 创建config/config.inc.default.php的副本为lib/config.inc.php,并根据你的环境进行自定义

注意

  • 更改thrift协议时,别忘了重新编译PHP粘合代码并将其复制到lib/protocol/。提交时,包括更新后的PHP代码。目前,这是一个手动步骤。

前端

前端使用JavaScript编写,使用React和material-ui。你需要npm来构建它。

先决条件

  • Node.js

入门

  • 进入frontend/文件夹
  • 通过运行npm install安装所有必需的依赖项
  • 创建src/utils/Config.default.js的副本为src/utils/Config.js,并根据你的环境进行自定义
  • 通过npm start运行Web界面

状态页面前端

状态页面前端使用JavaScript编写,使用React和material-ui。你需要npm来构建它。

先决条件

  • Node.js

入门

  • 进入statuspage/文件夹
  • 通过运行npm install安装所有必需的依赖项
  • 创建src/utils/Config.default.js的副本为src/utils/Config.js,并根据你的环境进行自定义
  • 通过npm start运行Web界面

示例环境(使用Docker Compose)

要快速启动cron-job.org系统的大部分示例环境,你可以使用docker-compose

  • 初始化/更新子模块:git submodule init && git submodule update
  • .env.example复制到.env并在文本编辑器中打开
  • 根据需要更改.env中的变量。至少,用随机生成的密钥填充*_SECRET变量,并在SMTP_SERVER中指定SMTP服务器。SMTP会话不使用身份验证,因此请确保SMTP服务器允许你机器的IP地址进行中继。
  • 通过docker compose up启动,并等待所有容器构建完成并启动所有服务。这可能需要一段时间,尤其是在首次运行时。
  • 在浏览器中打开http://localhost:8010/(假设你保留了默认端口和主机名设置)。

*重要提示:*此存储库中包含的Docker环境旨在作为示例/开发环境,不适合生产使用,尤其是在安全性方面。

将启动以下容器:

  • mysql-master用于主服务数据库,也存储用户、组、任务->节点关联等。
  • mysql-node用于节点服务数据库。用于存储每个执行器的信息,如任务详情及其计划等。
  • redis用作某些功能(如速率限制)的缓存。
  • api用于前端使用的基于PHP的API后端。使用php-fpm。
  • frontend托管构建的前端代码。
  • wwww作为前端nginx驱动的HTTP服务器,连接到frontend(HTTP反向代理)和api(FastCGI)。
  • chronos以组合的主服务和节点服务模式运行chronos。

一般注意事项

  • 我们强烈建议使用c-ares解析器构建curl。否则,每个请求可能会为DNS解析生成自己的线程,你的机器很快就会耗尽资源。
  • 在运行chronos之前,确保打开文件/套接字的限制设置不要太低。你可能需要先运行ulimit -n 65536或类似命令。
  • 如果数据完整性对你来说不重要,我们强烈建议在MySQL配置中设置innodb_flush_log_at_trx_commit=0innodb_flush_method=O_DIRECT以获得最佳性能。否则,更新线程(负责存储任务结果)可能很快就会落后于实际的任务执行。
  • 部分源代码相当旧,来自项目的早期阶段,可能需要早晚进行重构。
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号