{"id":13587098,"url":"https://github.com/BinChengZhao/delicate","last_synced_at":"2025-04-07T19:30:58.947Z","repository":{"id":39574077,"uuid":"340925337","full_name":"BinChengZhao/delicate","owner":"BinChengZhao","description":"A lightweight and distributed task scheduling platform written in rust. （一个轻量的分布式的任务调度平台通过rust编写）","archived":false,"fork":false,"pushed_at":"2022-09-10T11:31:45.000Z","size":8014,"stargazers_count":692,"open_issues_count":12,"forks_count":70,"subscribers_count":14,"default_branch":"main","last_synced_at":"2024-08-02T16:05:32.252Z","etag":null,"topics":["actix-web","async","cron","crontab","distributed-systems","rust","scheduler","scheduling","wip"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BinChengZhao.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"BinChengZhao"}},"created_at":"2021-02-21T14:48:13.000Z","updated_at":"2024-07-31T10:22:08.000Z","dependencies_parsed_at":"2023-01-17T18:15:56.149Z","dependency_job_id":null,"html_url":"https://github.com/BinChengZhao/delicate","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinChengZhao%2Fdelicate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinChengZhao%2Fdelicate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinChengZhao%2Fdelicate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinChengZhao%2Fdelicate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BinChengZhao","download_url":"https://codeload.github.com/BinChengZhao/delicate/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223290379,"owners_count":17120904,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actix-web","async","cron","crontab","distributed-systems","rust","scheduler","scheduling","wip"],"created_at":"2024-08-01T15:06:01.202Z","updated_at":"2024-11-06T05:31:13.185Z","avatar_url":"https://github.com/BinChengZhao.png","language":"Rust","funding_links":["https://github.com/sponsors/BinChengZhao"],"categories":["Rust","Applications","应用程序 Applications"],"sub_categories":["Task scheduling","任务调度 Task scheduling"],"readme":"# Delicate   \n[![Build](https://github.com/BinChengZhao/delicate/workflows/CI/badge.svg)](\nhttps://github.com/BinChengZhao/delicate/actions)\n[![License](https://img.shields.io/badge/license-MIT%2FApache--2.0-blue.svg)](\nhttps://github.com/BinChengZhao/delicate)\n## English | [简体中文](./README_zhCN.md)\n\n- [delicate](#delicate)\n  - [What is delicate](#what-is-delicate)\n  - [Features](#features)\n  - [Benchmark](#benchmark)\n  - [Get Started](#get-started)\n    - [Setting up delicate](#setting-up-delicate)\n  - [Quick start](#quick-start)\n  - [Documentation](https://delicate-rs.github.io/Roadmap.html)\n  - [Roadmap](#roadmap)\n  - [Contributing](#contributing)\n  - [License](#license)\n\n## What is delicate\n\u003ca href=\"\"\u003e\n    \u003cimg src=\"./doc/src/delicate_logo.png\"\n         alt=\"delicate logo\" title=\"delicate\" height=\"125\" width=\"125\"  align=\"right\"/\u003e\n\u003c/a\u003e\n\n`delicate` A lightweight and distributed task scheduling platform written in rust.:\n\n## features\n- **Friendly UI:** [Front-end] Convenient management of tasks \u0026 executors, monitoring their status and supporting manual maintenance etc.\n\n- **Flexible Operations:** Flexible task operations, support for limiting the maximum number of parallelism in a single node, time zone settings corresponding to cron expressions, scheduling modes (single, fixed number, constantly repeating), the ability to manually trigger tasks at any time, manually terminate task instances, and view task logs online.\n\n- **High Availability:**  Delicate supports unlimited horizontal expansion. It's easy to achieve high availability and performance by deploying as many Delicate servers and executors.\n\n- **High Performance:** Lightweight and essential features speed up the performance, The basic resource overhead for `delicate` is roughly (less than 0.1% cpu usage, with about 10m of memory.)\n\n- **Observability:**  There are many meaningful statistics periodically in a readable way.\n\n- **Upgrade:**  Dynamic upgrade of the system (upgrade is done by obtaining the latest source code and performing database migration.\n\n- **Reusability:**  Excutor provides `restful-api` that allows user applications to maintain custom tasks.\n\n- **Permission Management:**  Permission management function based on casbin implementation, continuously optimize the experience.\n\n\n\nThe architecture of delicate:\n\n![architecture](./doc/src/architecture.svg)\n![topology](./doc/src/topology.svg)\n\n## Project rendering\n\u003cdetails\u003e\n\u003csummary\u003eClick me\u003c/summary\u003e\n\n![](./doc/src/_media/dashboard.jpg)\n![](./doc/src/_media/executor_create.jpg)\n![](./doc/src/_media/executor_list.jpg)\n![](./doc/src/_media/group_create.jpg)\n![](./doc/src/_media/group_inner_bind.jpg)\n![](./doc/src/_media/login_en.jpg)\n![](./doc/src/_media/task_edit.jpg)\n![](./doc/src/_media/task_list_operation.jpg)\n![](./doc/src/_media/task_log_kill.jpg)\n![](./doc/src/_media/task_log_logs_2.jpg)\n![](./doc/src/_media/task_log_logs.jpg)\n![](./doc/src/_media/user_list.jpg)\n\n\u003c/details\u003e\n\n\n## Benchmark\nTask take about 6,424 ns (+/- 52) per scheduling on CentOS Linux release 7.6.1810 (Core)  (varies by OS/hardware).\n\nSystem: CentOS Linux release 7.6.1810 (Core) - 4cores/8G.\n\nSingle node: delicate-executor \n\nTask creation, peak cpu consumption 3%, qps: 17000+\n\nTask cancellation, peak cpu consumption 3%, qps: 18000+\n\nTask manual scheduling, peak cpu consumption 3.5%, qps: 14000+\n\nTask removal, peak cpu consumption 3%, qps: 14000+\n\nhealth_check, peak cpu consumption 4%, qps: 2600+\n\nThe peak memory consumption is all within 60M (varies by OS/hardware).\n\nThe rest of the overall indicators await bench.\n\n## Get Started\n\nThe basic common usage of delicate is to quickly set up for the backend servers and executors. We split it into multiple simple steps to illustrate the delicate concepts and operations.\n\nThe source code installation requires:\n * [rustc](https://www.rust-lang.org/tools/install) (minimum-supported version of `rustc` is **1.54**.) \n * libmysqlclient-dev \u0026 libpq-dev \u0026 libssl-dev\n\n### Setting up delicate\n\n\u003c!-- We can download the binary from [release page](https://github.com/BinChengZhao/delicate/releases).  --\u003e\n\u003c!-- \nFor example we use linux version:\n\n```bash\n$ mkdir delicate\n$ wget https://github.com/BinChengZhao/delicate/releases/download/v1.0.0/delicate-v1.0.0-linux-amd64.tar.gz\n$ tar zxvf delicate-v1.0.0-linux-amd64.tar.gz -C delicate \u0026\u0026 cd delicate --\u003e\n\n\n1. install the rust suite: ` curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ` or ` curl --tlsv1.2 -sSf https://sh.rustup.rs | sh ` or `curl https://sh.rustup.rs -sSf | sh`  .  （It is possible to encounter a curl error and need to retry several times, These problems are usually due to the fact that the curl version is too low, or the network is unstable.）\n\n2. initialize cargo in the current shell, ` source $HOME/.cargo/env ` .  \n\n3. Get the delicate source code and compile it ( this is an example, please get the corresponding Tag version according to your needs ) : ` git clone https://github.com/BinChengZhao/delicate.git ` .\n\n4. ` cd delicate/ ` .\n\n5. ` cargo check ` , check for environment dependencies etc.\n\n6. when error: linker `cc` not found: solution : ` yum -y install gcc ` .\n\n7. when ` --- stderr thread 'main' panicked at 'Without `*` set in .env: NotPresent'` then you need to set the environment variable, using the project's  template.env ` .\n\n8. ` cp template.env .env ` and start modifying the configuration. \n\n9. Compile the executable with ` cargo build --release ` after passing it.\n\n10. Start delicate-scheduler: ` nohup target/release/delicate-scheduler \u003e\u003e scheduler.log 2\u003e\u00261 \u0026` on the machine where the server is deployed .\n\n11. start delicate-executor: ` nohup target/release/delicate-executor \u003e\u003e executor.log 2\u003e\u00261 \u0026 ` on the machine performing the task .\n\n12. Please refer to `delicate-web/README.md` for the deployment of front-end resources.\n\n13. `delicate-scheduler` \u0026 `delicate-web` need to be under the same domain (such as `api.delicate.com` \u0026 `web.delicate.com`), so as to avoid cross-domain issues, Both `delicate-scheduler` \u0026 `delicate-web` can be deployed in clustered versions, accessible via reverse proxy.\n\n\n## Quick start\n[Quick-start](./doc/src/quick_start.md)\n\n## Documentation\n\nSee [reference](./doc/src/reference.md) for more information.\n\n\n## To Do List\n- [x] I18n (English \u0026 Chinese).\n- [x] Permission Management.\n- [ ] Multiple login protocols, LDAP CAS .\n- [ ] Machine resource panel, online view of processes, memory, cpu, etc.\n- [ ] Database back-end support Postgres.\n- [ ]  `scheduler \u0026 executor` communication using RPC, but currently there are problems with dependencies (RPC framework (`tonic ｜ tarpc`) both depend on tokio 1,current actix-web stable version 3, does not support integration with tokio 1 ).\n- [ ] Task flow support.\n- [ ] Dynamic executor load adjustment, where the resource group adjusts the task load of the task execution nodes according to the machine metrics.\n\n\n## Roadmap \n\nSee [delicate Roadmap](./doc/src/Roadmap.md) for details.\n\n\n## Contributing\n\n:balloon: Thanks for your help improving the project! We are so happy to have\nyou! We have a contributing guide to help you get involved in the Delicate\nproject.\n\n[Rust-guide](./CONTRIBUTING.md)\n[Js-guide](./delicate-web/CONTRIBUTING.md)\n\n\n## Thanks\nSincere thanks to my friend `Walker-os` who helped me solve a lot of front-end resource problems and speed up the release of delicate and `Liping Wang` help me beautify the logo.\n\n# Stargazers over time\n\n[![Stargazers over time](https://starchart.cc/BinChengZhao/delicate.svg)](https://starchart.cc/BinChengZhao/delicate)\n\n\n## License\n\nLicensed under either of\n\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\n#### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBinChengZhao%2Fdelicate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FBinChengZhao%2Fdelicate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBinChengZhao%2Fdelicate/lists"}