It is a distributed task scheduling framework that supports a variety of load balancing strategies, and the client handles task addition and deletion by listening to the task status.
- first start, worker go to barrier together, ensure scheduler do not schedule meaningless.
- after first schedule worker watcher wait for a while and then re-balance
- worker left barrier together, ensure external program can get when all tasks are running, for k8s rolling update
- priority queue is for worker can start task according to their priority
- balancer use least-load as assign algorithm, ensure there is no worker effort too much.
- balancer reassignment uses a sticky strategy, change as little as possible.
- check worker num < max num before register worker info in etcd by using mutex