xcron is a distributed task system based on raft
. it still need to be durable optimize for it's performance.中文
-
easy be used by it's served http api
-
support instance task (will be trigger once in future time) & task format like
linux crontab
-
dispatcher task with planB in cluster mode when one server accidentally downtime
-
based on raft to increment avaliable and the stable running of task in cluster mode
# 1.clone the program in your work directory
git clone https://github.com/alwaysthanks/xcron.git
# 2. run command belong under the program root path to build the server
bash build.sh
# 3. change the config file 'xcron.toml' if you need.
# - one machine is just to run
# - in cluster mode, you should change 'xcron,toml' like example:
# peer_hosts = ["192.24.1.1:8899","192.24.1.2:8899","192.24.1.3:8899"]
# 4. run server
./xcron_server
the system designed architecture:
the http api based on HTTP content-type as "application/json"
- api:/xcron/createTask
- method:POST
- params:
param | type | must | description |
---|---|---|---|
type | int | Y | enum,the type of task: 1: periodicity time task ; 2:regular time task |
format | string | Y | when type=1, the format can use linux crontab when type=2, the format is unix timestamp, unit: second |
callback | callback_table | Y | when the task running, it's callback info, as below callback_table: |
callback_table:
param | type | must | description |
---|---|---|---|
url | string | Y | callback http url through HTTP POST in protocol content-type of application/json when the task running |
body | map<k>v | N | this param will be as the http json body when call the url above mentioned |
- returns:
param | type | description |
---|---|---|
uuid | string | the unique request generated by system |
code | int | when code equal 0 mean success. vice versa. |
message | string | when code not equal 0, the param expresses the reason |
data | data_table | response data of the request, as below data_table: |
data_table:
param | type | description |
---|---|---|
task_id | string | the unique task id in the system |
- returns example:
{
"uuid": "80eb2fb8-2724-4707-9484-8e7d07b9171d",
"code": 0,
"data": {
"task_id": "289057701458138645"
}
}
github.com/json-iterator/go
github.com/sony/sonyflake
github.com/grandecola/bigqueue
github.com/hashicorp/raft
github.com/hashicorp/raft-boltdb
github.com/facebookgo/grace/gracehttp
github.com/ouqiang/timewheel
github.com/robfig/cron