EasyScheduler is a distributed scheduling system that allows users to schedule and manage workflows. The architecture of the system is based on the concept of Directed Acyclic Graphs (DAG), which are used to represent the tasks in the workflow. The system supports various task types such as SHELL, SQL, SUB_PROCESS, PROCEDURE, MR, SPARK, PYTHON, DEPENDENT, and plans to support dynamic plug-in extension. The system also supports timing schedule and manual schedule based on cron expressions. The system uses quartz distributed scheduler and supports the generation of cron expression visualization. The system does not only support DAG Simple dependencies between predecessors and successor nodes, but also provides task dependencies nodes, support for custom task dependencies between processes. The system supports the priority of process instances and task instances. If the process instance and task instance priority are not set, the default is first in, first out. The system also supports SQL Task Query Result Email Send, Process Instance Run Result Email Alert and Fault Tolerant Alert Notification Failure policy. The system is designed with a distributed non-central design concept, where MasterServer is mainly responsible for DAG task split, task submission monitoring, and monitoring the health status of other MasterServer and WorkerServer. EasyScheduler uses ZooKeeper distributed locks to implement only one Master to execute the Scheduler at the same time, or only one Worker to perform task submission.
You can find more information about the architecture of EasyScheduler at [1](https://analysys.github.io/easyscheduler_docs/architecture-design.html). The page provides a detailed explanation of the architecture of the schedule system, including the common nouns of the schedule system, the system architecture diagram, and the architectural description. You can also find the online documentation of EasyScheduler at [3](https://github.com/analysys/easyscheduler_docs/blob/master/architecture-design.html).