This is an automated email from the ASF dual-hosted git repository.
kirs pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler-website.git
The following commit(s) were added to refs/heads/master by this push:
new 975ae80 [Imporvement][Doc] /development/architecture-design.html
(#415)
975ae80 is described below
commit 975ae801273c86cd8eec52480cd3f600fcdda1ff
Author: Tandoy <[email protected]>
AuthorDate: Tue Aug 3 10:08:04 2021 +0800
[Imporvement][Doc] /development/architecture-design.html (#415)
* [Imporvement][Doc] /development/architecture-design.html
·Modify the zk node error in the framework design module
distributed_lock.png of the developer guide
·There are some Chinese words in the picture of the modified English
document
·Adjust the size of related pictures to make them look clearer
* [Imporvement][Doc] /development/architecture-design.html
·Modify the zk node error in the framework design module
distributed_lock.png of the developer guide
·There are some Chinese words in the picture of the modified English
document
·Adjust the size of related pictures to make them look clearer
* [Imporvement][Doc] /development/architecture-design.html
·Modify the zk node error in the framework design module
distributed_lock.png of the developer guide
·There are some Chinese words in the picture of the modified English
document
·Adjust the size of related pictures to make them look clearer
---
development/en-us/architecture-design.md | 24 ++++++++++-----------
development/zh-cn/architecture-design.md | 18 ++++++++--------
img/architecture-design/dag_examples_ch_zn.png | Bin 0 -> 89203 bytes
img/architecture-design/dag_examples_en_us.png | Bin 0 -> 89184 bytes
img/architecture-design/distributed_lock_ch_zn.png | Bin 0 -> 179233 bytes
img/architecture-design/distributed_lock_en_us.png | Bin 0 -> 188964 bytes
.../distributed_lock_procss_ch_zn.png | Bin 0 -> 345394 bytes
.../distributed_lock_procss_en_us.png | Bin 0 -> 363294 bytes
img/architecture-design/fault-tolerant_ch_zn.png | Bin 0 -> 177202 bytes
img/architecture-design/fault-tolerant_en_us.png | Bin 0 -> 193511 bytes
.../fault-tolerant_master_ch_zn.png | Bin 0 -> 156134 bytes
.../fault-tolerant_master_en_us.png | Bin 0 -> 169131 bytes
.../fault-tolerant_worker_ch_zn.png | Bin 0 -> 156743 bytes
.../fault-tolerant_worker_en_us.png | Bin 0 -> 164622 bytes
img/architecture-design/grpc_en_us.png | Bin 0 -> 68933 bytes
img/architecture-design/lack_thread_ch_zn.png | Bin 0 -> 173229 bytes
img/architecture-design/lack_thread_en_us.png | Bin 0 -> 195509 bytes
img/architecture-design/process_priority_en_us.png | Bin 0 -> 49112 bytes
img/architecture-design/task_priority_en_us.png | Bin 0 -> 30544 bytes
19 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/development/en-us/architecture-design.md
b/development/en-us/architecture-design.md
index 94abd81..ed8d27d 100644
--- a/development/en-us/architecture-design.md
+++ b/development/en-us/architecture-design.md
@@ -6,7 +6,7 @@ Before explaining the architecture of the schedule system, let
us first understa
**DAG:** Full name Directed Acyclic Graph,referred to as DAG。Tasks in the
workflow are assembled in the form of directed acyclic graphs, which are
topologically traversed from nodes with zero indegrees of ingress until there
are no successor nodes. For example, the following picture:
<p align="center">
- <img src="/img/dag_examples_cn.jpg" alt="dag示例" width="60%" />
+ <img src="/img/architecture-design/dag_examples_en_us.png" alt="dag示例"
width="80%" />
<p align="center">
<em>dag example</em>
</p>
@@ -40,7 +40,7 @@ Before explaining the architecture of the schedule system,
let us first understa
#### 2.1 System Architecture Diagram
<p align="center">
- <img src="/img/architecture.jpg" alt="System Architecture Diagram" />
+ <img src="/img/architecture-en.jpg" alt="System Architecture Diagram" />
<p align="center">
<em>System Architecture Diagram</em>
</p>
@@ -141,13 +141,13 @@ DolphinScheduler uses ZooKeeper distributed locks to
implement only one Master t
1. The core process algorithm for obtaining distributed locks is as follows
<p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock.png"
alt="Get Distributed Lock Process" width="50%" />
+ <img src="/img/architecture-design/distributed_lock_en_us.png" alt="Get
Distributed Lock Process" width="70%" />
</p>
2. Scheduler thread distributed lock implementation flow chart in
DolphinScheduler:
<p align="center">
- <img src="/img/distributed_lock_procss.png" alt="Get Distributed Lock
Process" width="50%" />
+ <img src="/img/architecture-design/distributed_lock_procss_en_us.png"
alt="Get Distributed Lock Process" />
</p>
##### Third, the thread is insufficient loop waiting problem
@@ -156,7 +156,7 @@ DolphinScheduler uses ZooKeeper distributed locks to
implement only one Master t
- If a large number of sub-processes are nested in a large DAG, the following
figure will result in a "dead" state:
<p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/lack_thread.png"
alt="Thread is not enough to wait for loop" width="50%" />
+ <img src="/img/architecture-design/lack_thread_en_us.png" alt="Thread is
not enough to wait for loop" width="70%" />
</p>
In the above figure, MainFlowThread waits for SubFlowThread1 to end,
SubFlowThread1 waits for SubFlowThread2 to end, SubFlowThread2 waits for
SubFlowThread3 to end, and SubFlowThread3 waits for a new thread in the thread
pool, then the entire DAG process cannot end, and thus the thread cannot be
released. This forms the state of the child parent process loop waiting. At
this point, the scheduling cluster will no longer be available unless a new
Master is started to add threads to break s [...]
@@ -180,7 +180,7 @@ Fault tolerance is divided into service fault tolerance and
task retry. Service
Service fault tolerance design relies on ZooKeeper's Watcher mechanism. The
implementation principle is as follows:
<p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant.png"
alt="DolphinScheduler Fault Tolerant Design" width="40%" />
+ <img src="/img/architecture-design/fault-tolerant_en_us.png"
alt="DolphinScheduler Fault Tolerant Design" width="70%" />
</p>
The Master monitors the directories of other Masters and Workers. If the
remove event is detected, the process instance is fault-tolerant or the task
instance is fault-tolerant according to the specific business logic.
@@ -190,7 +190,7 @@ The Master monitors the directories of other Masters and
Workers. If the remove
- Master fault tolerance flow chart:
<p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_master.png"
alt="Master Fault Tolerance Flowchart" width="40%" />
+ <img src="/img/architecture-design/fault-tolerant_master_en_us.png"
alt="Master Fault Tolerance Flowchart" width="70%" />
</p>
After the ZooKeeper Master is fault-tolerant, it is rescheduled by the
Scheduler thread in DolphinScheduler. It traverses the DAG to find the
"Running" and "Submit Successful" tasks, and monitors the status of its task
instance for the "Running" task. You need to determine whether the Task Queue
already exists. If it exists, monitor the status of the task instance. If it
does not exist, resubmit the task instance.
@@ -200,7 +200,7 @@ After the ZooKeeper Master is fault-tolerant, it is
rescheduled by the Scheduler
- Worker fault tolerance flow chart:
<p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_worker.png"
alt="Worker Fault Tolerance Flowchart" width="40%" />
+ <img src="/img/architecture-design/fault-tolerant_worker_en_us.png"
alt="Worker Fault Tolerance Flowchart" width="70%" />
</p>
Once the Master Scheduler thread finds the task instance as "need to be fault
tolerant", it takes over the task and resubmits.
@@ -239,13 +239,13 @@ In the early scheduling design, if there is no priority
design and fair scheduli
- The priority of the process definition is that some processes need to be
processed before other processes. This can be configured at the start of the
process or at the time of scheduled start. There are 5 levels, followed by
HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below
<p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/process_priority.png"
alt="Process Priority Configuration" width="40%" />
+ <img src="/img/architecture-design/process_priority_en_us.png"
alt="Process Priority Configuration" width="40%" />
</p>
- The priority of the task is also divided into 5 levels, followed by
HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below
- <p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/task_priority.png"
alt="task priority configuration" width="35%" />
+ <p align="center">`
+ <img src="/img/architecture-design/task_priority_en_us.png" alt="task
priority configuration" width="35%" />
</p>
##### VI. Logback and gRPC implement log access
@@ -256,7 +256,7 @@ In the early scheduling design, if there is no priority
design and fair scheduli
- Considering the lightweightness of DolphinScheduler as much as possible,
gRPC was chosen to implement remote access log information.
<p align="center">
- <img src="https://analysys.github.io/easyscheduler_docs_cn/images/grpc.png"
alt="grpc remote access" width="50%" />
+ <img src="/img/architecture-design/grpc_en_us.png" alt="grpc remote access"
width="50%" />
</p>
- We use a custom Logback FileAppender and Filter function to generate a log
file for each task instance.
diff --git a/development/zh-cn/architecture-design.md
b/development/zh-cn/architecture-design.md
index 12f1633..67c3399 100644
--- a/development/zh-cn/architecture-design.md
+++ b/development/zh-cn/architecture-design.md
@@ -5,7 +5,7 @@
**DAG:** 全称Directed Acyclic
Graph,简称DAG。工作流中的Task任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图:
<p align="center">
- <img src="/img/dag_examples_cn.jpg" alt="dag示例" width="60%" />
+ <img src="/img/architecture-design/dag_examples_ch_zn.png" alt="dag示例"
width="80%" />
<p align="center">
<em>dag示例</em>
</p>
@@ -37,7 +37,7 @@
#### 2.1 系统架构图
<p align="center">
- <img src="/img/architecture.jpg" alt="系统架构图" width="70%" />
+ <img src="/img/architecture.jpg" alt="系统架构图" />
<p align="center">
<em>系统架构图</em>
</p>
@@ -131,12 +131,12 @@
DolphinScheduler使用ZooKeeper分布式锁来实现同一时刻只有一台Master执行Scheduler,或者只有一台Worker执行任务的提交。
1. 获取分布式锁的核心流程算法如下
<p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock.png"
alt="获取分布式锁流程" width="50%" />
+ <img src="/img/architecture-design/distributed_lock_ch_zn.png"
alt="获取分布式锁流程" width="70%" />
</p>
2. DolphinScheduler中Scheduler线程分布式锁实现流程图:
<p align="center">
- <img src="/img/distributed_lock_procss.png" alt="获取分布式锁流程" width="50%" />
+ <img src="/img/architecture-design/distributed_lock_procss_ch_zn.png"
alt="获取分布式锁流程" />
</p>
@@ -146,7 +146,7 @@ DolphinScheduler使用ZooKeeper分布式锁来实现同一时刻只有一台Mast
- 如果一个大的DAG中嵌套了很多子流程,如下图则会产生“死等”状态:
<p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/lack_thread.png"
alt="线程不足循环等待问题" width="50%" />
+ <img src="/img/architecture-design/lack_thread_ch_zn.png" alt="线程不足循环等待问题"
width="70%" />
</p>
上图中MainFlowThread等待SubFlowThread1结束,SubFlowThread1等待SubFlowThread2结束,
SubFlowThread2等待SubFlowThread3结束,而SubFlowThread3等待线程池有新线程,则整个DAG流程不能结束,从而其中的线程也不能释放。这样就形成的子父流程循环等待的状态。此时除非启动新的Master来增加线程来打破这样的”僵局”,否则调度集群将不能再使用。
@@ -169,7 +169,7 @@ DolphinScheduler使用ZooKeeper分布式锁来实现同一时刻只有一台Mast
服务容错设计依赖于ZooKeeper的Watcher机制,实现原理如图:
<p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant.png"
alt="DolphinScheduler容错设计" width="40%" />
+ <img src="/img/architecture-design/fault-tolerant_ch_zn.png"
alt="DolphinScheduler容错设计" width="70%" />
</p>
其中Master监控其他Master和Worker的目录,如果监听到remove事件,则会根据具体的业务逻辑进行流程实例容错或者任务实例容错。
@@ -178,7 +178,7 @@ DolphinScheduler使用ZooKeeper分布式锁来实现同一时刻只有一台Mast
- Master容错流程图:
<p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_master.png"
alt="Master容错流程图" width="40%" />
+ <img src="/img/architecture-design/fault-tolerant_master_ch_zn.png"
alt="Master容错流程图" width="70%" />
</p>
ZooKeeper Master容错完成之后则重新由DolphinScheduler中Scheduler线程调度,遍历 DAG
找到”正在运行”和“提交成功”的任务,对”正在运行”的任务监控其任务实例的状态,对”提交成功”的任务需要判断Task
Queue中是否已经存在,如果存在则同样监控任务实例的状态,如果不存在则重新提交任务实例。
@@ -187,7 +187,7 @@ ZooKeeper Master容错完成之后则重新由DolphinScheduler中Scheduler线程
- Worker容错流程图:
<p align="center">
- <img
src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_worker.png"
alt="Worker容错流程图" width="40%" />
+ <img src="/img/architecture-design/fault-tolerant_worker_ch_zn.png"
alt="Worker容错流程图" width="70%" />
</p>
Master Scheduler线程一旦发现任务实例为” 需要容错”状态,则接管任务并进行重新提交。
@@ -242,7 +242,7 @@ Master Scheduler线程一旦发现任务实例为” 需要容错”状态,则
- 介于考虑到尽可能的DolphinScheduler的轻量级性,所以选择了gRPC实现远程访问日志信息。
<p align="center">
- <img src="https://analysys.github.io/easyscheduler_docs_cn/images/grpc.png"
alt="grpc远程访问" width="50%" />
+ <img src="https://analysys.github.io/easyscheduler_docs_cn/images/grpc.png"
alt="grpc远程访问" width="60%" />
</p>
diff --git a/img/architecture-design/dag_examples_ch_zn.png
b/img/architecture-design/dag_examples_ch_zn.png
new file mode 100644
index 0000000..95134b3
Binary files /dev/null and b/img/architecture-design/dag_examples_ch_zn.png
differ
diff --git a/img/architecture-design/dag_examples_en_us.png
b/img/architecture-design/dag_examples_en_us.png
new file mode 100644
index 0000000..15848da
Binary files /dev/null and b/img/architecture-design/dag_examples_en_us.png
differ
diff --git a/img/architecture-design/distributed_lock_ch_zn.png
b/img/architecture-design/distributed_lock_ch_zn.png
new file mode 100644
index 0000000..f2e2337
Binary files /dev/null and b/img/architecture-design/distributed_lock_ch_zn.png
differ
diff --git a/img/architecture-design/distributed_lock_en_us.png
b/img/architecture-design/distributed_lock_en_us.png
new file mode 100644
index 0000000..5c34fc4
Binary files /dev/null and b/img/architecture-design/distributed_lock_en_us.png
differ
diff --git a/img/architecture-design/distributed_lock_procss_ch_zn.png
b/img/architecture-design/distributed_lock_procss_ch_zn.png
new file mode 100644
index 0000000..78b87df
Binary files /dev/null and
b/img/architecture-design/distributed_lock_procss_ch_zn.png differ
diff --git a/img/architecture-design/distributed_lock_procss_en_us.png
b/img/architecture-design/distributed_lock_procss_en_us.png
new file mode 100644
index 0000000..469128b
Binary files /dev/null and
b/img/architecture-design/distributed_lock_procss_en_us.png differ
diff --git a/img/architecture-design/fault-tolerant_ch_zn.png
b/img/architecture-design/fault-tolerant_ch_zn.png
new file mode 100644
index 0000000..5da473c
Binary files /dev/null and b/img/architecture-design/fault-tolerant_ch_zn.png
differ
diff --git a/img/architecture-design/fault-tolerant_en_us.png
b/img/architecture-design/fault-tolerant_en_us.png
new file mode 100644
index 0000000..45dadf7
Binary files /dev/null and b/img/architecture-design/fault-tolerant_en_us.png
differ
diff --git a/img/architecture-design/fault-tolerant_master_ch_zn.png
b/img/architecture-design/fault-tolerant_master_ch_zn.png
new file mode 100644
index 0000000..56c3500
Binary files /dev/null and
b/img/architecture-design/fault-tolerant_master_ch_zn.png differ
diff --git a/img/architecture-design/fault-tolerant_master_en_us.png
b/img/architecture-design/fault-tolerant_master_en_us.png
new file mode 100644
index 0000000..a9901ce
Binary files /dev/null and
b/img/architecture-design/fault-tolerant_master_en_us.png differ
diff --git a/img/architecture-design/fault-tolerant_worker_ch_zn.png
b/img/architecture-design/fault-tolerant_worker_ch_zn.png
new file mode 100644
index 0000000..c8b5cd5
Binary files /dev/null and
b/img/architecture-design/fault-tolerant_worker_ch_zn.png differ
diff --git a/img/architecture-design/fault-tolerant_worker_en_us.png
b/img/architecture-design/fault-tolerant_worker_en_us.png
new file mode 100644
index 0000000..e7f379d
Binary files /dev/null and
b/img/architecture-design/fault-tolerant_worker_en_us.png differ
diff --git a/img/architecture-design/grpc_en_us.png
b/img/architecture-design/grpc_en_us.png
new file mode 100644
index 0000000..633b837
Binary files /dev/null and b/img/architecture-design/grpc_en_us.png differ
diff --git a/img/architecture-design/lack_thread_ch_zn.png
b/img/architecture-design/lack_thread_ch_zn.png
new file mode 100644
index 0000000..31263cd
Binary files /dev/null and b/img/architecture-design/lack_thread_ch_zn.png
differ
diff --git a/img/architecture-design/lack_thread_en_us.png
b/img/architecture-design/lack_thread_en_us.png
new file mode 100644
index 0000000..0dc5a7b
Binary files /dev/null and b/img/architecture-design/lack_thread_en_us.png
differ
diff --git a/img/architecture-design/process_priority_en_us.png
b/img/architecture-design/process_priority_en_us.png
new file mode 100644
index 0000000..c6cd600
Binary files /dev/null and b/img/architecture-design/process_priority_en_us.png
differ
diff --git a/img/architecture-design/task_priority_en_us.png
b/img/architecture-design/task_priority_en_us.png
new file mode 100644
index 0000000..3470260
Binary files /dev/null and b/img/architecture-design/task_priority_en_us.png
differ