Browse Source

update docs

pull/1/head
dailidong 6 years ago
parent
commit
342b28993c
  1. BIN
      docs/EasyScheduler使用手册.docx
  2. 11
      docs/gitbook/gitbook-plugin-livereload/plugin.js
  3. 4
      docs/gitbook/gitbook.js
  4. 4
      docs/gitbook/theme.js
  5. BIN
      docs/images/esr_1.png
  6. BIN
      docs/images/esr_12.png
  7. BIN
      docs/images/esr_13.png
  8. BIN
      docs/images/esr_2.png
  9. BIN
      docs/images/mal_2.png
  10. BIN
      docs/images/mal_24.png
  11. BIN
      docs/images/mal_26.png
  12. BIN
      docs/images/mal_27.png
  13. BIN
      docs/images/mal_28.png
  14. BIN
      docs/images/mal_29.png
  15. BIN
      docs/images/mal_30.png
  16. BIN
      docs/images/mal_31.png
  17. BIN
      docs/images/mal_32.png
  18. BIN
      docs/images/mal_33.png
  19. BIN
      docs/images/mal_34.png
  20. BIN
      docs/images/mal_35.png
  21. BIN
      docs/images/mal_36.png
  22. BIN
      docs/images/mal_37.png
  23. BIN
      docs/images/mal_38.png
  24. BIN
      docs/images/mal_39.png
  25. BIN
      docs/images/mal_40.png
  26. BIN
      docs/images/mal_45.png
  27. BIN
      docs/images/mal_55.png
  28. BIN
      docs/images/mal_56.png
  29. BIN
      docs/images/mal_59.png
  30. BIN
      docs/images/mal_60.png
  31. BIN
      docs/images/mal_61.png
  32. BIN
      docs/images/mal_62.png
  33. BIN
      docs/images/mal_63.png
  34. BIN
      docs/images/mal_64.png
  35. BIN
      docs/images/vs_scheduler.jpg
  36. 902
      docs/index.html
  37. 1
      docs/pages/background-1.md
  38. 882
      docs/pages/background-2.html
  39. 1548
      docs/pages/deploy-background.html
  40. 1
      docs/pages/foreground-1.md
  41. 882
      docs/pages/foreground-2.html
  42. 1037
      docs/pages/guide-architecture.html
  43. 1639
      docs/pages/guide-manual.html
  44. 1
      docs/search_index.json
  45. BIN
      docs/zh_CN/Easyscheduler文档.pdf
  46. 71
      docs/zh_CN/README.md
  47. 21
      docs/zh_CN/SUMMARY.md
  48. BIN
      docs/zh_CN/_book/Easyscheduler.pdf
  49. 749
      docs/zh_CN/_book/architecture-design.html
  50. 886
      docs/zh_CN/_book/backend-deploy.html
  51. 567
      docs/zh_CN/_book/frontend-deploy.html
  52. 852
      docs/zh_CN/_book/frontend-development.html
  53. 0
      docs/zh_CN/_book/gitbook/fonts/fontawesome/FontAwesome.otf
  54. 0
      docs/zh_CN/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot
  55. 0
      docs/zh_CN/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg
  56. 0
      docs/zh_CN/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf
  57. 0
      docs/zh_CN/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff
  58. 0
      docs/zh_CN/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2
  59. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css
  60. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js
  61. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js
  62. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-fontsettings/website.css
  63. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-highlight/ebook.css
  64. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-highlight/website.css
  65. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-insert-logo-link/plugin.css
  66. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-insert-logo-link/plugin.js
  67. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-lunr/lunr.min.js
  68. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-lunr/search-lunr.js
  69. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-search/lunr.min.js
  70. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-search/search-engine.js
  71. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-search/search.css
  72. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-search/search.js
  73. 0
      docs/zh_CN/_book/gitbook/gitbook-plugin-sharing/buttons.js
  74. 4
      docs/zh_CN/_book/gitbook/gitbook.js
  75. 0
      docs/zh_CN/_book/gitbook/images/apple-touch-icon-precomposed-152.png
  76. 0
      docs/zh_CN/_book/gitbook/images/favicon.ico
  77. 0
      docs/zh_CN/_book/gitbook/style.css
  78. 4
      docs/zh_CN/_book/gitbook/theme.js
  79. 0
      docs/zh_CN/_book/images/addtenant.png
  80. BIN
      docs/zh_CN/_book/images/architecture.jpg
  81. 0
      docs/zh_CN/_book/images/auth_project.png
  82. 0
      docs/zh_CN/_book/images/auth_user.png
  83. 0
      docs/zh_CN/_book/images/complement_data.png
  84. BIN
      docs/zh_CN/_book/images/dag_examples_cn.jpg
  85. BIN
      docs/zh_CN/_book/images/dag_examples_en.jpg
  86. 0
      docs/zh_CN/_book/images/decentralization.png
  87. 0
      docs/zh_CN/_book/images/definition_create.png
  88. 0
      docs/zh_CN/_book/images/definition_edit.png
  89. 0
      docs/zh_CN/_book/images/definition_list.png
  90. 0
      docs/zh_CN/_book/images/dependent_1.jpg
  91. 0
      docs/zh_CN/_book/images/dependent_2.jpg
  92. BIN
      docs/zh_CN/_book/images/dependent_edit.png
  93. BIN
      docs/zh_CN/_book/images/dependent_edit2.png
  94. BIN
      docs/zh_CN/_book/images/dependent_edit3.png
  95. BIN
      docs/zh_CN/_book/images/dependent_edit4.png
  96. BIN
      docs/zh_CN/_book/images/devp_1.jpg
  97. 0
      docs/zh_CN/_book/images/distributed_lock.png
  98. 0
      docs/zh_CN/_book/images/distributed_lock_procss.png
  99. 0
      docs/zh_CN/_book/images/fault-tolerant.png
  100. 0
      docs/zh_CN/_book/images/fault-tolerant_master.png
  101. Some files were not shown because too many files have changed in this diff Show More

BIN
docs/EasyScheduler使用手册.docx

Binary file not shown.

11
docs/gitbook/gitbook-plugin-livereload/plugin.js

@ -1,11 +0,0 @@
(function() {
var newEl = document.createElement('script'),
firstScriptTag = document.getElementsByTagName('script')[0];
if (firstScriptTag) {
newEl.async = 1;
newEl.src = '//' + window.location.hostname + ':35729/livereload.js';
firstScriptTag.parentNode.insertBefore(newEl, firstScriptTag);
}
})();

4
docs/gitbook/gitbook.js

File diff suppressed because one or more lines are too long

4
docs/gitbook/theme.js

File diff suppressed because one or more lines are too long

BIN
docs/images/esr_1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

BIN
docs/images/esr_12.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

BIN
docs/images/esr_13.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

BIN
docs/images/esr_2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

BIN
docs/images/mal_2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

BIN
docs/images/mal_24.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

BIN
docs/images/mal_26.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

BIN
docs/images/mal_27.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

BIN
docs/images/mal_28.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 929 B

BIN
docs/images/mal_29.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

BIN
docs/images/mal_30.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

BIN
docs/images/mal_31.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

BIN
docs/images/mal_32.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

BIN
docs/images/mal_33.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

BIN
docs/images/mal_34.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

BIN
docs/images/mal_35.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

BIN
docs/images/mal_36.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/images/mal_37.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

BIN
docs/images/mal_38.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

BIN
docs/images/mal_39.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

BIN
docs/images/mal_40.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

BIN
docs/images/mal_45.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

BIN
docs/images/mal_55.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/images/mal_56.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

BIN
docs/images/mal_59.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

BIN
docs/images/mal_60.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

BIN
docs/images/mal_61.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

BIN
docs/images/mal_62.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

BIN
docs/images/mal_63.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

BIN
docs/images/mal_64.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

BIN
docs/images/vs_scheduler.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 KiB

902
docs/index.html

@ -1,902 +0,0 @@
<!DOCTYPE HTML>
<html lang="zh-hans" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Easyscheduler简介 · 调度系统-EasyScheduler</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.3">
<meta name="author" content="YIGUAN">
<link rel="stylesheet" href="gitbook/style.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-insert-logo-link/plugin.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
<link rel="stylesheet" href="styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="输入并搜索" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter active" data-level="1.1" data-path="./">
<a href="./">
Easyscheduler简介
</a>
</li>
<li class="chapter " data-level="1.2" >
<span>
导读指南
</span>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="pages/guide-architecture.html">
<a href="pages/guide-architecture.html">
系统架构分析
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1.1" data-path="pages/guide-architecture.html">
<a href="pages/guide-architecture.html#导语">
导语
</a>
</li>
<li class="chapter " data-level="1.2.1.2" data-path="pages/guide-architecture.html">
<a href="pages/guide-architecture.html#背景">
背景
</a>
</li>
<li class="chapter " data-level="1.2.1.3" data-path="pages/guide-architecture.html">
<a href="pages/guide-architecture.html#总架构设计">
总架构设计
</a>
</li>
<li class="chapter " data-level="1.2.1.4" data-path="pages/guide-architecture.html">
<a href="pages/guide-architecture.html#中心化思想">
中心化思想
</a>
</li>
<li class="chapter " data-level="1.2.1.5" data-path="pages/guide-architecture.html">
<a href="pages/guide-architecture.html#分布式锁实践">
分布式锁实践
</a>
</li>
<li class="chapter " data-level="1.2.1.6" data-path="pages/guide-architecture.html">
<a href="pages/guide-architecture.html#线程不足循环等待问题">
线程不足循环等待问题
</a>
</li>
<li class="chapter " data-level="1.2.1.7" data-path="pages/guide-architecture.html">
<a href="pages/guide-architecture.html#容错设计">
容错设计
</a>
</li>
<li class="chapter " data-level="1.2.1.8" data-path="pages/guide-architecture.html">
<a href="pages/guide-architecture.html#日志访问">
Logback和gRPC实现日志访问
</a>
</li>
<li class="chapter " data-level="1.2.1.9" data-path="pages/guide-architecture.html">
<a href="pages/guide-architecture.html#总结">
总结
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.2" data-path="pages/guide-manual.html">
<a href="pages/guide-manual.html">
使用手册
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1" data-path="pages/guide-manual.html">
<a href="pages/guide-manual.html#登录">
登录
</a>
</li>
<li class="chapter " data-level="1.2.2.2" data-path="pages/guide-manual.html">
<a href="pages/guide-manual.html#安全中心">
安全中心
</a>
</li>
<li class="chapter " data-level="1.2.2.3" data-path="pages/guide-manual.html">
<a href="pages/guide-manual.html#资源中心">
资源中心
</a>
</li>
<li class="chapter " data-level="1.2.2.4" data-path="pages/guide-manual.html">
<a href="pages/guide-manual.html#数据源中心">
数据源中心
</a>
</li>
<li class="chapter " data-level="1.2.2.5" data-path="pages/guide-manual.html">
<a href="pages/guide-manual.html#项目管理">
项目管理
</a>
</li>
<li class="chapter " data-level="1.2.2.6" data-path="pages/guide-manual.html">
<a href="pages/guide-manual.html#首页">
站点首页
</a>
</li>
<li class="chapter " data-level="1.2.2.7" data-path="pages/guide-manual.html">
<a href="pages/guide-manual.html#任务依赖">
任务依赖
</a>
</li>
<li class="chapter " data-level="1.2.2.8" data-path="pages/guide-manual.html">
<a href="pages/guide-manual.html#系统参数">
系统参数
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" >
<span>
项目部署文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="pages/deploy-foreground.html">
<a href="pages/deploy-foreground.html">
前端部署
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1.1" data-path="pages/deploy-foreground.html">
<a href="pages/deploy-foreground.html#前端项目环境构建及编译">
前端项目环境构建及编译
</a>
</li>
<li class="chapter " data-level="1.3.1.2" data-path="pages/deploy-foreground.html">
<a href="pages/deploy-foreground.html#安装及配置">
安装及配置
</a>
</li>
<li class="chapter " data-level="1.3.1.3" data-path="pages/deploy-foreground.html">
<a href="pages/deploy-foreground.html#项目生产环境配置">
项目生产环境Nginx配置
</a>
</li>
<li class="chapter " data-level="1.3.1.4" data-path="pages/deploy-foreground.html">
<a href="pages/deploy-foreground.html#前端项目发布">
前端项目发布
</a>
</li>
<li class="chapter " data-level="1.3.1.5" data-path="pages/deploy-foreground.html">
<a href="pages/deploy-foreground.html#问题">
问题
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.2" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html">
后端部署
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.2.1" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#基础软件安装">
基础软件安装
</a>
</li>
<li class="chapter " data-level="1.3.2.2" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#项目编译">
项目编译
</a>
</li>
<li class="chapter " data-level="1.3.2.3" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#数据库初始化">
数据库初始化
</a>
</li>
<li class="chapter " data-level="1.3.2.4" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#创建部署用户">
创建部署用户
</a>
</li>
<li class="chapter " data-level="1.3.2.5" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#配置文件">
配置文件
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.2.5.1" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#escheduler-alert">
escheduler-alert
</a>
</li>
<li class="chapter " data-level="1.3.2.5.2" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#escheduler-common">
escheduler-common
</a>
</li>
<li class="chapter " data-level="1.3.2.5.3" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#escheduler-dao">
escheduler-dao
</a>
</li>
<li class="chapter " data-level="1.3.2.5.4" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#escheduler-server">
escheduler-server
</a>
</li>
<li class="chapter " data-level="1.3.2.5.5" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#escheduler-web">
escheduler-web
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.2.6" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#启动停止命令">
启动停止命令
</a>
</li>
<li class="chapter " data-level="1.3.2.7" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#一键启停脚本">
一键启停脚本
</a>
</li>
<li class="chapter " data-level="1.3.2.8" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#监控服务">
监控服务
</a>
</li>
<li class="chapter " data-level="1.3.2.9" data-path="pages/deploy-background.html">
<a href="pages/deploy-background.html#日志查看">
日志查看
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" >
<span>
前端开发文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.4.1" data-path="pages/foreground-2.html">
<a href="pages/foreground-2.html">
安装
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5" >
<span>
后端开发文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.5.1" data-path="pages/background-2.html">
<a href="pages/background-2.html">
后端说明2
</a>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本书使用 GitBook 发布
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href="." >Easyscheduler简介</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h1 id="&#x7B80;&#x4ECB;">&#x7B80;&#x4ECB;</h1>
<h2 id="&#x5BFC;&#x8BED;">&#x5BFC;&#x8BED;</h2>
<blockquote>
<h5 id="easyscheduler&#x662F;&#x6613;&#x89C2;&#x7814;&#x53D1;&#x7684;&#x5927;&#x6570;&#x636E;&#x5206;&#x5E03;&#x5F0F;&#x5DE5;&#x4F5C;&#x6D41;&#x8C03;&#x5EA6;&#x7CFB;&#x7EDF;&#x3002;&#x4E3B;&#x8981;&#x89E3;&#x51B3;&#x6570;&#x636E;&#x7814;&#x53D1;etl&#x9519;&#x7EFC;&#x590D;&#x6742;&#x7684;&#x4F9D;&#x8D56;&#x5173;&#x7CFB;&#xFF0C;&#x800C;&#x4E0D;&#x80FD;&#x76F4;&#x89C2;&#x76D1;&#x63A7;&#x4EFB;&#x52A1;&#x5065;&#x5EB7;&#x72B6;&#x6001;&#x7B49;&#x95EE;&#x9898;&#x3002;easyscheduler&#x901A;&#x8FC7;&#x53EF;&#x89C6;&#x5316;&#x62D6;&#x62FD;&#x4EFB;&#x52A1;&#x8282;&#x70B9;&#x7684;&#x65B9;&#x5F0F;&#x5F62;&#x6210;dag&#x6709;&#x5411;&#x65E0;&#x73AF;&#x56FE;&#x6D41;&#x7A0B;&#x56FE;&#xFF0C;&#x5728;&#x8FD0;&#x884C;&#x8FC7;&#x7A0B;&#x4E2D;&#x53EF;&#x5B9E;&#x65F6;&#x76D1;&#x63A7;&#x4EFB;&#x52A1;&#x7684;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#xFF0C;&#x540C;&#x65F6;&#x652F;&#x6301;&#x91CD;&#x8BD5;&#x3001;&#x4ECE;&#x6307;&#x5B9A;&#x8282;&#x70B9;&#x6062;&#x590D;&#x5931;&#x8D25;&#x3001;&#x6682;&#x505C;&#x53CA;kill&#x4EFB;&#x52A1;&#x3001;&#x4EFB;&#x52A1;&#x8FD0;&#x884C;&#x5386;&#x53F2;&#x67E5;&#x770B;&#x7B49;&#x7B49;&#x64CD;&#x4F5C;&#x3002;">EasyScheduler&#x662F;&#x6613;&#x89C2;&#x7814;&#x53D1;&#x7684;&#x5927;&#x6570;&#x636E;&#x5206;&#x5E03;&#x5F0F;&#x5DE5;&#x4F5C;&#x6D41;&#x8C03;&#x5EA6;&#x7CFB;&#x7EDF;&#x3002;&#x4E3B;&#x8981;&#x89E3;&#x51B3;&#x6570;&#x636E;&#x7814;&#x53D1;ETL&#x9519;&#x7EFC;&#x590D;&#x6742;&#x7684;&#x4F9D;&#x8D56;&#x5173;&#x7CFB;&#xFF0C;&#x800C;&#x4E0D;&#x80FD;&#x76F4;&#x89C2;&#x76D1;&#x63A7;&#x4EFB;&#x52A1;&#x5065;&#x5EB7;&#x72B6;&#x6001;&#x7B49;&#x95EE;&#x9898;&#x3002;EasyScheduler&#x901A;&#x8FC7;&#x53EF;&#x89C6;&#x5316;&#x62D6;&#x62FD;&#x4EFB;&#x52A1;&#x8282;&#x70B9;&#x7684;&#x65B9;&#x5F0F;&#x5F62;&#x6210;DAG(&#x6709;&#x5411;&#x65E0;&#x73AF;&#x56FE;)&#x6D41;&#x7A0B;&#x56FE;&#xFF0C;&#x5728;&#x8FD0;&#x884C;&#x8FC7;&#x7A0B;&#x4E2D;&#x53EF;&#x5B9E;&#x65F6;&#x76D1;&#x63A7;&#x4EFB;&#x52A1;&#x7684;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#xFF0C;&#x540C;&#x65F6;&#x652F;&#x6301;&#x91CD;&#x8BD5;&#x3001;&#x4ECE;&#x6307;&#x5B9A;&#x8282;&#x70B9;&#x6062;&#x590D;&#x5931;&#x8D25;&#x3001;&#x6682;&#x505C;&#x53CA;Kill&#x4EFB;&#x52A1;&#x3001;&#x4EFB;&#x52A1;&#x8FD0;&#x884C;&#x5386;&#x53F2;&#x67E5;&#x770B;&#x7B49;&#x7B49;&#x64CD;&#x4F5C;&#x3002;</h5>
</blockquote>
<h2 id="&#x80CC;&#x666F;">&#x80CC;&#x666F;</h2>
<p> &#x5DE5;&#x4F5C;&#x6D41;&#x8C03;&#x5EA6;&#x7CFB;&#x7EDF;&#x5728;&#x5927;&#x6570;&#x636E;&#x5E73;&#x53F0;&#x4E2D;&#x662F;&#x4E00;&#x4E2A;&#x6838;&#x5FC3;&#x7684;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#xFF0C;&#x662F;&#x5927;&#x6570;&#x636E;&#x5F00;&#x53D1;&#x5FC5;&#x4E0D;&#x53EF;&#x5C11;&#x7684;&#x91CD;&#x8981;&#x7EC4;&#x6210;&#x90E8;&#x5206;&#x3002;&#x7531;&#x4E8E;&#x6570;&#x636E;&#x5904;&#x7406;&#x6D41;&#x7A0B;&#x5E38;&#x5E38;&#x5177;&#x6709;&#x5F88;&#x957F;&#x7684;&#x4F9D;&#x8D56;&#x94FE;&#x6761;&#xFF0C;&#x56E0;&#x6B64;&#x4F9D;&#x8D56;&#x5355;&#x673A;&#x7684;crontab&#x7B49;&#x5355;&#x7EAF;&#x4F9D;&#x8D56;&#x65F6;&#x95F4;&#x8C03;&#x5EA6;&#x7684;&#x65B9;&#x5F0F;&#xFF0C;&#x5F80;&#x5F80;&#x5B58;&#x5728;&#x5F88;&#x5927;&#x7684;&#x5F0A;&#x7AEF;&#xFF0C;&#x5982;&#x4F9D;&#x8D56;&#x4E0D;&#x6E05;&#x6670;&#xFF0C;&#x51FA;&#x9519;&#x96BE;&#x4EE5;&#x67E5;&#x627E;&#x7B49;&#x95EE;&#x9898;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x6211;&#x4EEC;&#x8C03;&#x7814;&#x4E86;&#x5E02;&#x9762;&#x4E0A;&#x6D41;&#x884C;&#x7684;&#x8C03;&#x5EA6;&#x7CFB;&#x7EDF;&#x3002;
&#x5E76;&#x548C;azkaban&#x3001;airflow&#x505A;&#x4E86;&#x4E00;&#x4E9B;&#x5BF9;&#x6BD4;&#xFF1A;</p>
<blockquote>
<h4 id=""> </h4>
</blockquote>
<p> <img src="images/vs_scheduler.jpg" alt="JPG"> </p>
<blockquote>
<h4 id="&#x2002;&#x2002;&#x2002;&#x2002;&#x2002;&#x2002;&#x2002;&#x9274;&#x4E8E;&#x6613;&#x89C2;&#x65E5;&#x5904;&#x7406;&#x6570;&#x636E;30tb&#xFF0C;&#x590D;&#x6742;&#x7684;etl&#x4F9D;&#x8D56;&#x5173;&#x7CFB;&#xFF0C;&#x6211;&#x4EEC;&#x5F00;&#x53D1;&#x4E86;easyscheduler&#x3002;">&#x2002;&#x2002;&#x2002;&#x2002;&#x2002;&#x2002;&#x2002;&#x9274;&#x4E8E;&#x6613;&#x89C2;&#x65E5;&#x5904;&#x7406;&#x6570;&#x636E;30TB&#xFF0C;&#x590D;&#x6742;&#x7684;ETL&#x4F9D;&#x8D56;&#x5173;&#x7CFB;&#xFF0C;&#x6211;&#x4EEC;&#x5F00;&#x53D1;&#x4E86;EasyScheduler&#x3002;</h4>
</blockquote>
<p>EasyScheduler&#x7531;&#x5728;&#x5DE5;&#x4F5C;&#x6D41;&#x8C03;&#x5EA6;&#x65B9;&#x9762;&#x5DE5;&#x4F5C;&#x591A;&#x5E74;&#x7684;&#x51E0;&#x4F4D;&#x5C0F;&#x4F19;&#x4F34;&#x7814;&#x53D1;&#x800C;&#x6210;&#xFF0C;&#x81F4;&#x529B;&#x4E8E;&#x6210;&#x4E3A;&#x5927;&#x6570;&#x636E;&#x5E73;&#x53F0;&#x7684;&#x4E2D;&#x6D41;&#x7825;&#x67F1;&#xFF0C;&#x4F7F;&#x8C03;&#x5EA6;&#x53D8;&#x5F97;&#x66F4;&#x52A0;&#x5BB9;&#x6613;&#xFF0C;&#x66F4;&#x53EF;&#x4EE5;&#x4ECE;&#x5176;&#x4E2D;&#x6587;&#x540D;&#x201C;&#x6613;&#x8C03;&#x5EA6;&#x201D;&#x770B;&#x51FA;&#x6211;&#x4EEC;&#x7684;&#x521D;&#x8877;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x5BF9;&#x76EE;&#x524D;&#x5E02;&#x9762;&#x4E0A;&#x7684;&#x8C03;&#x5EA6;&#x4E0D;&#x591F;&#x6EE1;&#x610F;&#xFF0C;&#x975E;&#x5E38;&#x6B22;&#x8FCE;&#x8BD5;&#x7528;&#x6613;&#x8C03;&#x5EA6;&#xFF0C;&#x6B22;&#x8FCE;&#x5927;&#x5BB6;&#x52A0;&#x5165;&#x8FDB;&#x6765;&#xFF0C;&#x63D0;&#x51FA;&#x9700;&#x6C42;&#xFF0C;&#x4E5F;&#x6B22;&#x8FCE;&#x8D21;&#x732E;&#x4EE3;&#x7801;&#xFF0C; &#x611F;&#x5174;&#x8DA3;&#x7684;&#x4F19;&#x4F34;&#x4EEC;&#x53EF;&#x4EE5;&#x52A0;&#x6211;&#x4EEC;&#x5FAE;&#x4FE1;&#xFF1A;510570367&#xFF0C;&#x4E00;&#x8D77;&#x52A0;&#x5165;EasyScheduler&#x5427;&#xFF0C;&#x591A;&#x591A;&#x4EA4;&#x6D41;&#xFF01;</p>
<h1 id="&#x7CFB;&#x7EDF;&#x90E8;&#x5206;&#x622A;&#x56FE;&#xFF1A;">&#x7CFB;&#x7EDF;&#x90E8;&#x5206;&#x622A;&#x56FE;&#xFF1A;</h1>
<p><img src="http://geek.analysys.cn/static/upload/47/2019-03-06/76db3013-8e3b-4d17-b167-2aa1e6a6b0ad.jpeg" alt="&#x5DE5;&#x4F5C;&#x6D41;&#x5B9E;&#x4F8B;"></p>
<p><img src="http://geek.analysys.cn/static/upload/47/2019-03-06/d2bef23a-cead-4bc9-a007-bc15c22ce7d2.jpeg" alt="&#x5DE5;&#x4F5C;&#x6D41;DAG&#x8BBE;&#x8BA1;"></p>
<p><img src="http://geek.analysys.cn/static/upload/47/2019-03-06/08b79a19-4aa0-4a73-a71b-81ad210513fb.jpeg" alt="&#x5DE5;&#x4F5C;&#x6D41;DAG&#x4EFB;&#x52A1;&#x8282;&#x70B9;&#x8BBE;&#x8BA1;"></p>
<p><img src="http://geek.analysys.cn/static/upload/47/2019-03-06/384dd8a3-4cf8-4e3e-944d-1185ba198f75.jpeg" alt="&#x5DE5;&#x4F5C;&#x6D41;&#x8FD0;&#x884C;&#x60C5;&#x51B5;"></p>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"Easyscheduler简介","level":"1.1","depth":1,"next":{"title":"导读指南","level":"1.2","depth":1,"ref":"","articles":[{"title":"系统架构分析","level":"1.2.1","depth":2,"path":"pages/guide-architecture.md","ref":"pages/guide-architecture.md","articles":[{"title":"导语","level":"1.2.1.1","depth":3,"anchor":"#导语","path":"pages/guide-architecture.md","ref":"pages/guide-architecture.md#导语","articles":[]},{"title":"背景","level":"1.2.1.2","depth":3,"anchor":"#背景","path":"pages/guide-architecture.md","ref":"pages/guide-architecture.md#背景","articles":[]},{"title":"总架构设计","level":"1.2.1.3","depth":3,"anchor":"#总架构设计","path":"pages/guide-architecture.md","ref":"pages/guide-architecture.md#总架构设计","articles":[]},{"title":"中心化思想","level":"1.2.1.4","depth":3,"anchor":"#中心化思想","path":"pages/guide-architecture.md","ref":"pages/guide-architecture.md#中心化思想","articles":[]},{"title":"分布式锁实践","level":"1.2.1.5","depth":3,"anchor":"#分布式锁实践","path":"pages/guide-architecture.md","ref":"pages/guide-architecture.md#分布式锁实践","articles":[]},{"title":"线程不足循环等待问题","level":"1.2.1.6","depth":3,"anchor":"#线程不足循环等待问题","path":"pages/guide-architecture.md","ref":"pages/guide-architecture.md#线程不足循环等待问题","articles":[]},{"title":"容错设计","level":"1.2.1.7","depth":3,"anchor":"#容错设计","path":"pages/guide-architecture.md","ref":"pages/guide-architecture.md#容错设计","articles":[]},{"title":"Logback和gRPC实现日志访问","level":"1.2.1.8","depth":3,"anchor":"#日志访问","path":"pages/guide-architecture.md","ref":"pages/guide-architecture.md#日志访问","articles":[]},{"title":"总结","level":"1.2.1.9","depth":3,"anchor":"#总结","path":"pages/guide-architecture.md","ref":"pages/guide-architecture.md#总结","articles":[]}]},{"title":"使用手册","level":"1.2.2","depth":2,"path":"pages/guide-manual.md","ref":"pages/guide-manual.md","articles":[{"title":"登录","level":"1.2.2.1","depth":3,"anchor":"#登录","path":"pages/guide-manual.md","ref":"pages/guide-manual.md#登录","articles":[]},{"title":"安全中心","level":"1.2.2.2","depth":3,"anchor":"#安全中心","path":"pages/guide-manual.md","ref":"pages/guide-manual.md#安全中心","articles":[]},{"title":"资源中心","level":"1.2.2.3","depth":3,"anchor":"#资源中心","path":"pages/guide-manual.md","ref":"pages/guide-manual.md#资源中心","articles":[]},{"title":"数据源中心","level":"1.2.2.4","depth":3,"anchor":"#数据源中心","path":"pages/guide-manual.md","ref":"pages/guide-manual.md#数据源中心","articles":[]},{"title":"项目管理","level":"1.2.2.5","depth":3,"anchor":"#项目管理","path":"pages/guide-manual.md","ref":"pages/guide-manual.md#项目管理","articles":[]},{"title":"站点首页","level":"1.2.2.6","depth":3,"anchor":"#首页","path":"pages/guide-manual.md","ref":"pages/guide-manual.md#首页","articles":[]},{"title":"任务依赖","level":"1.2.2.7","depth":3,"anchor":"#任务依赖","path":"pages/guide-manual.md","ref":"pages/guide-manual.md#任务依赖","articles":[]},{"title":"系统参数","level":"1.2.2.8","depth":3,"anchor":"#系统参数","path":"pages/guide-manual.md","ref":"pages/guide-manual.md#系统参数","articles":[]}]}]},"dir":"ltr"},"config":{"plugins":["expandable-chapters","insert-logo-link","livereload"],"styles":{"website":"./styles/website.css"},"pluginsConfig":{"livereload":{},"insert-logo-link":{"src":"images/logo.png","url":"/"},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"expandable-chapters":{}},"theme":"default","author":"YIGUAN","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"调度系统-EasyScheduler","language":"zh-hans","gitbook":"3.2.3","description":"调度系统"},"file":{"path":"README.md","mtime":"2019-03-07T09:03:43.002Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-03-07T11:30:18.635Z"},"basePath":".","book":{"language":""}});
});
</script>
</div>
<script src="gitbook/gitbook.js"></script>
<script src="gitbook/theme.js"></script>
<script src="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
<script src="gitbook/gitbook-plugin-insert-logo-link/plugin.js"></script>
<script src="gitbook/gitbook-plugin-livereload/plugin.js"></script>
<script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
<script src="gitbook/gitbook-plugin-search/search.js"></script>
<script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
<script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
<script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
<script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>

1
docs/pages/background-1.md

@ -1 +0,0 @@
# 1.md

882
docs/pages/background-2.html

@ -1,882 +0,0 @@
<!DOCTYPE HTML>
<html lang="zh-hans" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>后端说明2 · 调度系统-EasyScheduler</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.3">
<meta name="author" content="YIGUAN">
<link rel="stylesheet" href="../gitbook/style.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-insert-logo-link/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-search/search.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-fontsettings/website.css">
<link rel="stylesheet" href="../styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="输入并搜索" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="../">
<a href="../">
Easyscheduler简介
</a>
</li>
<li class="chapter " data-level="1.2" >
<span>
导读指南
</span>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="guide-architecture.html">
<a href="guide-architecture.html">
系统架构分析
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1.1" data-path="guide-architecture.html">
<a href="guide-architecture.html#导语">
导语
</a>
</li>
<li class="chapter " data-level="1.2.1.2" data-path="guide-architecture.html">
<a href="guide-architecture.html#背景">
背景
</a>
</li>
<li class="chapter " data-level="1.2.1.3" data-path="guide-architecture.html">
<a href="guide-architecture.html#总架构设计">
总架构设计
</a>
</li>
<li class="chapter " data-level="1.2.1.4" data-path="guide-architecture.html">
<a href="guide-architecture.html#中心化思想">
中心化思想
</a>
</li>
<li class="chapter " data-level="1.2.1.5" data-path="guide-architecture.html">
<a href="guide-architecture.html#分布式锁实践">
分布式锁实践
</a>
</li>
<li class="chapter " data-level="1.2.1.6" data-path="guide-architecture.html">
<a href="guide-architecture.html#线程不足循环等待问题">
线程不足循环等待问题
</a>
</li>
<li class="chapter " data-level="1.2.1.7" data-path="guide-architecture.html">
<a href="guide-architecture.html#容错设计">
容错设计
</a>
</li>
<li class="chapter " data-level="1.2.1.8" data-path="guide-architecture.html">
<a href="guide-architecture.html#日志访问">
Logback和gRPC实现日志访问
</a>
</li>
<li class="chapter " data-level="1.2.1.9" data-path="guide-architecture.html">
<a href="guide-architecture.html#总结">
总结
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.2" data-path="guide-manual.html">
<a href="guide-manual.html">
使用手册
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1" data-path="guide-manual.html">
<a href="guide-manual.html#登录">
登录
</a>
</li>
<li class="chapter " data-level="1.2.2.2" data-path="guide-manual.html">
<a href="guide-manual.html#安全中心">
安全中心
</a>
</li>
<li class="chapter " data-level="1.2.2.3" data-path="guide-manual.html">
<a href="guide-manual.html#资源中心">
资源中心
</a>
</li>
<li class="chapter " data-level="1.2.2.4" data-path="guide-manual.html">
<a href="guide-manual.html#数据源中心">
数据源中心
</a>
</li>
<li class="chapter " data-level="1.2.2.5" data-path="guide-manual.html">
<a href="guide-manual.html#项目管理">
项目管理
</a>
</li>
<li class="chapter " data-level="1.2.2.6" data-path="guide-manual.html">
<a href="guide-manual.html#首页">
站点首页
</a>
</li>
<li class="chapter " data-level="1.2.2.7" data-path="guide-manual.html">
<a href="guide-manual.html#任务依赖">
任务依赖
</a>
</li>
<li class="chapter " data-level="1.2.2.8" data-path="guide-manual.html">
<a href="guide-manual.html#系统参数">
系统参数
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" >
<span>
项目部署文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="deploy-foreground.html">
<a href="deploy-foreground.html">
前端部署
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1.1" data-path="deploy-foreground.html">
<a href="deploy-foreground.html#前端项目环境构建及编译">
前端项目环境构建及编译
</a>
</li>
<li class="chapter " data-level="1.3.1.2" data-path="deploy-foreground.html">
<a href="deploy-foreground.html#安装及配置">
安装及配置
</a>
</li>
<li class="chapter " data-level="1.3.1.3" data-path="deploy-foreground.html">
<a href="deploy-foreground.html#项目生产环境配置">
项目生产环境Nginx配置
</a>
</li>
<li class="chapter " data-level="1.3.1.4" data-path="deploy-foreground.html">
<a href="deploy-foreground.html#前端项目发布">
前端项目发布
</a>
</li>
<li class="chapter " data-level="1.3.1.5" data-path="deploy-foreground.html">
<a href="deploy-foreground.html#问题">
问题
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.2" data-path="deploy-background.html">
<a href="deploy-background.html">
后端部署
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.2.1" data-path="deploy-background.html">
<a href="deploy-background.html#基础软件安装">
基础软件安装
</a>
</li>
<li class="chapter " data-level="1.3.2.2" data-path="deploy-background.html">
<a href="deploy-background.html#项目编译">
项目编译
</a>
</li>
<li class="chapter " data-level="1.3.2.3" data-path="deploy-background.html">
<a href="deploy-background.html#数据库初始化">
数据库初始化
</a>
</li>
<li class="chapter " data-level="1.3.2.4" data-path="deploy-background.html">
<a href="deploy-background.html#创建部署用户">
创建部署用户
</a>
</li>
<li class="chapter " data-level="1.3.2.5" data-path="deploy-background.html">
<a href="deploy-background.html#配置文件">
配置文件
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.2.5.1" data-path="deploy-background.html">
<a href="deploy-background.html#escheduler-alert">
escheduler-alert
</a>
</li>
<li class="chapter " data-level="1.3.2.5.2" data-path="deploy-background.html">
<a href="deploy-background.html#escheduler-common">
escheduler-common
</a>
</li>
<li class="chapter " data-level="1.3.2.5.3" data-path="deploy-background.html">
<a href="deploy-background.html#escheduler-dao">
escheduler-dao
</a>
</li>
<li class="chapter " data-level="1.3.2.5.4" data-path="deploy-background.html">
<a href="deploy-background.html#escheduler-server">
escheduler-server
</a>
</li>
<li class="chapter " data-level="1.3.2.5.5" data-path="deploy-background.html">
<a href="deploy-background.html#escheduler-web">
escheduler-web
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.2.6" data-path="deploy-background.html">
<a href="deploy-background.html#启动停止命令">
启动停止命令
</a>
</li>
<li class="chapter " data-level="1.3.2.7" data-path="deploy-background.html">
<a href="deploy-background.html#一键启停脚本">
一键启停脚本
</a>
</li>
<li class="chapter " data-level="1.3.2.8" data-path="deploy-background.html">
<a href="deploy-background.html#监控服务">
监控服务
</a>
</li>
<li class="chapter " data-level="1.3.2.9" data-path="deploy-background.html">
<a href="deploy-background.html#日志查看">
日志查看
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" >
<span>
前端开发文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.4.1" data-path="foreground-2.html">
<a href="foreground-2.html">
安装
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5" >
<span>
后端开发文档
</span>
<ul class="articles">
<li class="chapter active" data-level="1.5.1" data-path="background-2.html">
<a href="background-2.html">
后端说明2
</a>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本书使用 GitBook 发布
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href=".." >后端说明2</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h1 id="trailingend">trailingEnd</h1>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"后端说明2","level":"1.5.1","depth":2,"previous":{"title":"后端开发文档","level":"1.5","depth":1,"ref":"","articles":[{"title":"后端说明2","level":"1.5.1","depth":2,"path":"pages/background-2.md","ref":"pages/background-2.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["expandable-chapters","insert-logo-link","livereload"],"styles":{"website":"./styles/website.css"},"pluginsConfig":{"livereload":{},"insert-logo-link":{"src":"../images/logo.png","url":"/"},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"expandable-chapters":{}},"theme":"default","author":"YIGUAN","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"调度系统-EasyScheduler","language":"zh-hans","gitbook":"3.2.3","description":"调度系统"},"file":{"path":"pages/background-2.md","mtime":"2019-03-07T08:53:26.018Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-03-07T11:30:18.635Z"},"basePath":"..","book":{"language":""}});
});
</script>
</div>
<script src="../gitbook/gitbook.js"></script>
<script src="../gitbook/theme.js"></script>
<script src="../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
<script src="../gitbook/gitbook-plugin-insert-logo-link/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-livereload/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
<script src="../gitbook/gitbook-plugin-search/search.js"></script>
<script src="../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
<script src="../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
<script src="../gitbook/gitbook-plugin-sharing/buttons.js"></script>
<script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>

1548
docs/pages/deploy-background.html

File diff suppressed because it is too large Load Diff

1
docs/pages/foreground-1.md

@ -1 +0,0 @@
# 1.md

882
docs/pages/foreground-2.html

@ -1,882 +0,0 @@
<!DOCTYPE HTML>
<html lang="zh-hans" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>安装 · 调度系统-EasyScheduler</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.3">
<meta name="author" content="YIGUAN">
<link rel="stylesheet" href="../gitbook/style.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-insert-logo-link/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-search/search.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-fontsettings/website.css">
<link rel="stylesheet" href="../styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="输入并搜索" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="../">
<a href="../">
Easyscheduler简介
</a>
</li>
<li class="chapter " data-level="1.2" >
<span>
导读指南
</span>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="guide-architecture.html">
<a href="guide-architecture.html">
系统架构分析
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1.1" data-path="guide-architecture.html">
<a href="guide-architecture.html#导语">
导语
</a>
</li>
<li class="chapter " data-level="1.2.1.2" data-path="guide-architecture.html">
<a href="guide-architecture.html#背景">
背景
</a>
</li>
<li class="chapter " data-level="1.2.1.3" data-path="guide-architecture.html">
<a href="guide-architecture.html#总架构设计">
总架构设计
</a>
</li>
<li class="chapter " data-level="1.2.1.4" data-path="guide-architecture.html">
<a href="guide-architecture.html#中心化思想">
中心化思想
</a>
</li>
<li class="chapter " data-level="1.2.1.5" data-path="guide-architecture.html">
<a href="guide-architecture.html#分布式锁实践">
分布式锁实践
</a>
</li>
<li class="chapter " data-level="1.2.1.6" data-path="guide-architecture.html">
<a href="guide-architecture.html#线程不足循环等待问题">
线程不足循环等待问题
</a>
</li>
<li class="chapter " data-level="1.2.1.7" data-path="guide-architecture.html">
<a href="guide-architecture.html#容错设计">
容错设计
</a>
</li>
<li class="chapter " data-level="1.2.1.8" data-path="guide-architecture.html">
<a href="guide-architecture.html#日志访问">
Logback和gRPC实现日志访问
</a>
</li>
<li class="chapter " data-level="1.2.1.9" data-path="guide-architecture.html">
<a href="guide-architecture.html#总结">
总结
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.2" data-path="guide-manual.html">
<a href="guide-manual.html">
使用手册
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1" data-path="guide-manual.html">
<a href="guide-manual.html#登录">
登录
</a>
</li>
<li class="chapter " data-level="1.2.2.2" data-path="guide-manual.html">
<a href="guide-manual.html#安全中心">
安全中心
</a>
</li>
<li class="chapter " data-level="1.2.2.3" data-path="guide-manual.html">
<a href="guide-manual.html#资源中心">
资源中心
</a>
</li>
<li class="chapter " data-level="1.2.2.4" data-path="guide-manual.html">
<a href="guide-manual.html#数据源中心">
数据源中心
</a>
</li>
<li class="chapter " data-level="1.2.2.5" data-path="guide-manual.html">
<a href="guide-manual.html#项目管理">
项目管理
</a>
</li>
<li class="chapter " data-level="1.2.2.6" data-path="guide-manual.html">
<a href="guide-manual.html#首页">
站点首页
</a>
</li>
<li class="chapter " data-level="1.2.2.7" data-path="guide-manual.html">
<a href="guide-manual.html#任务依赖">
任务依赖
</a>
</li>
<li class="chapter " data-level="1.2.2.8" data-path="guide-manual.html">
<a href="guide-manual.html#系统参数">
系统参数
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" >
<span>
项目部署文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="deploy-foreground.html">
<a href="deploy-foreground.html">
前端部署
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1.1" data-path="deploy-foreground.html">
<a href="deploy-foreground.html#前端项目环境构建及编译">
前端项目环境构建及编译
</a>
</li>
<li class="chapter " data-level="1.3.1.2" data-path="deploy-foreground.html">
<a href="deploy-foreground.html#安装及配置">
安装及配置
</a>
</li>
<li class="chapter " data-level="1.3.1.3" data-path="deploy-foreground.html">
<a href="deploy-foreground.html#项目生产环境配置">
项目生产环境Nginx配置
</a>
</li>
<li class="chapter " data-level="1.3.1.4" data-path="deploy-foreground.html">
<a href="deploy-foreground.html#前端项目发布">
前端项目发布
</a>
</li>
<li class="chapter " data-level="1.3.1.5" data-path="deploy-foreground.html">
<a href="deploy-foreground.html#问题">
问题
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.2" data-path="deploy-background.html">
<a href="deploy-background.html">
后端部署
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.2.1" data-path="deploy-background.html">
<a href="deploy-background.html#基础软件安装">
基础软件安装
</a>
</li>
<li class="chapter " data-level="1.3.2.2" data-path="deploy-background.html">
<a href="deploy-background.html#项目编译">
项目编译
</a>
</li>
<li class="chapter " data-level="1.3.2.3" data-path="deploy-background.html">
<a href="deploy-background.html#数据库初始化">
数据库初始化
</a>
</li>
<li class="chapter " data-level="1.3.2.4" data-path="deploy-background.html">
<a href="deploy-background.html#创建部署用户">
创建部署用户
</a>
</li>
<li class="chapter " data-level="1.3.2.5" data-path="deploy-background.html">
<a href="deploy-background.html#配置文件">
配置文件
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.2.5.1" data-path="deploy-background.html">
<a href="deploy-background.html#escheduler-alert">
escheduler-alert
</a>
</li>
<li class="chapter " data-level="1.3.2.5.2" data-path="deploy-background.html">
<a href="deploy-background.html#escheduler-common">
escheduler-common
</a>
</li>
<li class="chapter " data-level="1.3.2.5.3" data-path="deploy-background.html">
<a href="deploy-background.html#escheduler-dao">
escheduler-dao
</a>
</li>
<li class="chapter " data-level="1.3.2.5.4" data-path="deploy-background.html">
<a href="deploy-background.html#escheduler-server">
escheduler-server
</a>
</li>
<li class="chapter " data-level="1.3.2.5.5" data-path="deploy-background.html">
<a href="deploy-background.html#escheduler-web">
escheduler-web
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3.2.6" data-path="deploy-background.html">
<a href="deploy-background.html#启动停止命令">
启动停止命令
</a>
</li>
<li class="chapter " data-level="1.3.2.7" data-path="deploy-background.html">
<a href="deploy-background.html#一键启停脚本">
一键启停脚本
</a>
</li>
<li class="chapter " data-level="1.3.2.8" data-path="deploy-background.html">
<a href="deploy-background.html#监控服务">
监控服务
</a>
</li>
<li class="chapter " data-level="1.3.2.9" data-path="deploy-background.html">
<a href="deploy-background.html#日志查看">
日志查看
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" >
<span>
前端开发文档
</span>
<ul class="articles">
<li class="chapter active" data-level="1.4.1" data-path="foreground-2.html">
<a href="foreground-2.html">
安装
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5" >
<span>
后端开发文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.5.1" data-path="background-2.html">
<a href="background-2.html">
后端说明2
</a>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本书使用 GitBook 发布
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href=".." >安装</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h1 id="frontend">frontEnd</h1>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"安装","level":"1.4.1","depth":2,"next":{"title":"后端开发文档","level":"1.5","depth":1,"ref":"","articles":[{"title":"后端说明2","level":"1.5.1","depth":2,"path":"pages/background-2.md","ref":"pages/background-2.md","articles":[]}]},"previous":{"title":"前端开发文档","level":"1.4","depth":1,"ref":"","articles":[{"title":"安装","level":"1.4.1","depth":2,"path":"pages/foreground-2.md","ref":"pages/foreground-2.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["expandable-chapters","insert-logo-link","livereload"],"styles":{"website":"./styles/website.css"},"pluginsConfig":{"livereload":{},"insert-logo-link":{"src":"../images/logo.png","url":"/"},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"expandable-chapters":{}},"theme":"default","author":"YIGUAN","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"调度系统-EasyScheduler","language":"zh-hans","gitbook":"3.2.3","description":"调度系统"},"file":{"path":"pages/foreground-2.md","mtime":"2019-03-07T08:53:26.019Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-03-07T11:30:18.635Z"},"basePath":"..","book":{"language":""}});
});
</script>
</div>
<script src="../gitbook/gitbook.js"></script>
<script src="../gitbook/theme.js"></script>
<script src="../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
<script src="../gitbook/gitbook-plugin-insert-logo-link/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-livereload/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
<script src="../gitbook/gitbook-plugin-search/search.js"></script>
<script src="../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
<script src="../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
<script src="../gitbook/gitbook-plugin-sharing/buttons.js"></script>
<script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>

1037
docs/pages/guide-architecture.html

File diff suppressed because it is too large Load Diff

1639
docs/pages/guide-manual.html

File diff suppressed because it is too large Load Diff

1
docs/search_index.json

File diff suppressed because one or more lines are too long

BIN
docs/zh_CN/Easyscheduler文档.pdf

Binary file not shown.

71
docs/zh_CN/README.md

@ -0,0 +1,71 @@
### Easy Scheduler
[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
> Easy Scheduler for Big Data
**设计特点:** 一个分布式易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中`开箱即用`。
其主要目标如下:
- 以DAG图的方式将Task按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态
- 支持丰富的任务类型:Shell、MR、Spark、SQL(mysql、postgresql、hive、sparksql),Python,Sub_Process、Procedure等
- 支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill任务等操作
- 支持工作流优先级、任务优先级及任务的故障转移及任务超时告警/失败
- 支持工作流全局参数及节点自定义参数设置
- 支持资源文件的在线上传/下载,管理等,支持在线文件创建、编辑
- 支持任务日志在线查看及滚动、在线下载日志等
- 实现集群HA,通过Zookeeper实现Master集群和Worker集群去中心化
- 支持对`Master/Worker` cpu load,memory,cpu在线查看
- 支持工作流运行历史树形/甘特图展示、支持任务状态统计、流程状态统计
- 支持补数
- 支持多租户
- 支持国际化
- 还有更多等待伙伴们探索
### 与同类调度系统的对比
<style>
table th:first-of-type {
width: 200px;
}
</style>
| | EasyScheduler | Azkaban | Airflow |
| :---------------------- | :------------------------------------------------------------ | :------------------------------------------------------------ | :------------------------------------------------------------ |
| <h6>稳定性 | | | |
| 单点故障 | 去中心化的多Master和多Worker | 是 <br> 单个Web和调度程序组合 | 是<br> 单一调度程序 |
| HA额外要求 | 不需要(本身就支持HA) | DB | Celery / Dask / Mesos + Load Balancer + DB |
| 过载处理 | 任务队列机制,单个机器上可调度的任务数量可以灵活配置,当任务过多时会缓存在任务队列中,不会造成机器卡死 | 任务太多时会卡死服务器 | 任务太多时会卡死服务器 |
| <h6>易用性 | | | |
| DAG监控界面 | 任务状态、任务类型、重试次数、任务运行机器、可视化变量等关键信息一目了然 | 只能看到任务状态 | 不能直观区分任务类型 |
| 可视化流程定义 | 是 <br> 所有流程定义操作都是可视化的,通过拖拽任务来绘制DAG,配置数据源及资源。同时对于第三方系统,提供api方式的操作。 | 否 <br> 通过自定义DSL绘制DAG并打包上传 | 否 <br> 通过python代码来绘制DAG,使用不便,特别是对不会写代码的业务人员基本无法使用。 |
| 快速部署 | 一键部署 | 集群化部署复杂 | 集群化部署复杂 |
| <h6>功能 | | | |
| 是否能暂停和恢复 | 支持暂停,恢复操作 | 否 <br> 需将工作流杀死再运行 | 否 <br> 需将工作流杀死再运行 |
| 是否支持多租户 | 支持 <br> easyscheduler上的用户可以通过租户和hadoop用户实现多对一或一对一的映射关系,这对大数据作业的调度是非常重要的。 | 否 | 否 |
| 任务类型 | 支持传统的shell任务,同时支持大数据平台任务调度: MR、Spark、SQL(mysql、postgresql、hive、sparksql)、Python、Procedure、Sub_Process | shell、gobblin、hadoopJava、java、hive、pig、spark、hdfsToTeradata、teradataToHdfs | BashOperator、DummyOperator、MySqlOperator、HiveOperator、EmailOperator、HTTPOperator、SqlOperator |
| 契合度 | 支持大数据作业spark,hive,mr的调度,同时由于支持多租户,与大数据业务更加契合 | 由于不支持多租户,在大数据平台业务使用不够灵活 | 由于不支持多租户,在大数据平台业务使用不够灵活 |
| <h6>扩展性 | | | |
| <center>是否支持自定义任务类型 | 是 | 是 | 是 |
| 是否支持集群扩展 | 是 <br> 调度器使用分布式调度,整体的调度能力会随便集群的规模线性增长,Master和Worker支持动态上下线 | 是,但是复杂 <br> Executor水平扩展 | 是,但是复杂 <br> Executor水平扩展 |
### 系统部分截图
![](http://geek.analysys.cn/static/upload/47/2019-03-06/76db3013-8e3b-4d17-b167-2aa1e6a6b0ad.jpeg)
![](http://geek.analysys.cn/static/upload/47/2019-03-06/08b79a19-4aa0-4a73-a71b-81ad210513fb.jpeg)
![](http://geek.analysys.cn/static/upload/47/2019-03-06/384dd8a3-4cf8-4e3e-944d-1185ba198f75.jpeg)
### 文档
- 部署文档
<a href="https://analysys.github.io/EasyScheduler/pages/deploy-background.html" target="_blank">后端部署文档</a>
<a href="https://analysys.github.io/EasyScheduler/pages/deploy-foreground.html" target="_blank">前端部署文档</a>
[**使用手册**](https://analysys.github.io/EasyScheduler/pages/guide-manual.html?_blank "使用手册")
更多文档请参考 XXX
### 帮助
The fastest way to get response from our developers is to submit issues, or add our wechat : 510570367

21
docs/zh_CN/SUMMARY.md

@ -0,0 +1,21 @@
# Summary
* [Easyscheduler简介](README.md)
* 前端文档
* [环境搭建](frontend-deploy.md#前端项目环境构建及编译)
* [安装及配置](frontend-deploy.md#安装及配置)
* [项目生产环境Nginx配置](frontend-deploy.md#项目生产环境配置)
* [前端项目发布](frontend-deploy.md#前端项目发布)
* [问题](frontend-deploy.md#问题)
* [项目目录结构](frontend-development.md#项目目录结构)
* [系统功能模块](frontend-development.md#系统功能模块)
* [路由和状态管理](frontend-development.md#路由和状态管理)
* [规范](frontend-development.md#规范)
* [接口](frontend-development.md#接口)
* [扩展开发](frontend-development.md#扩展开发)
* 后端文档
* [系统架构设计](architecture-design.md#调度系统架构设计)
* [部署文档](backend-deploy.md#部署文档)
* [自定义任务插件文档](task-plugin-development.md#任务插件开发)
* [使用说明文档](user-manual.md#使用手册)

BIN
docs/zh_CN/_book/Easyscheduler.pdf

Binary file not shown.

749
docs/zh_CN/_book/architecture-design.html

@ -0,0 +1,749 @@
<!DOCTYPE HTML>
<html lang="zh-hans" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>系统架构设计 · 调度系统-EasyScheduler</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.3">
<meta name="author" content="YIGUAN">
<link rel="stylesheet" href="gitbook/style.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-insert-logo-link/plugin.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
<link rel="stylesheet" href="styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
<link rel="next" href="backend-deploy.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="输入并搜索" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="./">
<a href="./">
Easyscheduler简介
</a>
</li>
<li class="chapter " data-level="1.2" >
<span>
前端文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#前端项目环境构建及编译">
环境搭建
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#安装及配置">
安装及配置
</a>
</li>
<li class="chapter " data-level="1.2.3" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#项目生产环境配置">
项目生产环境Nginx配置
</a>
</li>
<li class="chapter " data-level="1.2.4" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#前端项目发布">
前端项目发布
</a>
</li>
<li class="chapter " data-level="1.2.5" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#问题">
问题
</a>
</li>
<li class="chapter " data-level="1.2.6" data-path="frontend-development.html">
<a href="frontend-development.html#项目目录结构">
项目目录结构
</a>
</li>
<li class="chapter " data-level="1.2.7" data-path="frontend-development.html">
<a href="frontend-development.html#系统功能模块">
系统功能模块
</a>
</li>
<li class="chapter " data-level="1.2.8" data-path="frontend-development.html">
<a href="frontend-development.html#路由和状态管理">
路由和状态管理
</a>
</li>
<li class="chapter " data-level="1.2.9" data-path="frontend-development.html">
<a href="frontend-development.html#规范">
规范
</a>
</li>
<li class="chapter " data-level="1.2.10" data-path="frontend-development.html">
<a href="frontend-development.html#接口">
接口
</a>
</li>
<li class="chapter " data-level="1.2.11" data-path="frontend-development.html">
<a href="frontend-development.html#扩展开发">
扩展开发
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" >
<span>
后端文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="architecture-design.html">
<a href="architecture-design.html#调度系统架构设计">
系统架构设计
</a>
</li>
<li class="chapter " data-level="1.3.2" data-path="backend-deploy.html">
<a href="backend-deploy.html#部署文档">
部署文档
</a>
</li>
<li class="chapter " data-level="1.3.3" data-path="task-plugin-development.html">
<a href="task-plugin-development.html#任务插件开发">
自定义任务插件文档
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="user-manual.md">
<span>
使用说明文档
</a>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本书使用 GitBook 发布
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href="." >系统架构设计</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h2 id="&#x8C03;&#x5EA6;&#x7CFB;&#x7EDF;&#x67B6;&#x6784;&#x8BBE;&#x8BA1;">&#x8C03;&#x5EA6;&#x7CFB;&#x7EDF;&#x67B6;&#x6784;&#x8BBE;&#x8BA1;</h2>
<p>&#x5728;&#x5BF9;&#x7CFB;&#x7EDF;&#x67B6;&#x6784;&#x8BF4;&#x660E;&#x4E4B;&#x524D;&#xFF0C;&#x6211;&#x4EEC;&#x5148;&#x6765;&#x8BA4;&#x8BC6;&#x4E00;&#x4E0B;&#x8C03;&#x5EA6;&#x7CFB;&#x7EDF;&#x5E38;&#x7528;&#x7684;&#x540D;&#x8BCD;</p>
<h3 id="1&#x540D;&#x8BCD;&#x89E3;&#x91CA;">1.&#x540D;&#x8BCD;&#x89E3;&#x91CA;</h3>
<p><strong>DAG&#xFF1A;</strong> &#x5168;&#x79F0;Directed Acyclic Graph&#xFF0C;&#x7B80;&#x79F0;DAG&#x3002;&#x5DE5;&#x4F5C;&#x6D41;&#x4E2D;&#x7684;Task&#x4EFB;&#x52A1;&#x4EE5;&#x6709;&#x5411;&#x65E0;&#x73AF;&#x56FE;&#x7684;&#x5F62;&#x5F0F;&#x7EC4;&#x88C5;&#x8D77;&#x6765;&#xFF0C;&#x4ECE;&#x5165;&#x5EA6;&#x4E3A;&#x96F6;&#x7684;&#x8282;&#x70B9;&#x8FDB;&#x884C;&#x62D3;&#x6251;&#x904D;&#x5386;&#xFF0C;&#x76F4;&#x5230;&#x65E0;&#x540E;&#x7EE7;&#x8282;&#x70B9;&#x4E3A;&#x6B62;&#x3002;&#x4E3E;&#x4F8B;&#x5982;&#x4E0B;&#x56FE;&#xFF1A;</p>
<p align="center">
<img src="https://analysys.github.io/EasyScheduler/zh_CN/images/dag_examples_cn.jpg" alt="dag&#x793A;&#x4F8B;" width="60%">
</p><p align="center">
<em>dag&#x793A;&#x4F8B;</em>
</p>
<p></p>
**&#x6D41;&#x7A0B;&#x5B9A;&#x4E49;**&#xFF1A;&#x901A;&#x8FC7;&#x62D6;&#x62FD;&#x4EFB;&#x52A1;&#x8282;&#x70B9;&#x5E76;&#x5EFA;&#x7ACB;&#x4EFB;&#x52A1;&#x8282;&#x70B9;&#x7684;&#x5173;&#x8054;&#x6240;&#x5F62;&#x6210;&#x7684;&#x53EF;&#x89C6;&#x5316;**DAG**
**&#x6D41;&#x7A0B;&#x5B9E;&#x4F8B;**&#xFF1A;&#x6D41;&#x7A0B;&#x5B9E;&#x4F8B;&#x662F;&#x6D41;&#x7A0B;&#x5B9A;&#x4E49;&#x7684;&#x5B9E;&#x4F8B;&#x5316;&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x624B;&#x52A8;&#x542F;&#x52A8;&#x6216;&#x5B9A;&#x65F6;&#x8C03;&#x5EA6;&#x751F;&#x6210;
**&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;**&#xFF1A;&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;&#x662F;&#x6D41;&#x7A0B;&#x5B9A;&#x4E49;&#x4E2D;&#x4EFB;&#x52A1;&#x8282;&#x70B9;&#x7684;&#x5B9E;&#x4F8B;&#x5316;&#xFF0C;&#x6807;&#x8BC6;&#x7740;&#x5177;&#x4F53;&#x7684;&#x4EFB;&#x52A1;&#x6267;&#x884C;&#x72B6;&#x6001;
**&#x4EFB;&#x52A1;&#x7C7B;&#x578B;**&#xFF1A; &#x76EE;&#x524D;&#x652F;&#x6301;&#x6709;SHELL&#x3001;SQL&#x3001;SUB_PROCESS&#x3001;PROCEDURE&#x3001;MR&#x3001;SPARK&#x3001;PYTHON&#x3001;DEPENDENT&#xFF0C;&#x540C;&#x65F6;&#x8BA1;&#x5212;&#x652F;&#x6301;&#x52A8;&#x6001;&#x63D2;&#x4EF6;&#x6269;&#x5C55;&#xFF0C;&#x6CE8;&#x610F;&#xFF1A;&#x5176;&#x4E2D;&#x5B50; **SUB_PROCESS** &#x4E5F;&#x662F;&#x4E00;&#x4E2A;&#x5355;&#x72EC;&#x7684;&#x6D41;&#x7A0B;&#x5B9A;&#x4E49;&#xFF0C;&#x662F;&#x53EF;&#x4EE5;&#x5355;&#x72EC;&#x542F;&#x52A8;&#x6267;&#x884C;&#x7684;
**&#x8C03;&#x5EA6;&#x65B9;&#x5F0F;&#xFF1A;** &#x7CFB;&#x7EDF;&#x652F;&#x6301;&#x57FA;&#x4E8E;cron&#x8868;&#x8FBE;&#x5F0F;&#x7684;&#x5B9A;&#x65F6;&#x8C03;&#x5EA6;&#x548C;&#x624B;&#x52A8;&#x8C03;&#x5EA6;&#x3002;&#x547D;&#x4EE4;&#x7C7B;&#x578B;&#x652F;&#x6301;&#xFF1A;&#x542F;&#x52A8;&#x5DE5;&#x4F5C;&#x6D41;&#x3001;&#x4ECE;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x5F00;&#x59CB;&#x6267;&#x884C;&#x3001;&#x6062;&#x590D;&#x88AB;&#x5BB9;&#x9519;&#x7684;&#x5DE5;&#x4F5C;&#x6D41;&#x3001;&#x6062;&#x590D;&#x6682;&#x505C;&#x6D41;&#x7A0B;&#x3001;&#x4ECE;&#x5931;&#x8D25;&#x8282;&#x70B9;&#x5F00;&#x59CB;&#x6267;&#x884C;&#x3001;&#x8865;&#x6570;&#x3001;&#x8C03;&#x5EA6;&#x3001;&#x91CD;&#x8DD1;&#x3001;&#x6682;&#x505C;&#x3001;&#x505C;&#x6B62;&#x3001;&#x6062;&#x590D;&#x7B49;&#x5F85;&#x7EBF;&#x7A0B;&#x3002;&#x5176;&#x4E2D; **&#x6062;&#x590D;&#x88AB;&#x5BB9;&#x9519;&#x7684;&#x5DE5;&#x4F5C;&#x6D41;** &#x548C; **&#x6062;&#x590D;&#x7B49;&#x5F85;&#x7EBF;&#x7A0B; **&#x4E24;&#x79CD;&#x547D;&#x4EE4;&#x7C7B;&#x578B;&#x662F;&#x7531;&#x8C03;&#x5EA6;&#x5185;&#x90E8;&#x63A7;&#x5236;&#x4F7F;&#x7528;&#xFF0C;&#x5916;&#x90E8;&#x65E0;&#x6CD5;&#x8C03;&#x7528;
**&#x5B9A;&#x65F6;&#x8C03;&#x5EA6;**&#xFF1A;&#x7CFB;&#x7EDF;&#x91C7;&#x7528; **quartz** &#x5206;&#x5E03;&#x5F0F;&#x8C03;&#x5EA6;&#x5668;&#xFF0C;&#x5E76;&#x540C;&#x65F6;&#x652F;&#x6301;cron&#x8868;&#x8FBE;&#x5F0F;&#x53EF;&#x89C6;&#x5316;&#x7684;&#x751F;&#x6210;
**&#x4F9D;&#x8D56;**&#xFF1A;&#x7CFB;&#x7EDF;&#x4E0D;&#x5355;&#x5355;&#x652F;&#x6301; **DAG** &#x7B80;&#x5355;&#x7684;&#x524D;&#x9A71;&#x548C;&#x540E;&#x7EE7;&#x8282;&#x70B9;&#x4E4B;&#x95F4;&#x7684;&#x4F9D;&#x8D56;&#xFF0C;&#x540C;&#x65F6;&#x8FD8;&#x63D0;&#x4F9B;**&#x4EFB;&#x52A1;&#x4F9D;&#x8D56;**&#x8282;&#x70B9;&#xFF0C;&#x652F;&#x6301;**&#x6D41;&#x7A0B;&#x95F4;&#x7684;&#x81EA;&#x5B9A;&#x4E49;&#x4EFB;&#x52A1;&#x4F9D;&#x8D56;**
**&#x4F18;&#x5148;&#x7EA7;** &#xFF1A;&#x652F;&#x6301;&#x6D41;&#x7A0B;&#x5B9E;&#x4F8B;&#x548C;&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;&#x7684;&#x4F18;&#x5148;&#x7EA7;&#xFF0C;&#x5982;&#x679C;&#x6D41;&#x7A0B;&#x5B9E;&#x4F8B;&#x548C;&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;&#x7684;&#x4F18;&#x5148;&#x7EA7;&#x4E0D;&#x8BBE;&#x7F6E;&#xFF0C;&#x5219;&#x9ED8;&#x8BA4;&#x662F;&#x5148;&#x8FDB;&#x5148;&#x51FA;
**&#x90AE;&#x4EF6;&#x544A;&#x8B66;**&#xFF1A;&#x652F;&#x6301; **SQL&#x4EFB;&#x52A1;** &#x67E5;&#x8BE2;&#x7ED3;&#x679C;&#x90AE;&#x4EF6;&#x53D1;&#x9001;&#xFF0C;&#x6D41;&#x7A0B;&#x5B9E;&#x4F8B;&#x8FD0;&#x884C;&#x7ED3;&#x679C;&#x90AE;&#x4EF6;&#x544A;&#x8B66;&#x53CA;&#x5BB9;&#x9519;&#x544A;&#x8B66;&#x901A;&#x77E5;
**&#x5931;&#x8D25;&#x7B56;&#x7565;**&#xFF1A;&#x5BF9;&#x4E8E;&#x5E76;&#x884C;&#x8FD0;&#x884C;&#x7684;&#x4EFB;&#x52A1;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x4EFB;&#x52A1;&#x5931;&#x8D25;&#xFF0C;&#x63D0;&#x4F9B;&#x4E24;&#x79CD;&#x5931;&#x8D25;&#x7B56;&#x7565;&#x5904;&#x7406;&#x65B9;&#x5F0F;&#xFF0C;**&#x7EE7;&#x7EED;**&#x662F;&#x6307;&#x4E0D;&#x7BA1;&#x5E76;&#x884C;&#x8FD0;&#x884C;&#x4EFB;&#x52A1;&#x7684;&#x72B6;&#x6001;&#xFF0C;&#x76F4;&#x5230;&#x6D41;&#x7A0B;&#x5931;&#x8D25;&#x7ED3;&#x675F;&#x3002;**&#x7ED3;&#x675F;**&#x662F;&#x6307;&#x4E00;&#x65E6;&#x53D1;&#x73B0;&#x5931;&#x8D25;&#x4EFB;&#x52A1;&#xFF0C;&#x5219;&#x540C;&#x65F6;Kill&#x6389;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x5E76;&#x884C;&#x4EFB;&#x52A1;&#xFF0C;&#x6D41;&#x7A0B;&#x5931;&#x8D25;&#x7ED3;&#x675F;
**&#x8865;&#x6570;**&#xFF1A;&#x8865;&#x5386;&#x53F2;&#x6570;&#x636E;&#xFF0C;&#x652F;&#x6301;**&#x533A;&#x95F4;&#x5E76;&#x884C;&#x548C;&#x4E32;&#x884C;**&#x4E24;&#x79CD;&#x8865;&#x6570;&#x65B9;&#x5F0F;
### 2.&#x7CFB;&#x7EDF;&#x67B6;&#x6784;
#### 2.1 &#x7CFB;&#x7EDF;&#x67B6;&#x6784;&#x56FE;
<p align="center">
<img src="https://analysys.github.io/EasyScheduler/zh_CN/images/architecture.jpg" alt="&#x7CFB;&#x7EDF;&#x67B6;&#x6784;&#x56FE;" width="70%">
</p><p align="center">
<em>&#x7CFB;&#x7EDF;&#x67B6;&#x6784;&#x56FE;</em>
</p>
<p></p>
<h4 id="22-&#x67B6;&#x6784;&#x8BF4;&#x660E;">2.2 &#x67B6;&#x6784;&#x8BF4;&#x660E;</h4>
<ul>
<li><p><strong>MasterServer</strong> </p>
<p> MasterServer&#x91C7;&#x7528;&#x5206;&#x5E03;&#x5F0F;&#x65E0;&#x4E2D;&#x5FC3;&#x8BBE;&#x8BA1;&#x7406;&#x5FF5;&#xFF0C;MasterServer&#x4E3B;&#x8981;&#x8D1F;&#x8D23; DAG &#x4EFB;&#x52A1;&#x5207;&#x5206;&#x3001;&#x4EFB;&#x52A1;&#x63D0;&#x4EA4;&#x76D1;&#x63A7;&#xFF0C;&#x5E76;&#x540C;&#x65F6;&#x76D1;&#x542C;&#x5176;&#x5B83;MasterServer&#x548C;WorkerServer&#x7684;&#x5065;&#x5EB7;&#x72B6;&#x6001;&#x3002;
MasterServer&#x670D;&#x52A1;&#x542F;&#x52A8;&#x65F6;&#x5411;Zookeeper&#x6CE8;&#x518C;&#x4E34;&#x65F6;&#x8282;&#x70B9;&#xFF0C;&#x901A;&#x8FC7;&#x76D1;&#x542C;Zookeeper&#x4E34;&#x65F6;&#x8282;&#x70B9;&#x53D8;&#x5316;&#x6765;&#x8FDB;&#x884C;&#x5BB9;&#x9519;&#x5904;&#x7406;&#x3002;</p>
<h5 id="&#x8BE5;&#x670D;&#x52A1;&#x5185;&#x4E3B;&#x8981;&#x5305;&#x542B;">&#x8BE5;&#x670D;&#x52A1;&#x5185;&#x4E3B;&#x8981;&#x5305;&#x542B;:</h5>
<ul>
<li><p><strong>Distributed Quartz</strong>&#x5206;&#x5E03;&#x5F0F;&#x8C03;&#x5EA6;&#x7EC4;&#x4EF6;&#xFF0C;&#x4E3B;&#x8981;&#x8D1F;&#x8D23;&#x5B9A;&#x65F6;&#x4EFB;&#x52A1;&#x7684;&#x542F;&#x505C;&#x64CD;&#x4F5C;&#xFF0C;&#x5F53;quartz&#x8C03;&#x8D77;&#x4EFB;&#x52A1;&#x540E;&#xFF0C;Master&#x5185;&#x90E8;&#x4F1A;&#x6709;&#x7EBF;&#x7A0B;&#x6C60;&#x5177;&#x4F53;&#x8D1F;&#x8D23;&#x5904;&#x7406;&#x4EFB;&#x52A1;&#x7684;&#x540E;&#x7EED;&#x64CD;&#x4F5C;</p>
</li>
<li><p><strong>MasterSchedulerThread</strong>&#x662F;&#x4E00;&#x4E2A;&#x626B;&#x63CF;&#x7EBF;&#x7A0B;&#xFF0C;&#x5B9A;&#x65F6;&#x626B;&#x63CF;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#x7684; <strong>command</strong> &#x8868;&#xFF0C;&#x6839;&#x636E;&#x4E0D;&#x540C;&#x7684;<strong>&#x547D;&#x4EE4;&#x7C7B;&#x578B;</strong>&#x8FDB;&#x884C;&#x4E0D;&#x540C;&#x7684;&#x4E1A;&#x52A1;&#x64CD;&#x4F5C;</p>
</li>
<li><p><strong>MasterExecThread</strong>&#x4E3B;&#x8981;&#x662F;&#x8D1F;&#x8D23;DAG&#x4EFB;&#x52A1;&#x5207;&#x5206;&#x3001;&#x4EFB;&#x52A1;&#x63D0;&#x4EA4;&#x76D1;&#x63A7;&#x3001;&#x5404;&#x79CD;&#x4E0D;&#x540C;&#x547D;&#x4EE4;&#x7C7B;&#x578B;&#x7684;&#x903B;&#x8F91;&#x5904;&#x7406;</p>
</li>
<li><p><strong>MasterTaskExecThread</strong>&#x4E3B;&#x8981;&#x8D1F;&#x8D23;&#x4EFB;&#x52A1;&#x7684;&#x6301;&#x4E45;&#x5316;</p>
</li>
</ul>
</li>
<li><p><strong>WorkerServer</strong> </p>
<p> WorkerServer&#x4E5F;&#x91C7;&#x7528;&#x5206;&#x5E03;&#x5F0F;&#x65E0;&#x4E2D;&#x5FC3;&#x8BBE;&#x8BA1;&#x7406;&#x5FF5;&#xFF0C;WorkerServer&#x4E3B;&#x8981;&#x8D1F;&#x8D23;&#x4EFB;&#x52A1;&#x7684;&#x6267;&#x884C;&#x548C;&#x63D0;&#x4F9B;&#x65E5;&#x5FD7;&#x670D;&#x52A1;&#x3002;WorkerServer&#x670D;&#x52A1;&#x542F;&#x52A8;&#x65F6;&#x5411;Zookeeper&#x6CE8;&#x518C;&#x4E34;&#x65F6;&#x8282;&#x70B9;&#xFF0C;&#x5E76;&#x7EF4;&#x6301;&#x5FC3;&#x8DF3;&#x3002;</p>
<h5 id="&#x8BE5;&#x670D;&#x52A1;&#x5305;&#x542B;&#xFF1A;">&#x8BE5;&#x670D;&#x52A1;&#x5305;&#x542B;&#xFF1A;</h5>
<ul>
<li><p><strong>FetchTaskThread</strong>&#x4E3B;&#x8981;&#x8D1F;&#x8D23;&#x4E0D;&#x65AD;&#x4ECE;<strong>Task Queue</strong>&#x4E2D;&#x9886;&#x53D6;&#x4EFB;&#x52A1;&#xFF0C;&#x5E76;&#x6839;&#x636E;&#x4E0D;&#x540C;&#x4EFB;&#x52A1;&#x7C7B;&#x578B;&#x8C03;&#x7528;<strong>TaskScheduleThread</strong>&#x5BF9;&#x5E94;&#x6267;&#x884C;&#x5668;&#x3002;</p>
</li>
<li><p><strong>LoggerServer</strong>&#x662F;&#x4E00;&#x4E2A;RPC&#x670D;&#x52A1;&#xFF0C;&#x63D0;&#x4F9B;&#x65E5;&#x5FD7;&#x5206;&#x7247;&#x67E5;&#x770B;&#x3001;&#x5237;&#x65B0;&#x548C;&#x4E0B;&#x8F7D;&#x7B49;&#x529F;&#x80FD;</p>
</li>
</ul>
</li>
<li><p><strong>ZooKeeper</strong> </p>
<p> ZooKeeper&#x670D;&#x52A1;&#xFF0C;&#x7CFB;&#x7EDF;&#x4E2D;&#x7684;MasterServer&#x548C;WorkerServer&#x8282;&#x70B9;&#x90FD;&#x901A;&#x8FC7;ZooKeeper&#x6765;&#x8FDB;&#x884C;&#x96C6;&#x7FA4;&#x7BA1;&#x7406;&#x548C;&#x5BB9;&#x9519;&#x3002;&#x53E6;&#x5916;&#x7CFB;&#x7EDF;&#x8FD8;&#x57FA;&#x4E8E;ZooKeeper&#x8FDB;&#x884C;&#x4E8B;&#x4EF6;&#x76D1;&#x542C;&#x548C;&#x5206;&#x5E03;&#x5F0F;&#x9501;&#x3002;
&#x6211;&#x4EEC;&#x4E5F;&#x66FE;&#x7ECF;&#x57FA;&#x4E8E;Redis&#x5B9E;&#x73B0;&#x8FC7;&#x961F;&#x5217;&#xFF0C;&#x4E0D;&#x8FC7;&#x6211;&#x4EEC;&#x5E0C;&#x671B;EasyScheduler&#x4F9D;&#x8D56;&#x5230;&#x7684;&#x7EC4;&#x4EF6;&#x5C3D;&#x91CF;&#x5730;&#x5C11;&#xFF0C;&#x6240;&#x4EE5;&#x6700;&#x540E;&#x8FD8;&#x662F;&#x53BB;&#x6389;&#x4E86;Redis&#x5B9E;&#x73B0;&#x3002;</p>
</li>
<li><p><strong>Task Queue</strong> </p>
<p> &#x63D0;&#x4F9B;&#x4EFB;&#x52A1;&#x961F;&#x5217;&#x7684;&#x64CD;&#x4F5C;&#xFF0C;&#x76EE;&#x524D;&#x961F;&#x5217;&#x4E5F;&#x662F;&#x57FA;&#x4E8E;Zookeeper&#x6765;&#x5B9E;&#x73B0;&#x3002;&#x7531;&#x4E8E;&#x961F;&#x5217;&#x4E2D;&#x5B58;&#x7684;&#x4FE1;&#x606F;&#x8F83;&#x5C11;&#xFF0C;&#x4E0D;&#x5FC5;&#x62C5;&#x5FC3;&#x961F;&#x5217;&#x91CC;&#x6570;&#x636E;&#x8FC7;&#x591A;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x6211;&#x4EEC;&#x538B;&#x6D4B;&#x8FC7;&#x767E;&#x4E07;&#x7EA7;&#x6570;&#x636E;&#x5B58;&#x961F;&#x5217;&#xFF0C;&#x5BF9;&#x7CFB;&#x7EDF;&#x7A33;&#x5B9A;&#x6027;&#x548C;&#x6027;&#x80FD;&#x6CA1;&#x5F71;&#x54CD;&#x3002;</p>
</li>
<li><p><strong>Alert</strong> </p>
<p> &#x63D0;&#x4F9B;&#x544A;&#x8B66;&#x76F8;&#x5173;&#x63A5;&#x53E3;&#xFF0C;&#x63A5;&#x53E3;&#x4E3B;&#x8981;&#x5305;&#x62EC;<strong>&#x544A;&#x8B66;</strong>&#x4E24;&#x79CD;&#x7C7B;&#x578B;&#x7684;&#x544A;&#x8B66;&#x6570;&#x636E;&#x7684;&#x5B58;&#x50A8;&#x3001;&#x67E5;&#x8BE2;&#x548C;&#x901A;&#x77E5;&#x529F;&#x80FD;&#x3002;&#x5176;&#x4E2D;&#x901A;&#x77E5;&#x529F;&#x80FD;&#x53C8;&#x6709;<strong>&#x90AE;&#x4EF6;&#x901A;&#x77E5;</strong>&#x548C;<strong>SNMP(&#x6682;&#x672A;&#x5B9E;&#x73B0;)</strong>&#x4E24;&#x79CD;&#x3002;</p>
</li>
<li><p><strong>API</strong> </p>
<p> API&#x63A5;&#x53E3;&#x5C42;&#xFF0C;&#x4E3B;&#x8981;&#x8D1F;&#x8D23;&#x5904;&#x7406;&#x524D;&#x7AEF;UI&#x5C42;&#x7684;&#x8BF7;&#x6C42;&#x3002;&#x8BE5;&#x670D;&#x52A1;&#x7EDF;&#x4E00;&#x63D0;&#x4F9B;RESTful api&#x5411;&#x5916;&#x90E8;&#x63D0;&#x4F9B;&#x8BF7;&#x6C42;&#x670D;&#x52A1;&#x3002;
&#x63A5;&#x53E3;&#x5305;&#x62EC;&#x5DE5;&#x4F5C;&#x6D41;&#x7684;&#x521B;&#x5EFA;&#x3001;&#x5B9A;&#x4E49;&#x3001;&#x67E5;&#x8BE2;&#x3001;&#x4FEE;&#x6539;&#x3001;&#x53D1;&#x5E03;&#x3001;&#x4E0B;&#x7EBF;&#x3001;&#x624B;&#x5DE5;&#x542F;&#x52A8;&#x3001;&#x505C;&#x6B62;&#x3001;&#x6682;&#x505C;&#x3001;&#x6062;&#x590D;&#x3001;&#x4ECE;&#x8BE5;&#x8282;&#x70B9;&#x5F00;&#x59CB;&#x6267;&#x884C;&#x7B49;&#x7B49;&#x3002;</p>
</li>
<li><p><strong>UI</strong> </p>
<p> &#x7CFB;&#x7EDF;&#x7684;&#x524D;&#x7AEF;&#x9875;&#x9762;&#xFF0C;&#x63D0;&#x4F9B;&#x7CFB;&#x7EDF;&#x7684;&#x5404;&#x79CD;&#x53EF;&#x89C6;&#x5316;&#x64CD;&#x4F5C;&#x754C;&#x9762;&#xFF0C;&#x8BE6;&#x89C1;<strong><a href="">&#x4F7F;&#x7528;&#x624B;&#x518C;</a></strong>&#x90E8;&#x5206;&#x3002;</p>
</li>
</ul>
<h4 id="23-&#x67B6;&#x6784;&#x8BBE;&#x8BA1;&#x601D;&#x60F3;">2.3 &#x67B6;&#x6784;&#x8BBE;&#x8BA1;&#x601D;&#x60F3;</h4>
<h5 id="&#x4E00;&#x3001;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;vs&#x4E2D;&#x5FC3;&#x5316;">&#x4E00;&#x3001;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;vs&#x4E2D;&#x5FC3;&#x5316;</h5>
<h6 id="&#x4E2D;&#x5FC3;&#x5316;&#x601D;&#x60F3;">&#x4E2D;&#x5FC3;&#x5316;&#x601D;&#x60F3;</h6>
<p>&#x4E2D;&#x5FC3;&#x5316;&#x7684;&#x8BBE;&#x8BA1;&#x7406;&#x5FF5;&#x6BD4;&#x8F83;&#x7B80;&#x5355;&#xFF0C;&#x5206;&#x5E03;&#x5F0F;&#x96C6;&#x7FA4;&#x4E2D;&#x7684;&#x8282;&#x70B9;&#x6309;&#x7167;&#x89D2;&#x8272;&#x5206;&#x5DE5;&#xFF0C;&#x5927;&#x4F53;&#x4E0A;&#x5206;&#x4E3A;&#x4E24;&#x79CD;&#x89D2;&#x8272;&#xFF1A;</p>
<p align="center">
<img src="https://analysys.github.io/EasyScheduler/zh_CN/images/master_slave.png" alt="master-slave&#x89D2;&#x8272;" width="50%">
</p>
- Master&#x7684;&#x89D2;&#x8272;&#x4E3B;&#x8981;&#x8D1F;&#x8D23;&#x4EFB;&#x52A1;&#x5206;&#x53D1;&#x5E76;&#x76D1;&#x7763;Slave&#x7684;&#x5065;&#x5EB7;&#x72B6;&#x6001;&#xFF0C;&#x53EF;&#x4EE5;&#x52A8;&#x6001;&#x7684;&#x5C06;&#x4EFB;&#x52A1;&#x5747;&#x8861;&#x5230;Slave&#x4E0A;&#xFF0C;&#x4EE5;&#x81F4;Slave&#x8282;&#x70B9;&#x4E0D;&#x81F3;&#x4E8E;&#x201C;&#x5FD9;&#x6B7B;&#x201D;&#x6216;&#x201D;&#x95F2;&#x6B7B;&#x201D;&#x7684;&#x72B6;&#x6001;&#x3002;
- Worker&#x7684;&#x89D2;&#x8272;&#x4E3B;&#x8981;&#x8D1F;&#x8D23;&#x4EFB;&#x52A1;&#x7684;&#x6267;&#x884C;&#x5DE5;&#x4F5C;&#x5E76;&#x7EF4;&#x62A4;&#x548C;Master&#x7684;&#x5FC3;&#x8DF3;&#xFF0C;&#x4EE5;&#x4FBF;Master&#x53EF;&#x4EE5;&#x5206;&#x914D;&#x4EFB;&#x52A1;&#x7ED9;Slave&#x3002;
&#x4E2D;&#x5FC3;&#x5316;&#x601D;&#x60F3;&#x8BBE;&#x8BA1;&#x5B58;&#x5728;&#x7684;&#x95EE;&#x9898;&#xFF1A;
- &#x4E00;&#x65E6;Master&#x51FA;&#x73B0;&#x4E86;&#x95EE;&#x9898;&#xFF0C;&#x5219;&#x7FA4;&#x9F99;&#x65E0;&#x9996;&#xFF0C;&#x6574;&#x4E2A;&#x96C6;&#x7FA4;&#x5C31;&#x4F1A;&#x5D29;&#x6E83;&#x3002;&#x4E3A;&#x4E86;&#x89E3;&#x51B3;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x5927;&#x591A;&#x6570;Master/Slave&#x67B6;&#x6784;&#x6A21;&#x5F0F;&#x90FD;&#x91C7;&#x7528;&#x4E86;&#x4E3B;&#x5907;Master&#x7684;&#x8BBE;&#x8BA1;&#x65B9;&#x6848;&#xFF0C;&#x53EF;&#x4EE5;&#x662F;&#x70ED;&#x5907;&#x6216;&#x8005;&#x51B7;&#x5907;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x662F;&#x81EA;&#x52A8;&#x5207;&#x6362;&#x6216;&#x624B;&#x52A8;&#x5207;&#x6362;&#xFF0C;&#x800C;&#x4E14;&#x8D8A;&#x6765;&#x8D8A;&#x591A;&#x7684;&#x65B0;&#x7CFB;&#x7EDF;&#x90FD;&#x5F00;&#x59CB;&#x5177;&#x5907;&#x81EA;&#x52A8;&#x9009;&#x4E3E;&#x5207;&#x6362;Master&#x7684;&#x80FD;&#x529B;,&#x4EE5;&#x63D0;&#x5347;&#x7CFB;&#x7EDF;&#x7684;&#x53EF;&#x7528;&#x6027;&#x3002;
- &#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x95EE;&#x9898;&#x662F;&#x5982;&#x679C;Scheduler&#x5728;Master&#x4E0A;&#xFF0C;&#x867D;&#x7136;&#x53EF;&#x4EE5;&#x652F;&#x6301;&#x4E00;&#x4E2A;DAG&#x4E2D;&#x4E0D;&#x540C;&#x7684;&#x4EFB;&#x52A1;&#x8FD0;&#x884C;&#x5728;&#x4E0D;&#x540C;&#x7684;&#x673A;&#x5668;&#x4E0A;&#xFF0C;&#x4F46;&#x662F;&#x4F1A;&#x4EA7;&#x751F;Master&#x7684;&#x8FC7;&#x8D1F;&#x8F7D;&#x3002;&#x5982;&#x679C;Scheduler&#x5728;Slave&#x4E0A;&#xFF0C;&#x5219;&#x4E00;&#x4E2A;DAG&#x4E2D;&#x6240;&#x6709;&#x7684;&#x4EFB;&#x52A1;&#x90FD;&#x53EA;&#x80FD;&#x5728;&#x67D0;&#x4E00;&#x53F0;&#x673A;&#x5668;&#x4E0A;&#x8FDB;&#x884C;&#x4F5C;&#x4E1A;&#x63D0;&#x4EA4;&#xFF0C;&#x5219;&#x5E76;&#x884C;&#x4EFB;&#x52A1;&#x6BD4;&#x8F83;&#x591A;&#x7684;&#x65F6;&#x5019;&#xFF0C;Slave&#x7684;&#x538B;&#x529B;&#x53EF;&#x80FD;&#x4F1A;&#x6BD4;&#x8F83;&#x5927;&#x3002;
###### &#x53BB;&#x4E2D;&#x5FC3;&#x5316;
<p align="center" <img="" src="https://analysys.github.io/EasyScheduler/zh_CN/images/decentralization.png" alt="&#x53BB;&#x4E2D;&#x5FC3;&#x5316;" width="50%">
</p>
- &#x5728;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x8BBE;&#x8BA1;&#x91CC;&#xFF0C;&#x901A;&#x5E38;&#x6CA1;&#x6709;Master/Slave&#x7684;&#x6982;&#x5FF5;&#xFF0C;&#x6240;&#x6709;&#x7684;&#x89D2;&#x8272;&#x90FD;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;&#x5730;&#x4F4D;&#x662F;&#x5E73;&#x7B49;&#x7684;&#xFF0C;&#x5168;&#x7403;&#x4E92;&#x8054;&#x7F51;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x5178;&#x578B;&#x7684;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x7684;&#x5206;&#x5E03;&#x5F0F;&#x7CFB;&#x7EDF;&#xFF0C;&#x8054;&#x7F51;&#x7684;&#x4EFB;&#x610F;&#x8282;&#x70B9;&#x8BBE;&#x5907;down&#x673A;&#xFF0C;&#x90FD;&#x53EA;&#x4F1A;&#x5F71;&#x54CD;&#x5F88;&#x5C0F;&#x8303;&#x56F4;&#x7684;&#x529F;&#x80FD;&#x3002;
- &#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x8BBE;&#x8BA1;&#x7684;&#x6838;&#x5FC3;&#x8BBE;&#x8BA1;&#x5728;&#x4E8E;&#x6574;&#x4E2A;&#x5206;&#x5E03;&#x5F0F;&#x7CFB;&#x7EDF;&#x4E2D;&#x4E0D;&#x5B58;&#x5728;&#x4E00;&#x4E2A;&#x533A;&#x522B;&#x4E8E;&#x5176;&#x4ED6;&#x8282;&#x70B9;&#x7684;&#x201D;&#x7BA1;&#x7406;&#x8005;&#x201D;&#xFF0C;&#x56E0;&#x6B64;&#x4E0D;&#x5B58;&#x5728;&#x5355;&#x70B9;&#x6545;&#x969C;&#x95EE;&#x9898;&#x3002;&#x4F46;&#x7531;&#x4E8E;&#x4E0D;&#x5B58;&#x5728;&#x201D; &#x7BA1;&#x7406;&#x8005;&#x201D;&#x8282;&#x70B9;&#x6240;&#x4EE5;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x90FD;&#x9700;&#x8981;&#x8DDF;&#x5176;&#x4ED6;&#x8282;&#x70B9;&#x901A;&#x4FE1;&#x624D;&#x5F97;&#x5230;&#x5FC5;&#x987B;&#x8981;&#x7684;&#x673A;&#x5668;&#x4FE1;&#x606F;&#xFF0C;&#x800C;&#x5206;&#x5E03;&#x5F0F;&#x7CFB;&#x7EDF;&#x901A;&#x4FE1;&#x7684;&#x4E0D;&#x53EF;&#x9760;&#x884C;&#xFF0C;&#x5219;&#x5927;&#x5927;&#x589E;&#x52A0;&#x4E86;&#x4E0A;&#x8FF0;&#x529F;&#x80FD;&#x7684;&#x5B9E;&#x73B0;&#x96BE;&#x5EA6;&#x3002;
- &#x5B9E;&#x9645;&#x4E0A;&#xFF0C;&#x771F;&#x6B63;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x7684;&#x5206;&#x5E03;&#x5F0F;&#x7CFB;&#x7EDF;&#x5E76;&#x4E0D;&#x591A;&#x89C1;&#x3002;&#x53CD;&#x800C;&#x52A8;&#x6001;&#x4E2D;&#x5FC3;&#x5316;&#x5206;&#x5E03;&#x5F0F;&#x7CFB;&#x7EDF;&#x6B63;&#x5728;&#x4E0D;&#x65AD;&#x6D8C;&#x51FA;&#x3002;&#x5728;&#x8FD9;&#x79CD;&#x67B6;&#x6784;&#x4E0B;&#xFF0C;&#x96C6;&#x7FA4;&#x4E2D;&#x7684;&#x7BA1;&#x7406;&#x8005;&#x662F;&#x88AB;&#x52A8;&#x6001;&#x9009;&#x62E9;&#x51FA;&#x6765;&#x7684;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x9884;&#x7F6E;&#x7684;&#xFF0C;&#x5E76;&#x4E14;&#x96C6;&#x7FA4;&#x5728;&#x53D1;&#x751F;&#x6545;&#x969C;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x96C6;&#x7FA4;&#x7684;&#x8282;&#x70B9;&#x4F1A;&#x81EA;&#x53D1;&#x7684;&#x4E3E;&#x884C;&quot;&#x4F1A;&#x8BAE;&quot;&#x6765;&#x9009;&#x4E3E;&#x65B0;&#x7684;&quot;&#x7BA1;&#x7406;&#x8005;&quot;&#x53BB;&#x4E3B;&#x6301;&#x5DE5;&#x4F5C;&#x3002;&#x6700;&#x5178;&#x578B;&#x7684;&#x6848;&#x4F8B;&#x5C31;&#x662F;ZooKeeper&#x53CA;Go&#x8BED;&#x8A00;&#x5B9E;&#x73B0;&#x7684;Etcd&#x3002;
- EasyScheduler&#x7684;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x662F;Master/Worker&#x6CE8;&#x518C;&#x5230;Zookeeper&#x4E2D;&#xFF0C;&#x5B9E;&#x73B0;Master&#x96C6;&#x7FA4;&#x548C;Worker&#x96C6;&#x7FA4;&#x65E0;&#x4E2D;&#x5FC3;&#xFF0C;&#x5E76;&#x4F7F;&#x7528;Zookeeper&#x5206;&#x5E03;&#x5F0F;&#x9501;&#x6765;&#x9009;&#x4E3E;&#x5176;&#x4E2D;&#x7684;&#x4E00;&#x53F0;Master&#x6216;Worker&#x4E3A;&#x201C;&#x7BA1;&#x7406;&#x8005;&#x201D;&#x6765;&#x6267;&#x884C;&#x4EFB;&#x52A1;&#x3002;
##### &#x4E8C;&#x3001;&#x5206;&#x5E03;&#x5F0F;&#x9501;&#x5B9E;&#x8DF5;
EasyScheduler&#x4F7F;&#x7528;ZooKeeper&#x5206;&#x5E03;&#x5F0F;&#x9501;&#x6765;&#x5B9E;&#x73B0;&#x540C;&#x4E00;&#x65F6;&#x523B;&#x53EA;&#x6709;&#x4E00;&#x53F0;Master&#x6267;&#x884C;Scheduler&#xFF0C;&#x6216;&#x8005;&#x53EA;&#x6709;&#x4E00;&#x53F0;Worker&#x6267;&#x884C;&#x4EFB;&#x52A1;&#x7684;&#x63D0;&#x4EA4;&#x3002;
1. &#x83B7;&#x53D6;&#x5206;&#x5E03;&#x5F0F;&#x9501;&#x7684;&#x6838;&#x5FC3;&#x6D41;&#x7A0B;&#x7B97;&#x6CD5;&#x5982;&#x4E0B;
<p align="center">
<img src="https://analysys.github.io/EasyScheduler/zh_CN/images/distributed_lock.png" alt="&#x83B7;&#x53D6;&#x5206;&#x5E03;&#x5F0F;&#x9501;&#x6D41;&#x7A0B;" width="50%">
</p>
<ol>
<li>EasyScheduler&#x4E2D;Scheduler&#x7EBF;&#x7A0B;&#x5206;&#x5E03;&#x5F0F;&#x9501;&#x5B9E;&#x73B0;&#x6D41;&#x7A0B;&#x56FE;&#xFF1A;<p align="center">
<img src="https://analysys.github.io/EasyScheduler/zh_CN/images/distributed_lock_procss.png" alt="&#x83B7;&#x53D6;&#x5206;&#x5E03;&#x5F0F;&#x9501;&#x6D41;&#x7A0B;" width="50%">
</p>
</li>
</ol>
<h5 id="&#x4E09;&#x3001;&#x7EBF;&#x7A0B;&#x4E0D;&#x8DB3;&#x5FAA;&#x73AF;&#x7B49;&#x5F85;&#x95EE;&#x9898;">&#x4E09;&#x3001;&#x7EBF;&#x7A0B;&#x4E0D;&#x8DB3;&#x5FAA;&#x73AF;&#x7B49;&#x5F85;&#x95EE;&#x9898;</h5>
<ul>
<li>&#x5982;&#x679C;&#x4E00;&#x4E2A;DAG&#x4E2D;&#x6CA1;&#x6709;&#x5B50;&#x6D41;&#x7A0B;&#xFF0C;&#x5219;&#x5982;&#x679C;Command&#x4E2D;&#x7684;&#x6570;&#x636E;&#x6761;&#x6570;&#x5927;&#x4E8E;&#x7EBF;&#x7A0B;&#x6C60;&#x8BBE;&#x7F6E;&#x7684;&#x9608;&#x503C;&#xFF0C;&#x5219;&#x76F4;&#x63A5;&#x6D41;&#x7A0B;&#x7B49;&#x5F85;&#x6216;&#x5931;&#x8D25;&#x3002;</li>
<li><p>&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x5927;&#x7684;DAG&#x4E2D;&#x5D4C;&#x5957;&#x4E86;&#x5F88;&#x591A;&#x5B50;&#x6D41;&#x7A0B;&#xFF0C;&#x5982;&#x4E0B;&#x56FE;&#x5219;&#x4F1A;&#x4EA7;&#x751F;&#x201C;&#x6B7B;&#x7B49;&#x201D;&#x72B6;&#x6001;&#xFF1A;</p>
<p></p><p align="center">
<img src="https://analysys.github.io/EasyScheduler/zh_CN/images/lack_thread.png" alt="&#x7EBF;&#x7A0B;&#x4E0D;&#x8DB3;&#x5FAA;&#x73AF;&#x7B49;&#x5F85;&#x95EE;&#x9898;" width="50%">
</p>
&#x4E0A;&#x56FE;&#x4E2D;MainFlowThread&#x7B49;&#x5F85;SubFlowThread1&#x7ED3;&#x675F;&#xFF0C;SubFlowThread1&#x7B49;&#x5F85;SubFlowThread2&#x7ED3;&#x675F;&#xFF0C; SubFlowThread2&#x7B49;&#x5F85;SubFlowThread3&#x7ED3;&#x675F;&#xFF0C;&#x800C;SubFlowThread3&#x7B49;&#x5F85;&#x7EBF;&#x7A0B;&#x6C60;&#x6709;&#x65B0;&#x7EBF;&#x7A0B;&#xFF0C;&#x5219;&#x6574;&#x4E2A;DAG&#x6D41;&#x7A0B;&#x4E0D;&#x80FD;&#x7ED3;&#x675F;&#xFF0C;&#x4ECE;&#x800C;&#x5176;&#x4E2D;&#x7684;&#x7EBF;&#x7A0B;&#x4E5F;&#x4E0D;&#x80FD;&#x91CA;&#x653E;&#x3002;&#x8FD9;&#x6837;&#x5C31;&#x5F62;&#x6210;&#x7684;&#x5B50;&#x7236;&#x6D41;&#x7A0B;&#x5FAA;&#x73AF;&#x7B49;&#x5F85;&#x7684;&#x72B6;&#x6001;&#x3002;&#x6B64;&#x65F6;&#x9664;&#x975E;&#x542F;&#x52A8;&#x65B0;&#x7684;Master&#x6765;&#x589E;&#x52A0;&#x7EBF;&#x7A0B;&#x6765;&#x6253;&#x7834;&#x8FD9;&#x6837;&#x7684;&#x201D;&#x50F5;&#x5C40;&#x201D;&#xFF0C;&#x5426;&#x5219;&#x8C03;&#x5EA6;&#x96C6;&#x7FA4;&#x5C06;&#x4E0D;&#x80FD;&#x518D;&#x4F7F;&#x7528;&#x3002;<p></p>
</li>
</ul>
<p>&#x5BF9;&#x4E8E;&#x542F;&#x52A8;&#x65B0;Master&#x6765;&#x6253;&#x7834;&#x50F5;&#x5C40;&#xFF0C;&#x4F3C;&#x4E4E;&#x6709;&#x70B9;&#x5DEE;&#x5F3A;&#x4EBA;&#x610F;&#xFF0C;&#x4E8E;&#x662F;&#x6211;&#x4EEC;&#x63D0;&#x51FA;&#x4E86;&#x4EE5;&#x4E0B;&#x4E09;&#x79CD;&#x65B9;&#x6848;&#x6765;&#x964D;&#x4F4E;&#x8FD9;&#x79CD;&#x98CE;&#x9669;&#xFF1A;</p>
<ol>
<li>&#x8BA1;&#x7B97;&#x6240;&#x6709;Master&#x7684;&#x7EBF;&#x7A0B;&#x603B;&#x548C;&#xFF0C;&#x7136;&#x540E;&#x5BF9;&#x6BCF;&#x4E00;&#x4E2A;DAG&#x9700;&#x8981;&#x8BA1;&#x7B97;&#x5176;&#x9700;&#x8981;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x5728;DAG&#x6D41;&#x7A0B;&#x6267;&#x884C;&#x4E4B;&#x524D;&#x505A;&#x9884;&#x8BA1;&#x7B97;&#x3002;&#x56E0;&#x4E3A;&#x662F;&#x591A;Master&#x7EBF;&#x7A0B;&#x6C60;&#xFF0C;&#x6240;&#x4EE5;&#x603B;&#x7EBF;&#x7A0B;&#x6570;&#x4E0D;&#x592A;&#x53EF;&#x80FD;&#x5B9E;&#x65F6;&#x83B7;&#x53D6;&#x3002; </li>
<li>&#x5BF9;&#x5355;Master&#x7EBF;&#x7A0B;&#x6C60;&#x8FDB;&#x884C;&#x5224;&#x65AD;&#xFF0C;&#x5982;&#x679C;&#x7EBF;&#x7A0B;&#x6C60;&#x5DF2;&#x7ECF;&#x6EE1;&#x4E86;&#xFF0C;&#x5219;&#x8BA9;&#x7EBF;&#x7A0B;&#x76F4;&#x63A5;&#x5931;&#x8D25;&#x3002;</li>
<li>&#x589E;&#x52A0;&#x4E00;&#x79CD;&#x8D44;&#x6E90;&#x4E0D;&#x8DB3;&#x7684;Command&#x7C7B;&#x578B;&#xFF0C;&#x5982;&#x679C;&#x7EBF;&#x7A0B;&#x6C60;&#x4E0D;&#x8DB3;&#xFF0C;&#x5219;&#x5C06;&#x4E3B;&#x6D41;&#x7A0B;&#x6302;&#x8D77;&#x3002;&#x8FD9;&#x6837;&#x7EBF;&#x7A0B;&#x6C60;&#x5C31;&#x6709;&#x4E86;&#x65B0;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x53EF;&#x4EE5;&#x8BA9;&#x8D44;&#x6E90;&#x4E0D;&#x8DB3;&#x6302;&#x8D77;&#x7684;&#x6D41;&#x7A0B;&#x91CD;&#x65B0;&#x5524;&#x9192;&#x6267;&#x884C;&#x3002;</li>
</ol>
<p>&#x6CE8;&#x610F;&#xFF1A;Master Scheduler&#x7EBF;&#x7A0B;&#x5728;&#x83B7;&#x53D6;Command&#x7684;&#x65F6;&#x5019;&#x662F;FIFO&#x7684;&#x65B9;&#x5F0F;&#x6267;&#x884C;&#x7684;&#x3002;</p>
<p>&#x4E8E;&#x662F;&#x6211;&#x4EEC;&#x9009;&#x62E9;&#x4E86;&#x7B2C;&#x4E09;&#x79CD;&#x65B9;&#x5F0F;&#x6765;&#x89E3;&#x51B3;&#x7EBF;&#x7A0B;&#x4E0D;&#x8DB3;&#x7684;&#x95EE;&#x9898;&#x3002;</p>
<h5 id="&#x56DB;&#x3001;&#x5BB9;&#x9519;&#x8BBE;&#x8BA1;">&#x56DB;&#x3001;&#x5BB9;&#x9519;&#x8BBE;&#x8BA1;</h5>
<p>&#x5BB9;&#x9519;&#x5206;&#x4E3A;&#x670D;&#x52A1;&#x5B95;&#x673A;&#x5BB9;&#x9519;&#x548C;&#x4EFB;&#x52A1;&#x91CD;&#x8BD5;&#xFF0C;&#x670D;&#x52A1;&#x5B95;&#x673A;&#x5BB9;&#x9519;&#x53C8;&#x5206;&#x4E3A;Master&#x5BB9;&#x9519;&#x548C;Worker&#x5BB9;&#x9519;&#x4E24;&#x79CD;&#x60C5;&#x51B5;</p>
<h6 id="1-&#x5B95;&#x673A;&#x5BB9;&#x9519;">1. &#x5B95;&#x673A;&#x5BB9;&#x9519;</h6>
<p>&#x670D;&#x52A1;&#x5BB9;&#x9519;&#x8BBE;&#x8BA1;&#x4F9D;&#x8D56;&#x4E8E;ZooKeeper&#x7684;Watcher&#x673A;&#x5236;&#xFF0C;&#x5B9E;&#x73B0;&#x539F;&#x7406;&#x5982;&#x56FE;&#xFF1A;</p>
<p align="center">
<img src="https://analysys.github.io/EasyScheduler/zh_CN/images/fault-tolerant.png" alt="EasyScheduler&#x5BB9;&#x9519;&#x8BBE;&#x8BA1;" width="40%">
</p>
&#x5176;&#x4E2D;Master&#x76D1;&#x63A7;&#x5176;&#x4ED6;Master&#x548C;Worker&#x7684;&#x76EE;&#x5F55;&#xFF0C;&#x5982;&#x679C;&#x76D1;&#x542C;&#x5230;remove&#x4E8B;&#x4EF6;&#xFF0C;&#x5219;&#x4F1A;&#x6839;&#x636E;&#x5177;&#x4F53;&#x7684;&#x4E1A;&#x52A1;&#x903B;&#x8F91;&#x8FDB;&#x884C;&#x6D41;&#x7A0B;&#x5B9E;&#x4F8B;&#x5BB9;&#x9519;&#x6216;&#x8005;&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;&#x5BB9;&#x9519;&#x3002;
- Master&#x5BB9;&#x9519;&#x6D41;&#x7A0B;&#x56FE;&#xFF1A;
<p align="center">
<img src="https://analysys.github.io/EasyScheduler/zh_CN/images/fault-tolerant_master.png" alt="Master&#x5BB9;&#x9519;&#x6D41;&#x7A0B;&#x56FE;" width="40%">
</p>
ZooKeeper Master&#x5BB9;&#x9519;&#x5B8C;&#x6210;&#x4E4B;&#x540E;&#x5219;&#x91CD;&#x65B0;&#x7531;EasyScheduler&#x4E2D;Scheduler&#x7EBF;&#x7A0B;&#x8C03;&#x5EA6;&#xFF0C;&#x904D;&#x5386; DAG &#x627E;&#x5230;&#x201D;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x201D;&#x548C;&#x201C;&#x63D0;&#x4EA4;&#x6210;&#x529F;&#x201D;&#x7684;&#x4EFB;&#x52A1;&#xFF0C;&#x5BF9;&#x201D;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x201D;&#x7684;&#x4EFB;&#x52A1;&#x76D1;&#x63A7;&#x5176;&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;&#x7684;&#x72B6;&#x6001;&#xFF0C;&#x5BF9;&#x201D;&#x63D0;&#x4EA4;&#x6210;&#x529F;&#x201D;&#x7684;&#x4EFB;&#x52A1;&#x9700;&#x8981;&#x5224;&#x65AD;Task Queue&#x4E2D;&#x662F;&#x5426;&#x5DF2;&#x7ECF;&#x5B58;&#x5728;&#xFF0C;&#x5982;&#x679C;&#x5B58;&#x5728;&#x5219;&#x540C;&#x6837;&#x76D1;&#x63A7;&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;&#x7684;&#x72B6;&#x6001;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x5B58;&#x5728;&#x5219;&#x91CD;&#x65B0;&#x63D0;&#x4EA4;&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;&#x3002;
- Worker&#x5BB9;&#x9519;&#x6D41;&#x7A0B;&#x56FE;&#xFF1A;
<p align="center">
<img src="https://analysys.github.io/EasyScheduler/zh_CN/images/fault-tolerant_worker.png" alt="Worker&#x5BB9;&#x9519;&#x6D41;&#x7A0B;&#x56FE;" width="40%">
</p>
Master Scheduler&#x7EBF;&#x7A0B;&#x4E00;&#x65E6;&#x53D1;&#x73B0;&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;&#x4E3A;&#x201D; &#x9700;&#x8981;&#x5BB9;&#x9519;&#x201D;&#x72B6;&#x6001;&#xFF0C;&#x5219;&#x63A5;&#x7BA1;&#x4EFB;&#x52A1;&#x5E76;&#x8FDB;&#x884C;&#x91CD;&#x65B0;&#x63D0;&#x4EA4;&#x3002;
&#x6CE8;&#x610F;&#xFF1A;&#x7531;&#x4E8E;&#x201D; &#x7F51;&#x7EDC;&#x6296;&#x52A8;&#x201D;&#x53EF;&#x80FD;&#x4F1A;&#x4F7F;&#x5F97;&#x8282;&#x70B9;&#x77ED;&#x65F6;&#x95F4;&#x5185;&#x5931;&#x53BB;&#x548C;ZooKeeper&#x7684;&#x5FC3;&#x8DF3;&#xFF0C;&#x4ECE;&#x800C;&#x53D1;&#x751F;&#x8282;&#x70B9;&#x7684;remove&#x4E8B;&#x4EF6;&#x3002;&#x5BF9;&#x4E8E;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#xFF0C;&#x6211;&#x4EEC;&#x4F7F;&#x7528;&#x6700;&#x7B80;&#x5355;&#x7684;&#x65B9;&#x5F0F;&#xFF0C;&#x90A3;&#x5C31;&#x662F;&#x8282;&#x70B9;&#x4E00;&#x65E6;&#x548C;ZooKeeper&#x53D1;&#x751F;&#x8D85;&#x65F6;&#x8FDE;&#x63A5;&#xFF0C;&#x5219;&#x76F4;&#x63A5;&#x5C06;Master&#x6216;Worker&#x670D;&#x52A1;&#x505C;&#x6389;&#x3002;
###### 2.&#x4EFB;&#x52A1;&#x5931;&#x8D25;&#x91CD;&#x8BD5;
&#x8FD9;&#x91CC;&#x9996;&#x5148;&#x8981;&#x533A;&#x5206;&#x4EFB;&#x52A1;&#x5931;&#x8D25;&#x91CD;&#x8BD5;&#x3001;&#x6D41;&#x7A0B;&#x5931;&#x8D25;&#x6062;&#x590D;&#x3001;&#x6D41;&#x7A0B;&#x5931;&#x8D25;&#x91CD;&#x8DD1;&#x7684;&#x6982;&#x5FF5;&#xFF1A;
- &#x4EFB;&#x52A1;&#x5931;&#x8D25;&#x91CD;&#x8BD5;&#x662F;&#x4EFB;&#x52A1;&#x7EA7;&#x522B;&#x7684;&#xFF0C;&#x662F;&#x8C03;&#x5EA6;&#x7CFB;&#x7EDF;&#x81EA;&#x52A8;&#x8FDB;&#x884C;&#x7684;&#xFF0C;&#x6BD4;&#x5982;&#x4E00;&#x4E2A;Shell&#x4EFB;&#x52A1;&#x8BBE;&#x7F6E;&#x91CD;&#x8BD5;&#x6B21;&#x6570;&#x4E3A;3&#x6B21;&#xFF0C;&#x90A3;&#x4E48;&#x5728;Shell&#x4EFB;&#x52A1;&#x8FD0;&#x884C;&#x5931;&#x8D25;&#x540E;&#x4F1A;&#x81EA;&#x5DF1;&#x518D;&#x6700;&#x591A;&#x5C1D;&#x8BD5;&#x8FD0;&#x884C;3&#x6B21;
- &#x6D41;&#x7A0B;&#x5931;&#x8D25;&#x6062;&#x590D;&#x662F;&#x6D41;&#x7A0B;&#x7EA7;&#x522B;&#x7684;&#xFF0C;&#x662F;&#x624B;&#x52A8;&#x8FDB;&#x884C;&#x7684;&#xFF0C;&#x6062;&#x590D;&#x662F;&#x4ECE;&#x53EA;&#x80FD;**&#x4ECE;&#x5931;&#x8D25;&#x7684;&#x8282;&#x70B9;&#x5F00;&#x59CB;&#x6267;&#x884C;**&#x6216;**&#x4ECE;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x5F00;&#x59CB;&#x6267;&#x884C;**
- &#x6D41;&#x7A0B;&#x5931;&#x8D25;&#x91CD;&#x8DD1;&#x4E5F;&#x662F;&#x6D41;&#x7A0B;&#x7EA7;&#x522B;&#x7684;&#xFF0C;&#x662F;&#x624B;&#x52A8;&#x8FDB;&#x884C;&#x7684;&#xFF0C;&#x91CD;&#x8DD1;&#x662F;&#x4ECE;&#x5F00;&#x59CB;&#x8282;&#x70B9;&#x8FDB;&#x884C;
&#x63A5;&#x4E0B;&#x6765;&#x8BF4;&#x6B63;&#x9898;&#xFF0C;&#x6211;&#x4EEC;&#x5C06;&#x5DE5;&#x4F5C;&#x6D41;&#x4E2D;&#x7684;&#x4EFB;&#x52A1;&#x8282;&#x70B9;&#x5206;&#x4E86;&#x4E24;&#x79CD;&#x7C7B;&#x578B;&#x3002;
- &#x4E00;&#x79CD;&#x662F;&#x4E1A;&#x52A1;&#x8282;&#x70B9;&#xFF0C;&#x8FD9;&#x79CD;&#x8282;&#x70B9;&#x90FD;&#x5BF9;&#x5E94;&#x4E00;&#x4E2A;&#x5B9E;&#x9645;&#x7684;&#x811A;&#x672C;&#x6216;&#x8005;&#x5904;&#x7406;&#x8BED;&#x53E5;&#xFF0C;&#x6BD4;&#x5982;Shell&#x8282;&#x70B9;&#xFF0C;MR&#x8282;&#x70B9;&#x3001;Spark&#x8282;&#x70B9;&#x3001;&#x4F9D;&#x8D56;&#x8282;&#x70B9;&#x7B49;&#x3002;
- &#x8FD8;&#x6709;&#x4E00;&#x79CD;&#x662F;&#x903B;&#x8F91;&#x8282;&#x70B9;&#xFF0C;&#x8FD9;&#x79CD;&#x8282;&#x70B9;&#x4E0D;&#x505A;&#x5B9E;&#x9645;&#x7684;&#x811A;&#x672C;&#x6216;&#x8BED;&#x53E5;&#x5904;&#x7406;&#xFF0C;&#x53EA;&#x662F;&#x6574;&#x4E2A;&#x6D41;&#x7A0B;&#x6D41;&#x8F6C;&#x7684;&#x903B;&#x8F91;&#x5904;&#x7406;&#xFF0C;&#x6BD4;&#x5982;&#x5B50;&#x6D41;&#x7A0B;&#x8282;&#x7B49;&#x3002;
&#x6BCF;&#x4E00;&#x4E2A;**&#x4E1A;&#x52A1;&#x8282;&#x70B9;**&#x90FD;&#x53EF;&#x4EE5;&#x914D;&#x7F6E;&#x5931;&#x8D25;&#x91CD;&#x8BD5;&#x7684;&#x6B21;&#x6570;&#xFF0C;&#x5F53;&#x8BE5;&#x4EFB;&#x52A1;&#x8282;&#x70B9;&#x5931;&#x8D25;&#xFF0C;&#x4F1A;&#x81EA;&#x52A8;&#x91CD;&#x8BD5;&#xFF0C;&#x76F4;&#x5230;&#x6210;&#x529F;&#x6216;&#x8005;&#x8D85;&#x8FC7;&#x914D;&#x7F6E;&#x7684;&#x91CD;&#x8BD5;&#x6B21;&#x6570;&#x3002;**&#x903B;&#x8F91;&#x8282;&#x70B9;**&#x4E0D;&#x652F;&#x6301;&#x5931;&#x8D25;&#x91CD;&#x8BD5;&#x3002;&#x4F46;&#x662F;&#x903B;&#x8F91;&#x8282;&#x70B9;&#x91CC;&#x7684;&#x4EFB;&#x52A1;&#x652F;&#x6301;&#x91CD;&#x8BD5;&#x3002;
&#x5982;&#x679C;&#x5DE5;&#x4F5C;&#x6D41;&#x4E2D;&#x6709;&#x4EFB;&#x52A1;&#x5931;&#x8D25;&#x8FBE;&#x5230;&#x6700;&#x5927;&#x91CD;&#x8BD5;&#x6B21;&#x6570;&#xFF0C;&#x5DE5;&#x4F5C;&#x6D41;&#x5C31;&#x4F1A;&#x5931;&#x8D25;&#x505C;&#x6B62;&#xFF0C;&#x5931;&#x8D25;&#x7684;&#x5DE5;&#x4F5C;&#x6D41;&#x53EF;&#x4EE5;&#x624B;&#x52A8;&#x8FDB;&#x884C;&#x91CD;&#x8DD1;&#x64CD;&#x4F5C;&#x6216;&#x8005;&#x6D41;&#x7A0B;&#x6062;&#x590D;&#x64CD;&#x4F5C;
##### &#x4E94;&#x3001;&#x4EFB;&#x52A1;&#x4F18;&#x5148;&#x7EA7;&#x8BBE;&#x8BA1;
&#x5728;&#x65E9;&#x671F;&#x8C03;&#x5EA6;&#x8BBE;&#x8BA1;&#x4E2D;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x4F18;&#x5148;&#x7EA7;&#x8BBE;&#x8BA1;&#xFF0C;&#x91C7;&#x7528;&#x516C;&#x5E73;&#x8C03;&#x5EA6;&#x8BBE;&#x8BA1;&#x7684;&#x8BDD;&#xFF0C;&#x4F1A;&#x9047;&#x5230;&#x5148;&#x884C;&#x63D0;&#x4EA4;&#x7684;&#x4EFB;&#x52A1;&#x53EF;&#x80FD;&#x4F1A;&#x548C;&#x540E;&#x7EE7;&#x63D0;&#x4EA4;&#x7684;&#x4EFB;&#x52A1;&#x540C;&#x65F6;&#x5B8C;&#x6210;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x800C;&#x4E0D;&#x80FD;&#x505A;&#x5230;&#x8BBE;&#x7F6E;&#x6D41;&#x7A0B;&#x6216;&#x8005;&#x4EFB;&#x52A1;&#x7684;&#x4F18;&#x5148;&#x7EA7;&#xFF0C;&#x56E0;&#x6B64;&#x6211;&#x4EEC;&#x5BF9;&#x6B64;&#x8FDB;&#x884C;&#x4E86;&#x91CD;&#x65B0;&#x8BBE;&#x8BA1;&#xFF0C;&#x76EE;&#x524D;&#x6211;&#x4EEC;&#x8BBE;&#x8BA1;&#x5982;&#x4E0B;&#xFF1A;
- &#x6309;&#x7167;**&#x4E0D;&#x540C;&#x6D41;&#x7A0B;&#x5B9E;&#x4F8B;&#x4F18;&#x5148;&#x7EA7;**&#x4F18;&#x5148;&#x4E8E;**&#x540C;&#x4E00;&#x4E2A;&#x6D41;&#x7A0B;&#x5B9E;&#x4F8B;&#x4F18;&#x5148;&#x7EA7;**&#x4F18;&#x5148;&#x4E8E;**&#x540C;&#x4E00;&#x6D41;&#x7A0B;&#x5185;&#x4EFB;&#x52A1;&#x4F18;&#x5148;&#x7EA7;**&#x4F18;&#x5148;&#x4E8E;**&#x540C;&#x4E00;&#x6D41;&#x7A0B;&#x5185;&#x4EFB;&#x52A1;**&#x63D0;&#x4EA4;&#x987A;&#x5E8F;&#x4F9D;&#x6B21;&#x4ECE;&#x9AD8;&#x5230;&#x4F4E;&#x8FDB;&#x884C;&#x4EFB;&#x52A1;&#x5904;&#x7406;&#x3002;
- &#x5177;&#x4F53;&#x5B9E;&#x73B0;&#x662F;&#x6839;&#x636E;&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;&#x7684;json&#x89E3;&#x6790;&#x4F18;&#x5148;&#x7EA7;&#xFF0C;&#x7136;&#x540E;&#x628A;**&#x6D41;&#x7A0B;&#x5B9E;&#x4F8B;&#x4F18;&#x5148;&#x7EA7;_&#x6D41;&#x7A0B;&#x5B9E;&#x4F8B;id_&#x4EFB;&#x52A1;&#x4F18;&#x5148;&#x7EA7;_&#x4EFB;&#x52A1;id**&#x4FE1;&#x606F;&#x4FDD;&#x5B58;&#x5728;ZooKeeper&#x4EFB;&#x52A1;&#x961F;&#x5217;&#x4E2D;&#xFF0C;&#x5F53;&#x4ECE;&#x4EFB;&#x52A1;&#x961F;&#x5217;&#x83B7;&#x53D6;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x901A;&#x8FC7;&#x5B57;&#x7B26;&#x4E32;&#x6BD4;&#x8F83;&#x5373;&#x53EF;&#x5F97;&#x51FA;&#x6700;&#x9700;&#x8981;&#x4F18;&#x5148;&#x6267;&#x884C;&#x7684;&#x4EFB;&#x52A1;
- &#x5176;&#x4E2D;&#x6D41;&#x7A0B;&#x5B9A;&#x4E49;&#x7684;&#x4F18;&#x5148;&#x7EA7;&#x662F;&#x8003;&#x8651;&#x5230;&#x6709;&#x4E9B;&#x6D41;&#x7A0B;&#x9700;&#x8981;&#x5148;&#x4E8E;&#x5176;&#x4ED6;&#x6D41;&#x7A0B;&#x8FDB;&#x884C;&#x5904;&#x7406;&#xFF0C;&#x8FD9;&#x4E2A;&#x53EF;&#x4EE5;&#x5728;&#x6D41;&#x7A0B;&#x542F;&#x52A8;&#x6216;&#x8005;&#x5B9A;&#x65F6;&#x542F;&#x52A8;&#x65F6;&#x914D;&#x7F6E;&#xFF0C;&#x5171;&#x6709;5&#x7EA7;&#xFF0C;&#x4F9D;&#x6B21;&#x4E3A;HIGHEST&#x3001;HIGH&#x3001;MEDIUM&#x3001;LOW&#x3001;LOWEST&#x3002;&#x5982;&#x4E0B;&#x56FE;
<p align="center">
<img src="https://analysys.github.io/EasyScheduler/zh_CN/images/process_priority.png" alt="&#x6D41;&#x7A0B;&#x4F18;&#x5148;&#x7EA7;&#x914D;&#x7F6E;" width="40%">
</p>
<pre><code> - &#x4EFB;&#x52A1;&#x7684;&#x4F18;&#x5148;&#x7EA7;&#x4E5F;&#x5206;&#x4E3A;5&#x7EA7;&#xFF0C;&#x4F9D;&#x6B21;&#x4E3A;HIGHEST&#x3001;HIGH&#x3001;MEDIUM&#x3001;LOW&#x3001;LOWEST&#x3002;&#x5982;&#x4E0B;&#x56FE;
&lt;p align=&quot;center&quot;&gt;
&lt;img src=&quot;https://analysys.github.io/EasyScheduler/zh_CN/images/task_priority.png&quot; alt=&quot;&#x4EFB;&#x52A1;&#x4F18;&#x5148;&#x7EA7;&#x914D;&#x7F6E;&quot; width=&quot;35%&quot; /&gt;
&lt;/p&gt;
</code></pre><h5 id="&#x516D;&#x3001;logback&#x548C;grpc&#x5B9E;&#x73B0;&#x65E5;&#x5FD7;&#x8BBF;&#x95EE;">&#x516D;&#x3001;Logback&#x548C;gRPC&#x5B9E;&#x73B0;&#x65E5;&#x5FD7;&#x8BBF;&#x95EE;</h5>
<ul>
<li><p>&#x7531;&#x4E8E;Web(UI)&#x548C;Worker&#x4E0D;&#x4E00;&#x5B9A;&#x5728;&#x540C;&#x4E00;&#x53F0;&#x673A;&#x5668;&#x4E0A;&#xFF0C;&#x6240;&#x4EE5;&#x67E5;&#x770B;&#x65E5;&#x5FD7;&#x4E0D;&#x80FD;&#x50CF;&#x67E5;&#x8BE2;&#x672C;&#x5730;&#x6587;&#x4EF6;&#x90A3;&#x6837;&#x3002;&#x6709;&#x4E24;&#x79CD;&#x65B9;&#x6848;&#xFF1A;</p>
<ul>
<li>&#x5C06;&#x65E5;&#x5FD7;&#x653E;&#x5230;ES&#x641C;&#x7D22;&#x5F15;&#x64CE;&#x4E0A;</li>
<li>&#x901A;&#x8FC7;gRPC&#x901A;&#x4FE1;&#x83B7;&#x53D6;&#x8FDC;&#x7A0B;&#x65E5;&#x5FD7;&#x4FE1;&#x606F;</li>
</ul>
</li>
<li><p>&#x4ECB;&#x4E8E;&#x8003;&#x8651;&#x5230;&#x5C3D;&#x53EF;&#x80FD;&#x7684;EasyScheduler&#x7684;&#x8F7B;&#x91CF;&#x7EA7;&#x6027;&#xFF0C;&#x6240;&#x4EE5;&#x9009;&#x62E9;&#x4E86;gRPC&#x5B9E;&#x73B0;&#x8FDC;&#x7A0B;&#x8BBF;&#x95EE;&#x65E5;&#x5FD7;&#x4FE1;&#x606F;&#x3002;</p>
<p align="center">
<img src="https://analysys.github.io/EasyScheduler/zh_CN/images/grpc.png" alt="grpc&#x8FDC;&#x7A0B;&#x8BBF;&#x95EE;" width="50%">
</p>
</li>
</ul>
<ul>
<li>&#x6211;&#x4EEC;&#x4F7F;&#x7528;&#x81EA;&#x5B9A;&#x4E49;Logback&#x7684;FileAppender&#x548C;Filter&#x529F;&#x80FD;&#xFF0C;&#x5B9E;&#x73B0;&#x6BCF;&#x4E2A;&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x65E5;&#x5FD7;&#x6587;&#x4EF6;&#x3002;</li>
<li><p>FileAppender&#x4E3B;&#x8981;&#x5B9E;&#x73B0;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="lang-java"><span class="hljs-comment">/**
* task log appender
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TaskLogAppender</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">FileAppender</span>&lt;<span class="hljs-title">ILoggingEvent</span> </span>{
...
<span class="hljs-meta">@Override</span>
<span class="hljs-function"><span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">append</span><span class="hljs-params">(ILoggingEvent event)</span> </span>{
<span class="hljs-keyword">if</span> (currentlyActiveFile == <span class="hljs-keyword">null</span>){
currentlyActiveFile = getFile();
}
String activeFile = currentlyActiveFile;
<span class="hljs-comment">// thread name&#xFF1A; taskThreadName-processDefineId_processInstanceId_taskInstanceId</span>
String threadName = event.getThreadName();
String[] threadNameArr = threadName.split(<span class="hljs-string">&quot;-&quot;</span>);
<span class="hljs-comment">// logId = processDefineId_processInstanceId_taskInstanceId</span>
String logId = threadNameArr[<span class="hljs-number">1</span>];
...
<span class="hljs-keyword">super</span>.subAppend(event);
}
}
</code></pre>
</li>
</ul>
<p>&#x4EE5;/&#x6D41;&#x7A0B;&#x5B9A;&#x4E49;id/&#x6D41;&#x7A0B;&#x5B9E;&#x4F8B;id/&#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;id.log&#x7684;&#x5F62;&#x5F0F;&#x751F;&#x6210;&#x65E5;&#x5FD7;</p>
<ul>
<li><p>&#x8FC7;&#x6EE4;&#x5339;&#x914D;&#x4EE5;TaskLogInfo&#x5F00;&#x59CB;&#x7684;&#x7EBF;&#x7A0B;&#x540D;&#x79F0;&#xFF1A;</p>
</li>
<li><p>TaskLogFilter&#x5B9E;&#x73B0;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="lang-java"><span class="hljs-comment">/**
* task log filter
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TaskLogFilter</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Filter</span>&lt;<span class="hljs-title">ILoggingEvent</span> </span>{
<span class="hljs-meta">@Override</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> FilterReply <span class="hljs-title">decide</span><span class="hljs-params">(ILoggingEvent event)</span> </span>{
<span class="hljs-keyword">if</span> (event.getThreadName().startsWith(<span class="hljs-string">&quot;TaskLogInfo-&quot;</span>)){
<span class="hljs-keyword">return</span> FilterReply.ACCEPT;
}
<span class="hljs-keyword">return</span> FilterReply.DENY;
}
}
</code></pre>
</li>
</ul>
<h3 id="&#x603B;&#x7ED3;">&#x603B;&#x7ED3;</h3>
<p>&#x672C;&#x6587;&#x4ECE;&#x8C03;&#x5EA6;&#x51FA;&#x53D1;&#xFF0C;&#x521D;&#x6B65;&#x4ECB;&#x7ECD;&#x4E86;&#x5927;&#x6570;&#x636E;&#x5206;&#x5E03;&#x5F0F;&#x5DE5;&#x4F5C;&#x6D41;&#x8C03;&#x5EA6;&#x7CFB;&#x7EDF;--EasyScheduler&#x7684;&#x67B6;&#x6784;&#x539F;&#x7406;&#x53CA;&#x5B9E;&#x73B0;&#x601D;&#x8DEF;&#x3002;&#x540E;&#x7EED;&#x4F1A;&#x8865;&#x5145;</p>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
<a href="backend-deploy.html#部署文档" class="navigation navigation-next navigation-unique" aria-label="Next page: 部署文档">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"系统架构设计","level":"1.3.1","depth":2,"next":{"title":"部署文档","level":"1.3.2","depth":2,"anchor":"#部署文档","path":"backend-deploy.md","ref":"backend-deploy.md#部署文档","articles":[]},"previous":{"title":"后端文档","level":"1.3","depth":1,"ref":"","articles":[{"title":"系统架构设计","level":"1.3.1","depth":2,"anchor":"#调度系统架构设计","path":"architecture-design.md","ref":"architecture-design.md#调度系统架构设计","articles":[]},{"title":"部署文档","level":"1.3.2","depth":2,"anchor":"#部署文档","path":"backend-deploy.md","ref":"backend-deploy.md#部署文档","articles":[]},{"title":"自定义任务插件文档","level":"1.3.3","depth":2,"anchor":"#任务插件开发","path":"task-plugin-development.md","ref":"task-plugin-development.md#任务插件开发","articles":[]}]},"dir":"ltr"},"config":{"plugins":["expandable-chapters","insert-logo-link"],"styles":{"website":"./styles/website.css"},"pluginsConfig":{"insert-logo-link":{"src":"../images/logo.png","url":"/"},"expandable-chapters":{},"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"YIGUAN","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"调度系统-EasyScheduler","language":"zh-hans","gitbook":"3.2.3","description":"调度系统"},"file":{"path":"architecture-design.md","mtime":"2019-03-28T10:39:45.015Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-03-28T11:15:13.750Z"},"basePath":".","book":{"language":""}});
});
</script>
</div>
<script src="gitbook/gitbook.js"></script>
<script src="gitbook/theme.js"></script>
<script src="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
<script src="gitbook/gitbook-plugin-insert-logo-link/plugin.js"></script>
<script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
<script src="gitbook/gitbook-plugin-search/search.js"></script>
<script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
<script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
<script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
<script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>

886
docs/zh_CN/_book/backend-deploy.html

@ -0,0 +1,886 @@
<!DOCTYPE HTML>
<html lang="zh-hans" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>部署文档 · 调度系统-EasyScheduler</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.3">
<meta name="author" content="YIGUAN">
<link rel="stylesheet" href="gitbook/style.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-insert-logo-link/plugin.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
<link rel="stylesheet" href="styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
<link rel="next" href="task-plugin-development.html" />
<link rel="prev" href="architecture-design.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="输入并搜索" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="./">
<a href="./">
Easyscheduler简介
</a>
</li>
<li class="chapter " data-level="1.2" >
<span>
前端文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#前端项目环境构建及编译">
环境搭建
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#安装及配置">
安装及配置
</a>
</li>
<li class="chapter " data-level="1.2.3" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#项目生产环境配置">
项目生产环境Nginx配置
</a>
</li>
<li class="chapter " data-level="1.2.4" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#前端项目发布">
前端项目发布
</a>
</li>
<li class="chapter " data-level="1.2.5" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#问题">
问题
</a>
</li>
<li class="chapter " data-level="1.2.6" data-path="frontend-development.html">
<a href="frontend-development.html#项目目录结构">
项目目录结构
</a>
</li>
<li class="chapter " data-level="1.2.7" data-path="frontend-development.html">
<a href="frontend-development.html#系统功能模块">
系统功能模块
</a>
</li>
<li class="chapter " data-level="1.2.8" data-path="frontend-development.html">
<a href="frontend-development.html#路由和状态管理">
路由和状态管理
</a>
</li>
<li class="chapter " data-level="1.2.9" data-path="frontend-development.html">
<a href="frontend-development.html#规范">
规范
</a>
</li>
<li class="chapter " data-level="1.2.10" data-path="frontend-development.html">
<a href="frontend-development.html#接口">
接口
</a>
</li>
<li class="chapter " data-level="1.2.11" data-path="frontend-development.html">
<a href="frontend-development.html#扩展开发">
扩展开发
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" >
<span>
后端文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="architecture-design.html">
<a href="architecture-design.html#调度系统架构设计">
系统架构设计
</a>
</li>
<li class="chapter " data-level="1.3.2" data-path="backend-deploy.html">
<a href="backend-deploy.html#部署文档">
部署文档
</a>
</li>
<li class="chapter " data-level="1.3.3" data-path="task-plugin-development.html">
<a href="task-plugin-development.html#任务插件开发">
自定义任务插件文档
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="user-manual.md">
<span>
使用说明文档
</a>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本书使用 GitBook 发布
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href="." >部署文档</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h1 id="&#x90E8;&#x7F72;&#x6587;&#x6863;">&#x90E8;&#x7F72;&#x6587;&#x6863;</h1>
<h2 id="&#x57FA;&#x7840;&#x8F6F;&#x4EF6;&#x5B89;&#x88C5;">&#x57FA;&#x7840;&#x8F6F;&#x4EF6;&#x5B89;&#x88C5;</h2>
<ul>
<li><a href="https://blog.csdn.net/u011886447/article/details/79796802" target="_blank">mysql</a> (5.5+) : &#x5FC5;&#x88C5;</li>
<li><a href="https://www.jianshu.com/p/de90172ea680" target="_blank">zookeeper</a>(3.4.6) &#xFF1A;&#x5FC5;&#x88C5; </li>
<li><a href="https://blog.csdn.net/Evankaka/article/details/51612437" target="_blank">hadoop</a>(2.7.3) &#xFF1A;&#x9009;&#x88C5;&#xFF0C;&#x8D44;&#x6E90;&#x4E0A;&#x4F20;&#xFF0C;MR&#x4EFB;&#x52A1;&#x63D0;&#x4EA4;&#x9700;&#x8981;&#x5B89;&#x88C5;</li>
<li><a href="https://staroon.pro/2017/12/09/HiveInstall/" target="_blank">hive</a>(1.2.1) : &#x9009;&#x88C5;&#xFF0C;hive&#x4EFB;&#x52A1;&#x63D0;&#x4EA4;&#x9700;&#x8981;&#x5B89;&#x88C5;</li>
<li>spark(1.x,2.x) : &#x9009;&#x88C5;&#xFF0C;spark&#x4EFB;&#x52A1;&#x63D0;&#x4EA4;&#x9700;&#x8981;&#x5B89;&#x88C5;</li>
<li>postgresql(8.2.15+) : &#x9009;&#x88C5;&#xFF0C;postgresql sql&#x4EFB;&#x52A1;&#x548C;postgresql &#x5B58;&#x50A8;&#x8FC7;&#x7A0B;&#x9700;&#x8981;&#x5B89;&#x88C5;</li>
</ul>
<h2 id="&#x9879;&#x76EE;&#x7F16;&#x8BD1;">&#x9879;&#x76EE;&#x7F16;&#x8BD1;</h2>
<ul>
<li>&#x6267;&#x884C;&#x7F16;&#x8BD1;&#x547D;&#x4EE4;&#xFF1A;</li>
</ul>
<pre><code> mvn -U clean package assembly:assembly -Dmaven.test.skip=true
</code></pre><ul>
<li>&#x67E5;&#x770B;&#x76EE;&#x5F55;</li>
</ul>
<p>&#x6B63;&#x5E38;&#x7F16;&#x8BD1;&#x5B8C;&#x540E;&#xFF0C;&#x4F1A;&#x5728;&#x5F53;&#x524D;&#x76EE;&#x5F55;&#x751F;&#x6210; target/escheduler-{version}/</p>
<pre><code> bin
conf
lib
script
sql
install.sh
</code></pre><ul>
<li>&#x8BF4;&#x660E;</li>
</ul>
<pre><code>bin : &#x57FA;&#x7840;&#x670D;&#x52A1;&#x542F;&#x52A8;&#x811A;&#x672C;
conf : &#x9879;&#x76EE;&#x914D;&#x7F6E;&#x6587;&#x4EF6;
lib : &#x9879;&#x76EE;&#x4F9D;&#x8D56;jar&#x5305;&#xFF0C;&#x5305;&#x62EC;&#x5404;&#x4E2A;&#x6A21;&#x5757;jar&#x548C;&#x7B2C;&#x4E09;&#x65B9;jar
script : &#x96C6;&#x7FA4;&#x542F;&#x52A8;&#x3001;&#x505C;&#x6B62;&#x548C;&#x670D;&#x52A1;&#x76D1;&#x63A7;&#x542F;&#x505C;&#x811A;&#x672C;
sql : &#x9879;&#x76EE;&#x4F9D;&#x8D56;sql&#x6587;&#x4EF6;
install.sh : &#x4E00;&#x952E;&#x90E8;&#x7F72;&#x811A;&#x672C;
</code></pre><h2 id="&#x6570;&#x636E;&#x5E93;&#x521D;&#x59CB;&#x5316;">&#x6570;&#x636E;&#x5E93;&#x521D;&#x59CB;&#x5316;</h2>
<ul>
<li>&#x521B;&#x5EFA;db&#x548C;&#x8D26;&#x53F7;</li>
</ul>
<pre><code>mysql -h {host} -u {user} -p{password}
mysql&gt; CREATE DATABASE escheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
mysql&gt; GRANT ALL PRIVILEGES ON escheduler.* TO &apos;{user}&apos;@&apos;%&apos; IDENTIFIED BY &apos;{password}&apos;;
mysql&gt; GRANT ALL PRIVILEGES ON escheduler.* TO &apos;{user}&apos;@&apos;localhost&apos; IDENTIFIED BY &apos;{password}&apos;;
mysql&gt; flush privileges;
</code></pre><ul>
<li>&#x521B;&#x5EFA;&#x8868;</li>
</ul>
<pre><code>&#x8BF4;&#x660E;&#xFF1A;&#x5728; target/escheduler-{version}/sql/escheduler.sql&#x548C;quartz.sql
mysql -h {host} -u {user} -p{password} -D {db} &lt; escheduler.sql
mysql -h {host} -u {user} -p{password} -D {db} &lt; quartz.sql
</code></pre><h2 id="&#x521B;&#x5EFA;&#x90E8;&#x7F72;&#x7528;&#x6237;">&#x521B;&#x5EFA;&#x90E8;&#x7F72;&#x7528;&#x6237;</h2>
<p>&#x56E0;&#x4E3A;escheduler worker &#x90FD;&#x662F;&#x4EE5; sudo -u {linux-user} &#x65B9;&#x5F0F;&#x6765;&#x6267;&#x884C;&#x4F5C;&#x4E1A;&#xFF0C;&#x6240;&#x4EE5;&#x90E8;&#x7F72;&#x7528;&#x6237;&#x9700;&#x8981;&#x6709; sudo &#x6743;&#x9650;&#xFF0C;&#x800C;&#x4E14;&#x662F;&#x514D;&#x5BC6;&#x7684;&#x3002;</p>
<pre><code class="lang-&#x90E8;&#x7F72;&#x8D26;&#x53F7;">vi /etc/sudoers
# &#x90E8;&#x7F72;&#x7528;&#x6237;&#x662F; escheduler &#x8D26;&#x53F7;
escheduler ALL=(ALL) NOPASSWD: NOPASSWD: ALL
# &#x5E76;&#x4E14;&#x9700;&#x8981;&#x6CE8;&#x91CA;&#x6389; Default requiretty &#x4E00;&#x884C;
#Default requiretty
</code></pre>
<h2 id="&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x8BF4;&#x660E;">&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x8BF4;&#x660E;</h2>
<pre><code>&#x8BF4;&#x660E;&#xFF1A;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4F4D;&#x4E8E; target/escheduler-{version}/conf &#x4E0B;&#x9762;
</code></pre><h3 id="escheduler-alert">escheduler-alert</h3>
<p>&#x914D;&#x7F6E;&#x90AE;&#x4EF6;&#x544A;&#x8B66;&#x4FE1;&#x606F;</p>
<ul>
<li>alert.properties </li>
</ul>
<pre><code>#alert type is EMAIL/SMS
alert.type=EMAIL
# mail server configuration
mail.protocol=SMTP
mail.server.host=smtp.exmail.qq.com
mail.server.port=25
mail.sender=xxxxxxx
mail.passwd=xxxxxxx
# xls file path,need create if not exist
xls.file.path=/opt/xls
</code></pre><h3 id="escheduler-common">escheduler-common</h3>
<p>&#x901A;&#x7528;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x914D;&#x7F6E;&#xFF0C;&#x961F;&#x5217;&#x9009;&#x62E9;&#x53CA;&#x5730;&#x5740;&#x914D;&#x7F6E;&#xFF0C;&#x901A;&#x7528;&#x6587;&#x4EF6;&#x76EE;&#x5F55;&#x914D;&#x7F6E;</p>
<ul>
<li>common/common.properties</li>
</ul>
<pre><code>#task queue implementation, default &quot;zookeeper&quot;
escheduler.queue.impl=zookeeper
# user data directory path, self configuration, please make sure the directory exists and have read write permissions
data.basedir.path=/tmp/escheduler
# directory path for user data download. self configuration, please make sure the directory exists and have read write permissions
data.download.basedir.path=/tmp/escheduler/download
# process execute directory. self configuration, please make sure the directory exists and have read write permissions
process.exec.basepath=/tmp/escheduler/exec
# data base dir, resource file will store to this hadoop hdfs path, self configuration, please make sure the directory exists on hdfs and have read write permissions&#x3002;&quot;/escheduler&quot; is recommended
data.store2hdfs.basepath=/escheduler
# whether hdfs starts
hdfs.startup.state=true
# system env path. self configuration, please make sure the directory and file exists and have read write execute permissions
escheduler.env.path=/opt/.escheduler_env.sh
escheduler.env.py=/opt/escheduler_env.py
#resource.view.suffixs
resource.view.suffixs=txt,log,sh,conf,cfg,py,java,sql,hql,xml
# is development state? default &quot;false&quot;
development.state=false
</code></pre><p>SHELL&#x4EFB;&#x52A1; &#x73AF;&#x5883;&#x53D8;&#x91CF;&#x914D;&#x7F6E;</p>
<pre><code>&#x8BF4;&#x660E;&#xFF1A;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4F4D;&#x4E8E; target/escheduler-{version}/conf/env &#x4E0B;&#x9762;
</code></pre><p>.escheduler_env.sh </p>
<pre><code>export HADOOP_HOME=/opt/soft/hadoop
export HADOOP_CONF_DIR=/opt/soft/hadoop/etc/hadoop
export SPARK_HOME1=/opt/soft/spark1
export SPARK_HOME2=/opt/soft/spark2
export PYTHON_HOME=/opt/soft/python
export JAVA_HOME=/opt/soft/java
export HIVE_HOME=/opt/soft/hive
export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH
</code></pre><p>&#x200B; </p>
<p>Python&#x4EFB;&#x52A1; &#x73AF;&#x5883;&#x53D8;&#x91CF;&#x914D;&#x7F6E;</p>
<pre><code>&#x8BF4;&#x660E;&#xFF1A;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4F4D;&#x4E8E; target/escheduler-{version}/conf/env &#x4E0B;&#x9762;
</code></pre><p>escheduler_env.py</p>
<pre><code>import os
HADOOP_HOME=&quot;/opt/soft/hadoop&quot;
SPARK_HOME1=&quot;/opt/soft/spark1&quot;
SPARK_HOME2=&quot;/opt/soft/spark2&quot;
PYTHON_HOME=&quot;/opt/soft/python&quot;
JAVA_HOME=&quot;/opt/soft/java&quot;
HIVE_HOME=&quot;/opt/soft/hive&quot;
PATH=os.environ[&apos;PATH&apos;]
PATH=&quot;%s/bin:%s/bin:%s/bin:%s/bin:%s/bin:%s/bin:%s&quot;%(HIVE_HOME,HADOOP_HOME,SPARK_HOME1,SPARK_HOME2,JAVA_HOME,PYTHON_HOME,PATH)
os.putenv(&apos;PATH&apos;,&apos;%s&apos;%PATH)
</code></pre><p>hadoop &#x914D;&#x7F6E;&#x6587;&#x4EF6;</p>
<ul>
<li>common/hadoop/hadoop.properties</li>
</ul>
<pre><code># ha or single namenode,If namenode ha needs to copy core-site.xml and hdfs-site.xml to the conf directory
fs.defaultFS=hdfs://mycluster:8020
#resourcemanager ha note this need ips , this empty if single
yarn.resourcemanager.ha.rm.ids=192.168.xx.xx,192.168.xx.xx
# If it is a single resourcemanager, you only need to configure one host name. If it is resourcemanager HA, the default configuration is fine
yarn.application.status.address=http://ark1:8088/ws/v1/cluster/apps/%s
</code></pre><p>&#x5B9A;&#x65F6;&#x5668;&#x914D;&#x7F6E;&#x6587;&#x4EF6;</p>
<ul>
<li>quartz.properties</li>
</ul>
<pre><code>#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = EasyScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.makeSchedulerThreadDaemon = true
org.quartz.jobStore.useProperties = false
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.makeThreadsDaemons = true
org.quartz.threadPool.threadCount = 25
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.clusterCheckinInterval = 5000
org.quartz.jobStore.dataSource = myDs
#============================================================================
# Configure Datasources
#============================================================================
org.quartz.dataSource.myDs.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDs.URL = jdbc:mysql://192.168.xx.xx:3306/escheduler?characterEncoding=utf8&amp;useSSL=false
org.quartz.dataSource.myDs.user = xx
org.quartz.dataSource.myDs.password = xx
org.quartz.dataSource.myDs.maxConnections = 10
org.quartz.dataSource.myDs.validationQuery = select 1
</code></pre><p>zookeeper &#x914D;&#x7F6E;&#x6587;&#x4EF6;</p>
<ul>
<li>zookeeper.properties</li>
</ul>
<pre><code>#zookeeper cluster
zookeeper.quorum=192.168.xx.xx:2181,192.168.xx.xx:2181,192.168.xx.xx:2181
#escheduler root directory
zookeeper.escheduler.root=/escheduler
#zookeeper server dirctory
zookeeper.escheduler.dead.servers=/escheduler/dead-servers
zookeeper.escheduler.masters=/escheduler/masters
zookeeper.escheduler.workers=/escheduler/workers
#zookeeper lock dirctory
zookeeper.escheduler.lock.masters=/escheduler/lock/masters
zookeeper.escheduler.lock.workers=/escheduler/lock/workers
#escheduler failover directory
zookeeper.escheduler.lock.masters.failover=/escheduler/lock/failover/masters
zookeeper.escheduler.lock.workers.failover=/escheduler/lock/failover/workers
#escheduler failover directory
zookeeper.session.timeout=300
zookeeper.connection.timeout=300
zookeeper.retry.sleep=1000
zookeeper.retry.maxtime=5
</code></pre><h3 id="escheduler-dao">escheduler-dao</h3>
<p>dao&#x6570;&#x636E;&#x6E90;&#x914D;&#x7F6E;</p>
<ul>
<li>dao/data_source.properties</li>
</ul>
<pre><code># base spring data source configuration
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.xx.xx:3306/escheduler?characterEncoding=UTF-8
spring.datasource.username=xx
spring.datasource.password=xx
# connection configuration
spring.datasource.initialSize=5
# min connection number
spring.datasource.minIdle=5
# max connection number
spring.datasource.maxActive=50
# max wait time for get a connection in milliseconds. if configuring maxWait, fair locks are enabled by default and concurrency efficiency decreases.
# If necessary, unfair locks can be used by configuring the useUnfairLock attribute to true.
spring.datasource.maxWait=60000
# milliseconds for check to close free connections
spring.datasource.timeBetweenEvictionRunsMillis=60000
# the Destroy thread detects the connection interval and closes the physical connection in milliseconds if the connection idle time is greater than or equal to minEvictableIdleTimeMillis.
spring.datasource.timeBetweenConnectErrorMillis=60000
# the longest time a connection remains idle without being evicted, in milliseconds
spring.datasource.minEvictableIdleTimeMillis=300000
#the SQL used to check whether the connection is valid requires a query statement. If validation Query is null, testOnBorrow, testOnReturn, and testWhileIdle will not work.
spring.datasource.validationQuery=SELECT 1
#check whether the connection is valid for timeout, in seconds
spring.datasource.validationQueryTimeout=3
# when applying for a connection, if it is detected that the connection is idle longer than time Between Eviction Runs Millis,
# validation Query is performed to check whether the connection is valid
spring.datasource.testWhileIdle=true
#execute validation to check if the connection is valid when applying for a connection
spring.datasource.testOnBorrow=true
#execute validation to check if the connection is valid when the connection is returned
spring.datasource.testOnReturn=false
spring.datasource.defaultAutoCommit=true
spring.datasource.keepAlive=true
# open PSCache, specify count PSCache for every connection
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
</code></pre><h3 id="escheduler-server">escheduler-server</h3>
<p>master&#x914D;&#x7F6E;&#x6587;&#x4EF6;</p>
<ul>
<li>master.properties</li>
</ul>
<pre><code># master execute thread num
master.exec.threads=100
# master execute task number in parallel
master.exec.task.number=20
# master heartbeat interval
master.heartbeat.interval=10
# master commit task retry times
master.task.commit.retryTimes=5
# master commit task interval
master.task.commit.interval=100
# only less than cpu avg load, master server can work. default value : the number of cpu cores * 2
master.max.cpuload.avg=10
# only larger than reserved memory, master server can work. default value : physical memory * 1/10, unit is G.
master.reserved.memory=1
</code></pre><p>worker&#x914D;&#x7F6E;&#x6587;&#x4EF6;</p>
<ul>
<li>worker.properties</li>
</ul>
<pre><code># worker execute thread num
worker.exec.threads=100
# worker heartbeat interval
worker.heartbeat.interval=10
# submit the number of tasks at a time
worker.fetch.task.num = 10
# only less than cpu avg load, worker server can work. default value : the number of cpu cores * 2
worker.max.cpuload.avg=10
# only larger than reserved memory, worker server can work. default value : physical memory * 1/6, unit is G.
worker.reserved.memory=1
</code></pre><h3 id="escheduler-api">escheduler-api</h3>
<p>web&#x914D;&#x7F6E;&#x6587;&#x4EF6;</p>
<ul>
<li>application.properties</li>
</ul>
<pre><code># server port
server.port=12345
# session config
server.session.timeout=7200
server.context-path=/escheduler/
# file size limit for upload
spring.http.multipart.max-file-size=1024MB
spring.http.multipart.max-request-size=1024MB
# post content
server.max-http-post-size=5000000
</code></pre><h2 id="&#x4F2A;&#x5206;&#x5E03;&#x5F0F;&#x90E8;&#x7F72;">&#x4F2A;&#x5206;&#x5E03;&#x5F0F;&#x90E8;&#x7F72;</h2>
<h3 id="1&#xFF0C;&#x521B;&#x5EFA;&#x90E8;&#x7F72;&#x7528;&#x6237;">1&#xFF0C;&#x521B;&#x5EFA;&#x90E8;&#x7F72;&#x7528;&#x6237;</h3>
<p>&#x200B; &#x5982;&#x4E0A; <strong>&#x521B;&#x5EFA;&#x90E8;&#x7F72;&#x7528;&#x6237;</strong></p>
<h3 id="2&#xFF0C;&#x6839;&#x636E;&#x5B9E;&#x9645;&#x9700;&#x6C42;&#x6765;&#x521B;&#x5EFA;hdfs&#x6839;&#x8DEF;&#x5F84;">2&#xFF0C;&#x6839;&#x636E;&#x5B9E;&#x9645;&#x9700;&#x6C42;&#x6765;&#x521B;&#x5EFA;HDFS&#x6839;&#x8DEF;&#x5F84;</h3>
<p>&#x200B; &#x6839;&#x636E; <strong>common/common.properties</strong> &#x4E2D; <strong>hdfs.startup.state</strong> &#x7684;&#x914D;&#x7F6E;&#x6765;&#x5224;&#x65AD;&#x662F;&#x5426;&#x542F;&#x52A8;HDFS&#xFF0C;&#x5982;&#x679C;&#x542F;&#x52A8;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x521B;&#x5EFA;HDFS&#x6839;&#x8DEF;&#x5F84;&#xFF0C;&#x5E76;&#x5C06; <strong>owner</strong> &#x4FEE;&#x6539;&#x4E3A;<strong>&#x90E8;&#x7F72;&#x7528;&#x6237;</strong>&#xFF0C;&#x5426;&#x5219;&#x5FFD;&#x7565;&#x6B64;&#x6B65;&#x9AA4;</p>
<h3 id="3&#xFF0C;&#x9879;&#x76EE;&#x7F16;&#x8BD1;">3&#xFF0C;&#x9879;&#x76EE;&#x7F16;&#x8BD1;</h3>
<p>&#x200B; &#x5982;&#x4E0A;&#x8FDB;&#x884C; <strong>&#x9879;&#x76EE;&#x7F16;&#x8BD1;</strong></p>
<h3 id="4&#xFF0C;&#x4FEE;&#x6539;&#x914D;&#x7F6E;&#x6587;&#x4EF6;">4&#xFF0C;&#x4FEE;&#x6539;&#x914D;&#x7F6E;&#x6587;&#x4EF6;</h3>
<p>&#x200B; &#x6839;&#x636E; <strong>&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x8BF4;&#x660E;</strong> &#x4FEE;&#x6539;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x548C; <strong>&#x73AF;&#x5883;&#x53D8;&#x91CF;</strong> &#x6587;&#x4EF6;</p>
<h3 id="5&#xFF0C;&#x521B;&#x5EFA;&#x76EE;&#x5F55;&#x5E76;&#x5C06;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x6587;&#x4EF6;&#x590D;&#x5236;&#x5230;&#x6307;&#x5B9A;&#x76EE;&#x5F55;">5&#xFF0C;&#x521B;&#x5EFA;&#x76EE;&#x5F55;&#x5E76;&#x5C06;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x6587;&#x4EF6;&#x590D;&#x5236;&#x5230;&#x6307;&#x5B9A;&#x76EE;&#x5F55;</h3>
<ul>
<li><p>&#x521B;&#x5EFA; <strong>common/common.properties</strong> &#x4E0B;&#x7684;data.basedir.path&#x3001;data.download.basedir.path&#x548C;process.exec.basepath&#x8DEF;&#x5F84;</p>
</li>
<li><p>&#x5C06;<strong>.escheduler_env.sh</strong> &#x548C; <strong>escheduler_env.py</strong> &#x4E24;&#x4E2A;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x6587;&#x4EF6;&#x590D;&#x5236;&#x5230; <strong>common/common.properties</strong>&#x914D;&#x7F6E;&#x7684;<strong>escheduler.env.path</strong> &#x548C; <strong>escheduler.env.py</strong> &#x7684;&#x76EE;&#x5F55;&#x4E0B;&#xFF0C;&#x5E76;&#x5C06; <strong>owner</strong> &#x4FEE;&#x6539;&#x4E3A;<strong>&#x90E8;&#x7F72;&#x7528;&#x6237;</strong></p>
</li>
</ul>
<h3 id="6&#xFF0C;&#x542F;&#x505C;&#x670D;&#x52A1;">6&#xFF0C;&#x542F;&#x505C;&#x670D;&#x52A1;</h3>
<ul>
<li>&#x542F;&#x505C;Master</li>
</ul>
<pre><code class="lang-&#x542F;&#x52A8;master">sh ./bin/arklifter-daemon.sh start master-server
sh ./bin/arklifter-daemon.sh stop master-server
</code></pre>
<ul>
<li>&#x542F;&#x505C;Worker</li>
</ul>
<pre><code>sh ./bin/arklifter-daemon.sh start worker-server
sh ./bin/arklifter-daemon.sh stop worker-server
</code></pre><ul>
<li>&#x542F;&#x505C;Api</li>
</ul>
<pre><code>sh ./bin/arklifter-daemon.sh start api-server
sh ./bin/arklifter-daemon.sh stop api-server
</code></pre><ul>
<li>&#x542F;&#x505C;Logger</li>
</ul>
<pre><code>sh ./bin/arklifter-daemon.sh start logger-server
sh ./bin/arklifter-daemon.sh stop logger-server
</code></pre><ul>
<li>&#x542F;&#x505C;Alert</li>
</ul>
<pre><code>sh ./bin/arklifter-daemon.sh start alert-server
sh ./bin/arklifter-daemon.sh stop alert-server
</code></pre><h2 id="&#x5206;&#x5E03;&#x5F0F;&#x90E8;&#x7F72;">&#x5206;&#x5E03;&#x5F0F;&#x90E8;&#x7F72;</h2>
<h3 id="1&#xFF0C;&#x521B;&#x5EFA;&#x90E8;&#x7F72;&#x7528;&#x6237;">1&#xFF0C;&#x521B;&#x5EFA;&#x90E8;&#x7F72;&#x7528;&#x6237;</h3>
<ul>
<li>&#x5728;&#x9700;&#x8981;&#x90E8;&#x7F72;&#x8C03;&#x5EA6;&#x7684;&#x673A;&#x5668;&#x4E0A;&#x5982;&#x4E0A; <strong>&#x521B;&#x5EFA;&#x90E8;&#x7F72;&#x7528;&#x6237;</strong></li>
<li><a href="https://blog.csdn.net/thinkmore1314/article/details/22489203" target="_blank">&#x5C06; <strong>&#x4E3B;&#x673A;&#x5668;</strong> &#x548C;&#x5404;&#x4E2A;&#x5176;&#x5B83;&#x673A;&#x5668;SSH&#x6253;&#x901A;</a></li>
</ul>
<h3 id="2&#xFF0C;&#x6839;&#x636E;&#x5B9E;&#x9645;&#x9700;&#x6C42;&#x6765;&#x521B;&#x5EFA;hdfs&#x6839;&#x8DEF;&#x5F84;">2&#xFF0C;&#x6839;&#x636E;&#x5B9E;&#x9645;&#x9700;&#x6C42;&#x6765;&#x521B;&#x5EFA;HDFS&#x6839;&#x8DEF;&#x5F84;</h3>
<p>&#x200B; &#x6839;&#x636E; <strong>common/common.properties</strong> &#x4E2D; <strong>hdfs.startup.state</strong> &#x7684;&#x914D;&#x7F6E;&#x6765;&#x5224;&#x65AD;&#x662F;&#x5426;&#x542F;&#x52A8;HDFS&#xFF0C;&#x5982;&#x679C;&#x542F;&#x52A8;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x521B;&#x5EFA;HDFS&#x6839;&#x8DEF;&#x5F84;&#xFF0C;&#x5E76;&#x5C06; <strong>owner</strong> &#x4FEE;&#x6539;&#x4E3A;<strong>&#x90E8;&#x7F72;&#x7528;&#x6237;</strong>&#xFF0C;&#x5426;&#x5219;&#x5FFD;&#x7565;&#x6B64;&#x6B65;&#x9AA4;</p>
<h3 id="3&#xFF0C;&#x9879;&#x76EE;&#x7F16;&#x8BD1;">3&#xFF0C;&#x9879;&#x76EE;&#x7F16;&#x8BD1;</h3>
<p>&#x200B; &#x5982;&#x4E0A;&#x8FDB;&#x884C; <strong>&#x9879;&#x76EE;&#x7F16;&#x8BD1;</strong></p>
<h3 id="4&#xFF0C;&#x5C06;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x6587;&#x4EF6;&#x590D;&#x5236;&#x5230;&#x6307;&#x5B9A;&#x76EE;&#x5F55;">4&#xFF0C;&#x5C06;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x6587;&#x4EF6;&#x590D;&#x5236;&#x5230;&#x6307;&#x5B9A;&#x76EE;&#x5F55;</h3>
<p>&#x200B; &#x5C06;<strong>.escheduler_env.sh</strong> &#x548C; <strong>escheduler_env.py</strong> &#x4E24;&#x4E2A;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x6587;&#x4EF6;&#x590D;&#x5236;&#x5230; <strong>common/common.properties</strong>&#x914D;&#x7F6E;&#x7684;<strong>escheduler.env.path</strong> &#x548C; <strong>escheduler.env.py</strong> &#x7684;&#x76EE;&#x5F55;&#x4E0B;&#xFF0C;&#x5E76;&#x5C06; <strong>owner</strong> &#x4FEE;&#x6539;&#x4E3A;<strong>&#x90E8;&#x7F72;&#x7528;&#x6237;</strong></p>
<h3 id="5&#xFF0C;&#x4FEE;&#x6539;-installsh">5&#xFF0C;&#x4FEE;&#x6539; install.sh</h3>
<p>&#x200B; &#x4FEE;&#x6539; install.sh &#x4E2D;&#x53D8;&#x91CF;&#x7684;&#x503C;&#xFF0C;&#x66FF;&#x6362;&#x6210;&#x81EA;&#x8EAB;&#x4E1A;&#x52A1;&#x6240;&#x9700;&#x7684;&#x503C;</p>
<h3 id="6&#xFF0C;&#x4E00;&#x952E;&#x90E8;&#x7F72;">6&#xFF0C;&#x4E00;&#x952E;&#x90E8;&#x7F72;</h3>
<ul>
<li><p>&#x5B89;&#x88C5; pip install kazoo</p>
</li>
<li><p>&#x4F7F;&#x7528;&#x90E8;&#x7F72;&#x7528;&#x6237; sh install.sh &#x4E00;&#x952E;&#x90E8;&#x7F72;</p>
</li>
</ul>
<h2 id="&#x670D;&#x52A1;&#x76D1;&#x63A7;">&#x670D;&#x52A1;&#x76D1;&#x63A7;</h2>
<p>monitor_server.py &#x811A;&#x672C;&#x662F;&#x76D1;&#x542C;&#xFF0C;master&#x548C;worker&#x670D;&#x52A1;&#x6302;&#x6389;&#x91CD;&#x542F;&#x7684;&#x811A;&#x672C;</p>
<p>&#x6CE8;&#x610F;&#xFF1A;&#x5728;&#x5168;&#x90E8;&#x670D;&#x52A1;&#x90FD;&#x542F;&#x52A8;&#x4E4B;&#x540E;&#x542F;&#x52A8;</p>
<p>nohup python -u monitor_server.py &gt; nohup.out 2&gt;&amp;1 &amp;</p>
<h2 id="&#x65E5;&#x5FD7;&#x67E5;&#x770B;">&#x65E5;&#x5FD7;&#x67E5;&#x770B;</h2>
<p>&#x65E5;&#x5FD7;&#x7EDF;&#x4E00;&#x5B58;&#x653E;&#x4E8E;&#x6307;&#x5B9A;&#x6587;&#x4EF6;&#x5939;&#x5185;</p>
<pre><code class="lang-&#x65E5;&#x5FD7;&#x8DEF;&#x5F84;"> logs/
&#x251C;&#x2500;&#x2500; escheduler-alert-server.log
&#x251C;&#x2500;&#x2500; escheduler-master-server.log
|&#x2014;&#x2014; escheduler-worker-server.log
|&#x2014;&#x2014; escheduler-api-server.log
|&#x2014;&#x2014; escheduler-logger-server.log
</code></pre>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
<a href="architecture-design.html#调度系统架构设计" class="navigation navigation-prev " aria-label="Previous page: 系统架构设计">
<i class="fa fa-angle-left"></i>
</a>
<a href="task-plugin-development.html#任务插件开发" class="navigation navigation-next " aria-label="Next page: 自定义任务插件文档">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"部署文档","level":"1.3.2","depth":2,"next":{"title":"自定义任务插件文档","level":"1.3.3","depth":2,"anchor":"#任务插件开发","path":"task-plugin-development.md","ref":"task-plugin-development.md#任务插件开发","articles":[]},"previous":{"title":"系统架构设计","level":"1.3.1","depth":2,"anchor":"#调度系统架构设计","path":"architecture-design.md","ref":"architecture-design.md#调度系统架构设计","articles":[]},"dir":"ltr"},"config":{"plugins":["expandable-chapters","insert-logo-link"],"styles":{"website":"./styles/website.css"},"pluginsConfig":{"insert-logo-link":{"src":"../images/logo.png","url":"/"},"expandable-chapters":{},"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"YIGUAN","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"调度系统-EasyScheduler","language":"zh-hans","gitbook":"3.2.3","description":"调度系统"},"file":{"path":"backend-deploy.md","mtime":"2019-03-28T11:14:39.609Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-03-28T11:15:13.750Z"},"basePath":".","book":{"language":""}});
});
</script>
</div>
<script src="gitbook/gitbook.js"></script>
<script src="gitbook/theme.js"></script>
<script src="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
<script src="gitbook/gitbook-plugin-insert-logo-link/plugin.js"></script>
<script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
<script src="gitbook/gitbook-plugin-search/search.js"></script>
<script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
<script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
<script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
<script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>

567
docs/pages/deploy-foreground.html → docs/zh_CN/_book/frontend-deploy.html

File diff suppressed because one or more lines are too long

852
docs/zh_CN/_book/frontend-development.html

@ -0,0 +1,852 @@
<!DOCTYPE HTML>
<html lang="zh-hans" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>项目目录结构 · 调度系统-EasyScheduler</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.3">
<meta name="author" content="YIGUAN">
<link rel="stylesheet" href="gitbook/style.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-insert-logo-link/plugin.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
<link rel="stylesheet" href="styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
<link rel="next" href="frontend-development.html" />
<link rel="prev" href="frontend-deploy.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="输入并搜索" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="./">
<a href="./">
Easyscheduler简介
</a>
</li>
<li class="chapter " data-level="1.2" >
<span>
前端文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#前端项目环境构建及编译">
环境搭建
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#安装及配置">
安装及配置
</a>
</li>
<li class="chapter " data-level="1.2.3" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#项目生产环境配置">
项目生产环境Nginx配置
</a>
</li>
<li class="chapter " data-level="1.2.4" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#前端项目发布">
前端项目发布
</a>
</li>
<li class="chapter " data-level="1.2.5" data-path="frontend-deploy.html">
<a href="frontend-deploy.html#问题">
问题
</a>
</li>
<li class="chapter " data-level="1.2.6" data-path="frontend-development.html">
<a href="frontend-development.html#项目目录结构">
项目目录结构
</a>
</li>
<li class="chapter " data-level="1.2.7" data-path="frontend-development.html">
<a href="frontend-development.html#系统功能模块">
系统功能模块
</a>
</li>
<li class="chapter " data-level="1.2.8" data-path="frontend-development.html">
<a href="frontend-development.html#路由和状态管理">
路由和状态管理
</a>
</li>
<li class="chapter " data-level="1.2.9" data-path="frontend-development.html">
<a href="frontend-development.html#规范">
规范
</a>
</li>
<li class="chapter " data-level="1.2.10" data-path="frontend-development.html">
<a href="frontend-development.html#接口">
接口
</a>
</li>
<li class="chapter " data-level="1.2.11" data-path="frontend-development.html">
<a href="frontend-development.html#扩展开发">
扩展开发
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" >
<span>
后端文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="architecture-design.html">
<a href="architecture-design.html#调度系统架构设计">
系统架构设计
</a>
</li>
<li class="chapter " data-level="1.3.2" data-path="backend-deploy.html">
<a href="backend-deploy.html#部署文档">
部署文档
</a>
</li>
<li class="chapter " data-level="1.3.3" data-path="task-plugin-development.html">
<a href="task-plugin-development.html#任务插件开发">
自定义任务插件文档
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="user-manual.md">
<span>
使用说明文档
</a>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本书使用 GitBook 发布
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href="." >项目目录结构</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h1 id="&#x524D;&#x7AEF;&#x5F00;&#x53D1;&#x6587;&#x6863;">&#x524D;&#x7AEF;&#x5F00;&#x53D1;&#x6587;&#x6863;</h1>
<h3 id="&#x6280;&#x672F;&#x9009;&#x578B;">&#x6280;&#x672F;&#x9009;&#x578B;</h3>
<pre><code>Vue mvvm&#x6846;&#x67B6;
Es6 ECMAScript 6.0
Ans-ui Analysys-ui
D3 &#x53EF;&#x89C6;&#x5316;&#x5E93;&#x56FE;&#x8868;&#x5E93;
Jsplumb &#x8FDE;&#x7EBF;&#x63D2;&#x4EF6;&#x5E93;
Lodash &#x9AD8;&#x6027;&#x80FD;&#x7684; JavaScript &#x5B9E;&#x7528;&#x5DE5;&#x5177;&#x5E93;
</code></pre><h3 id="&#x9879;&#x76EE;&#x76EE;&#x5F55;&#x7ED3;&#x6784;">&#x9879;&#x76EE;&#x76EE;&#x5F55;&#x7ED3;&#x6784;</h3>
<p><code>build</code> &#x6253;&#x5305;&#x53CA;&#x5F00;&#x53D1;&#x73AF;&#x5883;&#x9879;&#x76EE;&#x7684;&#x4E00;&#x4E9B;webpack&#x914D;&#x7F6E;</p>
<p><code>node_modules</code> &#x5F00;&#x53D1;&#x73AF;&#x5883;node&#x4F9D;&#x8D56;&#x5305;</p>
<p><code>src</code> &#x9879;&#x76EE;&#x6240;&#x9700;&#x6587;&#x4EF6;</p>
<p><code>src =&gt; combo</code> &#x9879;&#x76EE;&#x7B2C;&#x4E09;&#x65B9;&#x8D44;&#x6E90;&#x672C;&#x5730;&#x5316; <code>npm run combo</code>&#x5177;&#x4F53;&#x67E5;&#x770B;<code>build/combo.js</code></p>
<p><code>src =&gt; font</code> &#x5B57;&#x4F53;&#x56FE;&#x6807;&#x5E93;&#x53EF;&#x8BBF;&#x95EE; <a href="https://www.iconfont.cn" target="_blank">https://www.iconfont.cn</a> &#x8FDB;&#x884C;&#x6DFB;&#x52A0; &#x6CE8;&#x610F;&#xFF1A;&#x5B57;&#x4F53;&#x5E93;&#x7528;&#x7684;&#x81EA;&#x5DF1;&#x7684; &#x4E8C;&#x6B21;&#x5F00;&#x53D1;&#x9700;&#x8981;&#x91CD;&#x65B0;&#x5F15;&#x5165;&#x81EA;&#x5DF1;&#x7684;&#x5E93; <code>src/sass/common/_font.scss</code></p>
<p><code>src =&gt; images</code> &#x516C;&#x5171;&#x56FE;&#x7247;&#x5B58;&#x653E;</p>
<p><code>src =&gt; js</code> js/vue</p>
<p><code>src =&gt; lib</code> &#x516C;&#x53F8;&#x5185;&#x90E8;&#x7EC4;&#x4EF6;&#xFF08;&#x516C;&#x53F8;&#x7EC4;&#x4EF6;&#x5E93;&#x5F00;&#x6E90;&#x540E;&#x53EF;&#x5220;&#x6389;&#xFF09;</p>
<p><code>src =&gt; sass</code> sass&#x6587;&#x4EF6; &#x4E00;&#x4E2A;&#x9875;&#x9762;&#x5BF9;&#x5E94;&#x4E00;&#x4E2A;sass&#x6587;&#x4EF6;</p>
<p><code>src =&gt; view</code> &#x9875;&#x9762;&#x6587;&#x4EF6; &#x4E00;&#x4E2A;&#x9875;&#x9762;&#x5BF9;&#x5E94;&#x4E00;&#x4E2A;html&#x6587;&#x4EF6;</p>
<pre><code>&gt; &#x9879;&#x76EE;&#x91C7;&#x7528;vue&#x5355;&#x9875;&#x9762;&#x5E94;&#x7528;(SPA)&#x5F00;&#x53D1;
- &#x6240;&#x6709;&#x9875;&#x9762;&#x5165;&#x53E3;&#x6587;&#x4EF6;&#x5728; `src/js/conf/${&#x5BF9;&#x5E94;&#x9875;&#x9762;&#x6587;&#x4EF6;&#x540D; =&gt; home}` &#x7684; `index.js` &#x5165;&#x53E3;&#x6587;&#x4EF6;
- &#x5BF9;&#x5E94;&#x7684;sass&#x6587;&#x4EF6;&#x5219;&#x5728; `src/sass/conf/${&#x5BF9;&#x5E94;&#x9875;&#x9762;&#x6587;&#x4EF6;&#x540D; =&gt; home}/index.scss`
- &#x5BF9;&#x5E94;&#x7684;html&#x6587;&#x4EF6;&#x5219;&#x5728; `src/view/${&#x5BF9;&#x5E94;&#x9875;&#x9762;&#x6587;&#x4EF6;&#x540D; =&gt; home}/index.html`
</code></pre><p>&#x516C;&#x5171;&#x6A21;&#x5757;&#x53CA;util <code>src/js/module</code></p>
<p><code>components</code> =&gt; &#x5185;&#x90E8;&#x9879;&#x76EE;&#x516C;&#x5171;&#x7EC4;&#x4EF6;</p>
<p><code>download</code> =&gt; &#x4E0B;&#x8F7D;&#x7EC4;&#x4EF6;</p>
<p><code>echarts</code> =&gt; &#x56FE;&#x8868;&#x7EC4;&#x4EF6;</p>
<p><code>filter</code> =&gt; &#x8FC7;&#x6EE4;&#x5668;&#x548C;vue&#x7BA1;&#x9053;</p>
<p><code>i18n</code> =&gt; &#x56FD;&#x9645;&#x5316;</p>
<p><code>io</code> =&gt; io&#x8BF7;&#x6C42;&#x5C01;&#x88C5; &#x57FA;&#x4E8E;axios</p>
<p><code>mixin</code> =&gt; vue mixin &#x516C;&#x5171;&#x90E8;&#x5206; &#x7528;&#x4E8E;disabled&#x64CD;&#x4F5C;</p>
<p><code>permissions</code> =&gt; &#x6743;&#x9650;&#x64CD;&#x4F5C;</p>
<p><code>util</code> =&gt; &#x5DE5;&#x5177;</p>
<h3 id="&#x7CFB;&#x7EDF;&#x529F;&#x80FD;&#x6A21;&#x5757;">&#x7CFB;&#x7EDF;&#x529F;&#x80FD;&#x6A21;&#x5757;</h3>
<p>&#x9996;&#x9875; =&gt; <code>http://localhost:8888/#/home</code></p>
<p>&#x9879;&#x76EE;&#x7BA1;&#x7406; =&gt; <code>http://localhost:8888/#/projects/list</code></p>
<pre><code>| &#x9879;&#x76EE;&#x9996;&#x9875;
| &#x5DE5;&#x4F5C;&#x6D41;
- &#x5DE5;&#x4F5C;&#x6D41;&#x5B9A;&#x4E49;
- &#x5DE5;&#x4F5C;&#x6D41;&#x5B9E;&#x4F8B;
- &#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;
</code></pre><p>&#x8D44;&#x6E90;&#x7BA1;&#x7406; =&gt; <code>http://localhost:8888/#/resource/file</code></p>
<pre><code>| &#x6587;&#x4EF6;&#x7BA1;&#x7406;
| UDF&#x7BA1;&#x7406;
- &#x8D44;&#x6E90;&#x7BA1;&#x7406;
- &#x51FD;&#x6570;&#x7BA1;&#x7406;
</code></pre><p>&#x6570;&#x636E;&#x6E90;&#x7BA1;&#x7406; =&gt; <code>http://localhost:8888/#/datasource/list</code></p>
<p>&#x5B89;&#x5168;&#x4E2D;&#x5FC3; =&gt; <code>http://localhost:8888/#/security/tenant</code></p>
<pre><code>| &#x79DF;&#x6237;&#x7BA1;&#x7406;
| &#x7528;&#x6237;&#x7BA1;&#x7406;
| &#x544A;&#x8B66;&#x7EC4;&#x7BA1;&#x7406;
- master
- worker
</code></pre><p>&#x7528;&#x6237;&#x4E2D;&#x5FC3; =&gt; <code>http://localhost:8888/#/user/account</code></p>
<h2 id="&#x8DEF;&#x7531;&#x548C;&#x72B6;&#x6001;&#x7BA1;&#x7406;">&#x8DEF;&#x7531;&#x548C;&#x72B6;&#x6001;&#x7BA1;&#x7406;</h2>
<p>&#x9879;&#x76EE; <code>src/js/conf/home</code> &#x4E0B;&#x5206;&#x4E3A;</p>
<p><code>pages</code> =&gt; &#x8DEF;&#x7531;&#x6307;&#x5411;&#x9875;&#x9762;&#x76EE;&#x5F55;</p>
<pre><code> &#x8DEF;&#x7531;&#x5730;&#x5740;&#x5BF9;&#x5E94;&#x7684;&#x9875;&#x9762;&#x6587;&#x4EF6;
</code></pre><p><code>router</code> =&gt; &#x8DEF;&#x7531;&#x7BA1;&#x7406;</p>
<pre><code>vue&#x7684;&#x8DEF;&#x7531;&#x5668;&#xFF0C;&#x5728;&#x6BCF;&#x4E2A;&#x9875;&#x9762;&#x7684;&#x5165;&#x53E3;&#x6587;&#x4EF6;index.js &#x90FD;&#x4F1A;&#x6CE8;&#x518C;&#x8FDB;&#x6765; &#x5177;&#x4F53;&#x64CD;&#x4F5C;&#xFF1A;https://router.vuejs.org/zh/
</code></pre><p><code>store</code> =&gt; &#x72B6;&#x6001;&#x7BA1;&#x7406;</p>
<pre><code>&#x6BCF;&#x4E2A;&#x8DEF;&#x7531;&#x5BF9;&#x5E94;&#x7684;&#x9875;&#x9762;&#x90FD;&#x6709;&#x4E00;&#x4E2A;&#x72B6;&#x6001;&#x7BA1;&#x7406;&#x7684;&#x6587;&#x4EF6; &#x5206;&#x4E3A;&#xFF1A;
actions =&gt; mapActions =&gt; &#x8BE6;&#x60C5;&#xFF1A;https://vuex.vuejs.org/zh/guide/actions.html
getters =&gt; mapGetters =&gt; &#x8BE6;&#x60C5;&#xFF1A;https://vuex.vuejs.org/zh/guide/getters.html
index =&gt; &#x5165;&#x53E3;
mutations =&gt; mapMutations =&gt; &#x8BE6;&#x60C5;&#xFF1A;https://vuex.vuejs.org/zh/guide/mutations.html
state =&gt; mapState =&gt; &#x8BE6;&#x60C5;&#xFF1A;https://vuex.vuejs.org/zh/guide/state.html
&#x5177;&#x4F53;&#x64CD;&#x4F5C;&#xFF1A;https://vuex.vuejs.org/zh/
</code></pre><h2 id="&#x89C4;&#x8303;">&#x89C4;&#x8303;</h2>
<h2 id="vue&#x89C4;&#x8303;">Vue&#x89C4;&#x8303;</h2>
<h5 id="1&#x7EC4;&#x4EF6;&#x540D;">1.&#x7EC4;&#x4EF6;&#x540D;</h5>
<p>&#x7EC4;&#x4EF6;&#x540D;&#x4E3A;&#x591A;&#x4E2A;&#x5355;&#x8BCD;&#xFF0C;&#x5E76;&#x4E14;&#x7528;&#x8FDE;&#x63A5;&#x7EBF;&#xFF08;-&#xFF09;&#x8FDE;&#x63A5;&#xFF0C;&#x907F;&#x514D;&#x4E0E; HTML &#x6807;&#x7B7E;&#x51B2;&#x7A81;&#xFF0C;&#x5E76;&#x4E14;&#x7ED3;&#x6784;&#x66F4;&#x52A0;&#x6E05;&#x6670;&#x3002;</p>
<pre><code>// &#x6B63;&#x4F8B;
export default {
name: &apos;page-article-item&apos;
}
</code></pre><h5 id="2&#x7EC4;&#x4EF6;&#x6587;&#x4EF6;">2.&#x7EC4;&#x4EF6;&#x6587;&#x4EF6;</h5>
<p><code>src/js/module/components</code>&#x9879;&#x76EE;&#x5185;&#x90E8;&#x516C;&#x5171;&#x7EC4;&#x4EF6;&#x4E66;&#x5199;&#x6587;&#x4EF6;&#x5939;&#x540D;&#x4E0E;&#x6587;&#x4EF6;&#x540D;&#x540C;&#x540D;,&#x516C;&#x5171;&#x7EC4;&#x4EF6;&#x5185;&#x90E8;&#x6240;&#x62C6;&#x5206;&#x7684;&#x5B50;&#x7EC4;&#x4EF6;&#x4E0E;util&#x5DE5;&#x5177;&#x90FD;&#x653E;&#x7F6E;&#x7EC4;&#x4EF6;&#x5185;&#x90E8; <code>_source</code>&#x6587;&#x4EF6;&#x5939;&#x91CC;&#x3002;</p>
<pre><code>&#x2514;&#x2500;&#x2500; components
&#x251C;&#x2500;&#x2500; header
&#x251C;&#x2500;&#x2500; header.vue
&#x2514;&#x2500;&#x2500; _source
&#x2514;&#x2500;&#x2500; nav.vue
&#x2514;&#x2500;&#x2500; util.js
&#x251C;&#x2500;&#x2500; conditions
&#x251C;&#x2500;&#x2500; conditions.vue
&#x2514;&#x2500;&#x2500; _source
&#x2514;&#x2500;&#x2500; serach.vue
&#x2514;&#x2500;&#x2500; util.js
</code></pre><h5 id="3prop">3.Prop</h5>
<p>&#x5B9A;&#x4E49; Prop &#x7684;&#x65F6;&#x5019;&#x5E94;&#x8BE5;&#x59CB;&#x7EC8;&#x4EE5;&#x9A7C;&#x5CF0;&#x683C;&#x5F0F;&#xFF08;camelCase&#xFF09;&#x547D;&#x540D;&#xFF0C;&#x5728;&#x7236;&#x7EC4;&#x4EF6;&#x8D4B;&#x503C;&#x7684;&#x65F6;&#x5019;&#x4F7F;&#x7528;&#x8FDE;&#x63A5;&#x7EBF;&#xFF08;-&#xFF09;&#x3002;
&#x8FD9;&#x91CC;&#x9075;&#x5FAA;&#x6BCF;&#x4E2A;&#x8BED;&#x8A00;&#x7684;&#x7279;&#x6027;&#xFF0C;&#x56E0;&#x4E3A;&#x5728; HTML &#x6807;&#x8BB0;&#x4E2D;&#x5BF9;&#x5927;&#x5C0F;&#x5199;&#x662F;&#x4E0D;&#x654F;&#x611F;&#x7684;&#xFF0C;&#x4F7F;&#x7528;&#x8FDE;&#x63A5;&#x7EBF;&#x66F4;&#x52A0;&#x53CB;&#x597D;&#xFF1B;&#x800C;&#x5728; JavaScript &#x4E2D;&#x66F4;&#x81EA;&#x7136;&#x7684;&#x662F;&#x9A7C;&#x5CF0;&#x547D;&#x540D;&#x3002;</p>
<pre><code>// Vue
props: {
articleStatus: Boolean
}
// HTML
&lt;article-item :article-status=&quot;true&quot;&gt;&lt;/article-item&gt;
</code></pre><p>Prop &#x7684;&#x5B9A;&#x4E49;&#x5E94;&#x8BE5;&#x5C3D;&#x91CF;&#x8BE6;&#x7EC6;&#x7684;&#x6307;&#x5B9A;&#x5176;&#x7C7B;&#x578B;&#x3001;&#x9ED8;&#x8BA4;&#x503C;&#x548C;&#x9A8C;&#x8BC1;&#x3002;</p>
<p>&#x793A;&#x4F8B;&#xFF1A;</p>
<pre><code>props: {
attrM: Number,
attrA: {
type: String,
required: true
},
attrZ: {
type: Object,
// &#x6570;&#x7EC4;/&#x5BF9;&#x8C61;&#x7684;&#x9ED8;&#x8BA4;&#x503C;&#x5E94;&#x8BE5;&#x7531;&#x4E00;&#x4E2A;&#x5DE5;&#x5382;&#x51FD;&#x6570;&#x8FD4;&#x56DE;
default: function () {
return {
msg: &apos;&#x6210;&#x5C31;&#x4F60;&#x6211;&apos;
}
}
},
attrE: {
type: String,
validator: function (v) {
return !([&apos;success&apos;, &apos;fail&apos;].indexOf(v) === -1)
}
}
}
</code></pre><h5 id="4v-for">4.v-for</h5>
<p>&#x5728;&#x6267;&#x884C; v-for &#x904D;&#x5386;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x603B;&#x662F;&#x5E94;&#x8BE5;&#x5E26;&#x4E0A; key &#x503C;&#x4F7F;&#x66F4;&#x65B0; DOM &#x65F6;&#x6E32;&#x67D3;&#x6548;&#x7387;&#x66F4;&#x9AD8;&#x3002;</p>
<pre><code>&lt;ul&gt;
&lt;li v-for=&quot;item in list&quot; :key=&quot;item.id&quot;&gt;
{{ item.title }}
&lt;/li&gt;
&lt;/ul&gt;
</code></pre><p>v-for &#x5E94;&#x8BE5;&#x907F;&#x514D;&#x4E0E; v-if &#x5728;&#x540C;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF08;<code>&#x4F8B;&#x5982;&#xFF1A;&lt;li&gt;</code>&#xFF09;&#x4E0A;&#x4F7F;&#x7528;&#xFF0C;&#x56E0;&#x4E3A; v-for &#x7684;&#x4F18;&#x5148;&#x7EA7;&#x6BD4; v-if &#x66F4;&#x9AD8;&#xFF0C;&#x4E3A;&#x4E86;&#x907F;&#x514D;&#x65E0;&#x6548;&#x8BA1;&#x7B97;&#x548C;&#x6E32;&#x67D3;&#xFF0C;&#x5E94;&#x8BE5;&#x5C3D;&#x91CF;&#x5C06; v-if &#x653E;&#x5230;&#x5BB9;&#x5668;&#x7684;&#x7236;&#x5143;&#x7D20;&#x4E4B;&#x4E0A;&#x3002;</p>
<pre><code>&lt;ul v-if=&quot;showList&quot;&gt;
&lt;li v-for=&quot;item in list&quot; :key=&quot;item.id&quot;&gt;
{{ item.title }}
&lt;/li&gt;
&lt;/ul&gt;
</code></pre><h5 id="5v-if--v-else-if--v-else">5.v-if / v-else-if / v-else</h5>
<p>&#x82E5;&#x540C;&#x4E00;&#x7EC4; v-if &#x903B;&#x8F91;&#x63A7;&#x5236;&#x4E2D;&#x7684;&#x5143;&#x7D20;&#x903B;&#x8F91;&#x76F8;&#x540C;&#xFF0C;Vue &#x4E3A;&#x4E86;&#x66F4;&#x9AD8;&#x6548;&#x7684;&#x5143;&#x7D20;&#x5207;&#x6362;&#xFF0C;&#x4F1A;&#x590D;&#x7528;&#x76F8;&#x540C;&#x7684;&#x90E8;&#x5206;&#xFF0C;<code>&#x4F8B;&#x5982;&#xFF1A;value</code>&#x3002;&#x4E3A;&#x4E86;&#x907F;&#x514D;&#x590D;&#x7528;&#x5E26;&#x6765;&#x7684;&#x4E0D;&#x5408;&#x7406;&#x6548;&#x679C;&#xFF0C;&#x5E94;&#x8BE5;&#x5728;&#x540C;&#x79CD;&#x5143;&#x7D20;&#x4E0A;&#x52A0;&#x4E0A; key &#x505A;&#x6807;&#x8BC6;&#x3002;</p>
<pre><code>&lt;div v-if=&quot;hasData&quot; key=&quot;mazey-data&quot;&gt;
&lt;span&gt;{{ mazeyData }}&lt;/span&gt;
&lt;/div&gt;
&lt;div v-else key=&quot;mazey-none&quot;&gt;
&lt;span&gt;&#x65E0;&#x6570;&#x636E;&lt;/span&gt;
&lt;/div&gt;
</code></pre><h5 id="6&#x6307;&#x4EE4;&#x7F29;&#x5199;">6.&#x6307;&#x4EE4;&#x7F29;&#x5199;</h5>
<p>&#x4E3A;&#x4E86;&#x7EDF;&#x4E00;&#x89C4;&#x8303;&#x59CB;&#x7EC8;&#x4F7F;&#x7528;&#x6307;&#x4EE4;&#x7F29;&#x5199;&#xFF0C;&#x4F7F;&#x7528;<code>v-bind</code>&#xFF0C;<code>v-on</code>&#x5E76;&#x6CA1;&#x6709;&#x4EC0;&#x4E48;&#x4E0D;&#x597D;&#xFF0C;&#x8FD9;&#x91CC;&#x4EC5;&#x4E3A;&#x4E86;&#x7EDF;&#x4E00;&#x89C4;&#x8303;&#x3002;</p>
<pre><code>&lt;input :value=&quot;mazeyUser&quot; @click=&quot;verifyUser&quot;&gt;
</code></pre><h5 id="7&#x5355;&#x6587;&#x4EF6;&#x7EC4;&#x4EF6;&#x7684;&#x9876;&#x7EA7;&#x5143;&#x7D20;&#x987A;&#x5E8F;">7.&#x5355;&#x6587;&#x4EF6;&#x7EC4;&#x4EF6;&#x7684;&#x9876;&#x7EA7;&#x5143;&#x7D20;&#x987A;&#x5E8F;</h5>
<p>&#x6837;&#x5F0F;&#x540E;&#x7EED;&#x90FD;&#x662F;&#x6253;&#x5305;&#x5728;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x91CC;&#xFF0C;&#x6240;&#x6709;&#x5728;&#x5355;&#x4E2A;vue&#x6587;&#x4EF6;&#x4E2D;&#x5B9A;&#x4E49;&#x7684;&#x6837;&#x5F0F;&#xFF0C;&#x5728;&#x522B;&#x7684;&#x6587;&#x4EF6;&#x91CC;&#x540C;&#x7C7B;&#x540D;&#x7684;&#x6837;&#x5F0F;&#x4E5F;&#x662F;&#x4F1A;&#x751F;&#x6548;&#x7684;&#x6240;&#x6709;&#x5728;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7EC4;&#x4EF6;&#x524D;&#x90FD;&#x4F1A;&#x6709;&#x4E2A;&#x9876;&#x7EA7;&#x7C7B;&#x540D;
&#x6CE8;&#x610F;&#xFF1A;&#x9879;&#x76EE;&#x5185;&#x5DF2;&#x7ECF;&#x589E;&#x52A0;&#x4E86;sass&#x63D2;&#x4EF6;&#xFF0C;&#x5355;&#x4E2A;vue&#x6587;&#x4EF6;&#x91CC;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4E66;&#x5199;sass&#x8BED;&#x6CD5;
&#x4E3A;&#x4E86;&#x7EDF;&#x4E00;&#x548C;&#x4FBF;&#x4E8E;&#x9605;&#x8BFB;&#xFF0C;&#x5E94;&#x8BE5;&#x6309; <code>&lt;template&gt;</code>&#x3001;<code>&lt;script&gt;</code>&#x3001;<code>&lt;style&gt;</code>&#x7684;&#x987A;&#x5E8F;&#x653E;&#x7F6E;&#x3002;</p>
<pre><code>&lt;template&gt;
&lt;div class=&quot;test-model&quot;&gt;
test
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
export default {
name: &quot;test&quot;,
data() {
return {}
},
props: {},
methods: {},
watch: {},
beforeCreate() {
},
created() {
},
beforeMount() {
},
mounted() {
},
beforeUpdate() {
},
updated() {
},
beforeDestroy() {
},
destroyed() {
},
computed: {},
components: {},
}
&lt;/script&gt;
&lt;style lang=&quot;scss&quot; rel=&quot;stylesheet/scss&quot;&gt;
.test-model {
}
&lt;/style&gt;
</code></pre><h2 id="javascript&#x89C4;&#x8303;">JavaScript&#x89C4;&#x8303;</h2>
<h5 id="1var--let--const">1.var / let / const</h5>
<p>&#x5EFA;&#x8BAE;&#x4E0D;&#x518D;&#x4F7F;&#x7528; var&#xFF0C;&#x800C;&#x4F7F;&#x7528; let / const&#xFF0C;&#x4F18;&#x5148;&#x4F7F;&#x7528; const&#x3002;&#x4EFB;&#x4F55;&#x4E00;&#x4E2A;&#x53D8;&#x91CF;&#x7684;&#x4F7F;&#x7528;&#x90FD;&#x8981;&#x63D0;&#x524D;&#x7533;&#x660E;&#xFF0C;&#x9664;&#x4E86; function &#x5B9A;&#x4E49;&#x7684;&#x51FD;&#x6570;&#x53EF;&#x4EE5;&#x968F;&#x4FBF;&#x653E;&#x5728;&#x4EFB;&#x4F55;&#x4F4D;&#x7F6E;&#x3002;</p>
<h5 id="2&#x5F15;&#x53F7;">2.&#x5F15;&#x53F7;</h5>
<pre><code>const foo = &apos;&#x540E;&#x9664;&apos;
const bar = `${foo}&#xFF0C;&#x524D;&#x7AEF;&#x5DE5;&#x7A0B;&#x5E08;`
</code></pre><h5 id="3&#x51FD;&#x6570;">3.&#x51FD;&#x6570;</h5>
<p>&#x533F;&#x540D;&#x51FD;&#x6570;&#x7EDF;&#x4E00;&#x4F7F;&#x7528;&#x7BAD;&#x5934;&#x51FD;&#x6570;&#xFF0C;&#x591A;&#x4E2A;&#x53C2;&#x6570;/&#x8FD4;&#x56DE;&#x503C;&#x65F6;&#x4F18;&#x5148;&#x4F7F;&#x7528;&#x5BF9;&#x8C61;&#x7684;&#x7ED3;&#x6784;&#x8D4B;&#x503C;&#x3002;</p>
<pre><code>function getPersonInfo ({name, sex}) {
// ...
return {name, gender}
}
</code></pre><p>&#x51FD;&#x6570;&#x540D;&#x7EDF;&#x4E00;&#x4F7F;&#x7528;&#x9A7C;&#x5CF0;&#x547D;&#x540D;&#xFF0C;&#x4EE5;&#x5927;&#x5199;&#x5B57;&#x6BCD;&#x5F00;&#x5934;&#x7533;&#x660E;&#x7684;&#x90FD;&#x662F;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF0C;&#x4F7F;&#x7528;&#x5C0F;&#x5199;&#x5B57;&#x6BCD;&#x5F00;&#x5934;&#x7684;&#x90FD;&#x662F;&#x666E;&#x901A;&#x51FD;&#x6570;&#xFF0C;&#x4E5F;&#x4E0D;&#x8BE5;&#x4F7F;&#x7528; new &#x64CD;&#x4F5C;&#x7B26;&#x53BB;&#x64CD;&#x4F5C;&#x666E;&#x901A;&#x51FD;&#x6570;&#x3002;</p>
<h5 id="4&#x5BF9;&#x8C61;">4.&#x5BF9;&#x8C61;</h5>
<pre><code>const foo = {a: 0, b: 1}
const bar = JSON.parse(JSON.stringify(foo))
const foo = {a: 0, b: 1}
const bar = {...foo, c: 2}
const foo = {a: 3}
Object.assign(foo, {b: 4})
const myMap = new Map([])
for (let [key, value] of myMap.entries()) {
// ...
}
</code></pre><h5 id="5&#x6A21;&#x5757;">5.&#x6A21;&#x5757;</h5>
<p>&#x7EDF;&#x4E00;&#x4F7F;&#x7528; import / export &#x7684;&#x65B9;&#x5F0F;&#x7BA1;&#x7406;&#x9879;&#x76EE;&#x7684;&#x6A21;&#x5757;&#x3002;</p>
<pre><code>// lib.js
export default {}
// app.js
import app from &apos;./lib&apos;
</code></pre><p>import &#x7EDF;&#x4E00;&#x653E;&#x5728;&#x6587;&#x4EF6;&#x9876;&#x90E8;&#x3002;</p>
<p>&#x5982;&#x679C;&#x6A21;&#x5757;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x8F93;&#x51FA;&#x503C;&#xFF0C;&#x4F7F;&#x7528; <code>export default</code>&#xFF0C;&#x5426;&#x5219;&#x4E0D;&#x7528;&#x3002;</p>
<h2 id="html--css">HTML / CSS</h2>
<h6 id="1&#x6807;&#x7B7E;">1.&#x6807;&#x7B7E;</h6>
<p>&#x5728;&#x5F15;&#x7528;&#x5916;&#x90E8; CSS &#x6216; JavaScript &#x65F6;&#x4E0D;&#x5199; type &#x5C5E;&#x6027;&#x3002;HTML5 &#x9ED8;&#x8BA4; type &#x4E3A; <code>text/css</code> &#x548C; <code>text/javascript</code> &#x5C5E;&#x6027;&#xFF0C;&#x6240;&#x4EE5;&#x6CA1;&#x5FC5;&#x8981;&#x6307;&#x5B9A;&#x3002;</p>
<pre><code>&lt;link rel=&quot;stylesheet&quot; href=&quot;//www.test.com/css/test.css&quot;&gt;
&lt;script src=&quot;//www.test.com/js/test.js&quot;&gt;&lt;/script&gt;
</code></pre><h5 id="2&#x547D;&#x540D;">2.&#x547D;&#x540D;</h5>
<p>Class &#x548C; ID &#x7684;&#x547D;&#x540D;&#x5E94;&#x8BE5;&#x8BED;&#x4E49;&#x5316;&#xFF0C;&#x901A;&#x8FC7;&#x770B;&#x540D;&#x5B57;&#x5C31;&#x77E5;&#x9053;&#x662F;&#x5E72;&#x561B;&#x7684;&#xFF1B;&#x591A;&#x4E2A;&#x5355;&#x8BCD;&#x7528;&#x8FDE;&#x63A5;&#x7EBF; - &#x8FDE;&#x63A5;&#x3002;</p>
<pre><code>// &#x6B63;&#x4F8B;
.test-header{
font-size: 20px;
}
</code></pre><h5 id="3&#x5C5E;&#x6027;&#x7F29;&#x5199;">3.&#x5C5E;&#x6027;&#x7F29;&#x5199;</h5>
<p>CSS &#x5C5E;&#x6027;&#x5C3D;&#x91CF;&#x4F7F;&#x7528;&#x7F29;&#x5199;&#xFF0C;&#x63D0;&#x9AD8;&#x4EE3;&#x7801;&#x7684;&#x6548;&#x7387;&#x548C;&#x65B9;&#x4FBF;&#x7406;&#x89E3;&#x3002;</p>
<pre><code>// &#x53CD;&#x4F8B;
border-width: 1px;
border-style: solid;
border-color: #ccc;
// &#x6B63;&#x4F8B;
border: 1px solid #ccc;
</code></pre><h5 id="4&#x6587;&#x6863;&#x7C7B;&#x578B;">4.&#x6587;&#x6863;&#x7C7B;&#x578B;</h5>
<p>&#x5E94;&#x8BE5;&#x603B;&#x662F;&#x4F7F;&#x7528; HTML5 &#x6807;&#x51C6;&#x3002;</p>
<pre><code>&lt;!DOCTYPE html&gt;
</code></pre><h5 id="5&#x6CE8;&#x91CA;">5.&#x6CE8;&#x91CA;</h5>
<p>&#x5E94;&#x8BE5;&#x7ED9;&#x4E00;&#x4E2A;&#x6A21;&#x5757;&#x6587;&#x4EF6;&#x5199;&#x4E00;&#x4E2A;&#x533A;&#x5757;&#x6CE8;&#x91CA;&#x3002;</p>
<pre><code>/**
* @module mazey/api
* @author Mazey &lt;mazey@mazey.net&gt;
* @description test.
* */
</code></pre><h2 id="&#x63A5;&#x53E3;">&#x63A5;&#x53E3;</h2>
<h5 id="&#x6240;&#x6709;&#x7684;&#x63A5;&#x53E3;&#x90FD;&#x4EE5;-promise-&#x5F62;&#x5F0F;&#x8FD4;&#x56DE;">&#x6240;&#x6709;&#x7684;&#x63A5;&#x53E3;&#x90FD;&#x4EE5; Promise &#x5F62;&#x5F0F;&#x8FD4;&#x56DE;</h5>
<p>&#x6CE8;&#x610F;&#x975E;0&#x90FD;&#x4E3A;&#x9519;&#x8BEF;&#x8D70;catch</p>
<pre><code>const test = () =&gt; {
return new Promise((resolve, reject) =&gt; {
resolve({
a:1
})
})
}
// &#x8C03;&#x7528;
test.then(res =&gt; {
console.log(res)
// {a:1}
})
</code></pre><p>&#x6B63;&#x5E38;&#x8FD4;&#x56DE;</p>
<pre><code>{
code:0,
data:{}
msg:&apos;&#x6210;&#x529F;&apos;
}
</code></pre><p>&#x9519;&#x8BEF;&#x8FD4;&#x56DE;</p>
<pre><code>{
code:10000,
data:{}
msg:&apos;&#x5931;&#x8D25;&apos;
}
</code></pre><h5 id="&#x76F8;&#x5173;&#x63A5;&#x53E3;&#x8DEF;&#x5F84;">&#x76F8;&#x5173;&#x63A5;&#x53E3;&#x8DEF;&#x5F84;</h5>
<p>dag &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/dag/actions.js</code></p>
<p>&#x6570;&#x636E;&#x6E90;&#x4E2D;&#x5FC3; &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/datasource/actions.js</code></p>
<p>&#x9879;&#x76EE;&#x7BA1;&#x7406; &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/projects/actions.js</code></p>
<p>&#x8D44;&#x6E90;&#x4E2D;&#x5FC3; &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/resource/actions.js</code></p>
<p>&#x5B89;&#x5168;&#x4E2D;&#x5FC3; &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/security/actions.js</code></p>
<p>&#x7528;&#x6237;&#x4E2D;&#x5FC3; &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/user/actions.js</code></p>
<h2 id="&#x6269;&#x5C55;&#x5F00;&#x53D1;">&#x6269;&#x5C55;&#x5F00;&#x53D1;</h2>
<h5 id="1&#x589E;&#x52A0;&#x8282;&#x70B9;">1.&#x589E;&#x52A0;&#x8282;&#x70B9;</h5>
<p>(1) &#x5148;&#x5C06;&#x8282;&#x70B9;&#x7684;icon&#x5C0F;&#x56FE;&#x6807;&#x653E;&#x7F6E;<code>src/js/conf/home/pages/dag/img</code>&#x6587;&#x4EF6;&#x5939;&#x5185;&#xFF0C;&#x6CE8;&#x610F; <code>toolbar_${&#x540E;&#x53F0;&#x5B9A;&#x4E49;&#x7684;&#x8282;&#x70B9;&#x7684;&#x82F1;&#x6587;&#x540D;&#x79F0; &#x4F8B;&#x5982;:SHELL}.png</code>
(2) &#x627E;&#x5230; <code>src/js/conf/home/pages/dag/_source/config.js</code> &#x91CC;&#x7684; <code>tasksType</code> &#x5BF9;&#x8C61;&#xFF0C;&#x5F80;&#x91CC;&#x589E;&#x52A0;</p>
<pre><code>&apos;DEPENDENT&apos;: { // &#x540E;&#x53F0;&#x5B9A;&#x4E49;&#x8282;&#x70B9;&#x7C7B;&#x578B;&#x82F1;&#x6587;&#x540D;&#x79F0;&#x7528;&#x4F5C;key&#x503C;
desc: &apos;DEPENDENT&apos;, // tooltip desc
color: &apos;#2FBFD8&apos; // &#x4EE3;&#x8868;&#x7684;&#x989C;&#x8272;&#x4E3B;&#x8981;&#x7528;&#x4E8E; tree&#x548C;gantt &#x4E24;&#x5F20;&#x56FE;
}
</code></pre><p>(3) &#x5728; <code>src/js/conf/home/pages/dag/_source/formModel/tasks</code> &#x589E;&#x52A0;&#x4E00;&#x4E2A; <code>${&#x8282;&#x70B9;&#x7C7B;&#x578B;&#xFF08;&#x5C0F;&#x5199;&#xFF09;}</code>.vue &#x6587;&#x4EF6;&#xFF0C;&#x8DDF;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x76F8;&#x5173;&#x7684;&#x7EC4;&#x4EF6;&#x5185;&#x5BB9;&#x90FD;&#x5728;&#x8FD9;&#x91CC;&#x5199;&#x3002; &#x5C5E;&#x4E8E;&#x8282;&#x70B9;&#x7EC4;&#x4EF6;&#x5185;&#x7684;&#x5FC5;&#x987B;&#x62E5;&#x6709;&#x4E00;&#x4E2A;&#x51FD;&#x6570; <code>_verification()</code> &#x9A8C;&#x8BC1;&#x6210;&#x529F;&#x540E;&#x8BB2;&#x5F53;&#x524D;&#x7EC4;&#x4EF6;&#x7684;&#x76F8;&#x5173;&#x6570;&#x636E;&#x5F80;&#x7236;&#x7EC4;&#x4EF6;&#x629B;&#x3002;</p>
<pre><code>/**
* &#x9A8C;&#x8BC1;
*/
_verification () {
// datasource &#x5B50;&#x7EC4;&#x4EF6;&#x9A8C;&#x8BC1;
if (!this.$refs.refDs._verifDatasource()) {
return false
}
// &#x9A8C;&#x8BC1;&#x51FD;&#x6570;
if (!this.method) {
this.$message.warning(`${i18n.$t(&apos;&#x8BF7;&#x8F93;&#x5165;&#x65B9;&#x6CD5;&apos;)}`)
return false
}
// localParams &#x5B50;&#x7EC4;&#x4EF6;&#x9A8C;&#x8BC1;
if (!this.$refs.refLocalParams._verifProp()) {
return false
}
// &#x5B58;&#x50A8;
this.$emit(&apos;on-params&apos;, {
type: this.type,
datasource: this.datasource,
method: this.method,
localParams: this.localParams
})
return true
}
</code></pre><p>(4) &#x8282;&#x70B9;&#x7EC4;&#x4EF6;&#x5185;&#x90E8;&#x6240;&#x7528;&#x5230;&#x516C;&#x5171;&#x7684;&#x7EC4;&#x4EF6;&#x90FD;&#x5728;<code>_source</code>&#x4E0B;&#xFF0C;<code>commcon.js</code>&#x7528;&#x4E0E;&#x914D;&#x7F6E;&#x516C;&#x5171;&#x6570;&#x636E;</p>
<h5 id="2&#x589E;&#x52A0;&#x72B6;&#x6001;&#x7C7B;&#x578B;">2.&#x589E;&#x52A0;&#x72B6;&#x6001;&#x7C7B;&#x578B;</h5>
<p>(1) &#x627E;&#x5230; <code>src/js/conf/home/pages/dag/_source/config.js</code> &#x91CC;&#x7684; <code>tasksState</code> &#x5BF9;&#x8C61;&#xFF0C;&#x5F80;&#x91CC;&#x589E;&#x52A0;</p>
<pre><code>&apos;WAITTING_DEPEND&apos;: { //&#x540E;&#x7AEF;&#x5B9A;&#x4E49;&#x72B6;&#x6001;&#x7C7B;&#x578B; &#x524D;&#x7AEF;&#x7528;&#x4F5C;key&#x503C;
id: 11, // &#x524D;&#x7AEF;&#x5B9A;&#x4E49;id &#x540E;&#x7EED;&#x7528;&#x4F5C;&#x6392;&#x5E8F;
desc: `${i18n.$t(&apos;&#x7B49;&#x5F85;&#x4F9D;&#x8D56;&apos;)}`, // tooltip desc
color: &apos;#5101be&apos;, // &#x4EE3;&#x8868;&#x7684;&#x989C;&#x8272;&#x4E3B;&#x8981;&#x7528;&#x4E8E; tree&#x548C;gantt &#x4E24;&#x5F20;&#x56FE;
icoUnicode: &apos;&amp;#xe68c;&apos;, // &#x5B57;&#x4F53;&#x56FE;&#x6807;
isSpin: false // &#x662F;&#x5426;&#x65CB;&#x8F6C;&#xFF08;&#x9700;&#x4EE3;&#x7801;&#x5224;&#x65AD;&#xFF09;
}
</code></pre><h5 id="3&#x589E;&#x52A0;&#x64CD;&#x4F5C;&#x680F;&#x5DE5;&#x5177;">3.&#x589E;&#x52A0;&#x64CD;&#x4F5C;&#x680F;&#x5DE5;&#x5177;</h5>
<p>(1) &#x627E;&#x5230; <code>src/js/conf/home/pages/dag/_source/config.js</code> &#x91CC;&#x7684; <code>toolOper</code> &#x5BF9;&#x8C61;&#xFF0C;&#x5F80;&#x91CC;&#x589E;&#x52A0;</p>
<pre><code>{
code: &apos;pointer&apos;, // &#x5DE5;&#x5177;&#x6807;&#x8BC6;
icon: &apos;&amp;#xe781;&apos;, // &#x5DE5;&#x5177;&#x56FE;&#x6807;
disable: disable, // &#x662F;&#x5426;&#x7981;&#x7528;
desc: `${i18n.$t(&apos;&#x62D6;&#x52A8;&#x8282;&#x70B9;&#x548C;&#x9009;&#x4E2D;&#x9879;&apos;)}` // tooltip desc
}
</code></pre><p>(2) &#x5DE5;&#x5177;&#x7C7B;&#x90FD;&#x4EE5;&#x4E00;&#x4E2A;&#x6784;&#x9020;&#x51FD;&#x6570;&#x8FD4;&#x56DE; <code>src/js/conf/home/pages/dag/_source/plugIn</code></p>
<p><code>downChart.js</code> =&gt; dag &#x56FE;&#x7247;&#x4E0B;&#x8F7D;&#x5904;&#x7406; </p>
<p><code>dragZoom.js</code> =&gt; &#x9F20;&#x6807;&#x7F29;&#x653E;&#x6548;&#x679C;&#x5904;&#x7406; </p>
<p><code>jsPlumbHandle.js</code> =&gt; &#x62D6;&#x62FD;&#x7EBF;&#x6761;&#x5904;&#x7406; </p>
<p><code>util.js</code> =&gt; &#x5C5E;&#x4E8E; <code>plugIn</code> &#x5DE5;&#x5177;&#x7C7B;</p>
<p>&#x64CD;&#x4F5C;&#x5219;&#x5728; <code>src/js/conf/home/pages/dag/_source/dag.js</code> =&gt; <code>toolbarEvent</code> &#x4E8B;&#x4EF6;&#x4E2D;&#x5904;&#x7406;&#x3002;</p>
<h5 id="3&#x589E;&#x52A0;&#x4E00;&#x4E2A;&#x8DEF;&#x7531;&#x9875;&#x9762;">3.&#x589E;&#x52A0;&#x4E00;&#x4E2A;&#x8DEF;&#x7531;&#x9875;&#x9762;</h5>
<p>(1) &#x9996;&#x5148;&#x5728;&#x8DEF;&#x7531;&#x7BA1;&#x7406;&#x589E;&#x52A0;&#x4E00;&#x4E2A;&#x8DEF;&#x7531;&#x5730;&#x5740;<code>src/js/conf/home/router/index.js</code></p>
<pre><code>{
path: &apos;/test&apos;, // &#x8DEF;&#x7531;&#x5730;&#x5740;
name: &apos;test&apos;, // &#x522B;&#x540D;
component: resolve =&gt; require([&apos;../pages/test/index&apos;], resolve), // &#x8DEF;&#x7531;&#x5BF9;&#x5E94;&#x7EC4;&#x4EF6;&#x5165;&#x53E3;&#x6587;&#x4EF6;
meta: {
title: `${i18n.$t(&apos;test&apos;)} - EasyScheduler` // title &#x663E;&#x793A;
}
},
</code></pre><p>(2) &#x5728;<code>src/js/conf/home/pages</code> &#x5EFA;&#x4E00;&#x4E2A; <code>test</code> &#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x5728;&#x6587;&#x4EF6;&#x5939;&#x91CC;&#x5EFA;&#x4E00;&#x4E2A;<code>index.vue</code>&#x5165;&#x53E3;&#x6587;&#x4EF6;&#x3002;</p>
<pre><code>&#x8FD9;&#x6837;&#x5C31;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x8BBF;&#x95EE; `http://localhost:8888/#/test`
</code></pre><h5 id="4&#x589E;&#x52A0;&#x9884;&#x7F6E;&#x90AE;&#x7BB1;">4.&#x589E;&#x52A0;&#x9884;&#x7F6E;&#x90AE;&#x7BB1;</h5>
<p>&#x627E;&#x5230;<code>src/lib/localData/email.js</code>&#x542F;&#x52A8;&#x548C;&#x5B9A;&#x65F6;&#x90AE;&#x7BB1;&#x5730;&#x5740;&#x8F93;&#x5165;&#x53EF;&#x4EE5;&#x81EA;&#x52A8;&#x4E0B;&#x62C9;&#x5339;&#x914D;&#x3002;</p>
<pre><code>export default [&quot;test@analysys.com.cn&quot;,&quot;test1@analysys.com.cn&quot;,&quot;test3@analysys.com.cn&quot;]
</code></pre><h5 id="5&#x6743;&#x9650;&#x7BA1;&#x7406;&#x53CA;disabled&#x72B6;&#x6001;&#x5904;&#x7406;">5.&#x6743;&#x9650;&#x7BA1;&#x7406;&#x53CA;disabled&#x72B6;&#x6001;&#x5904;&#x7406;</h5>
<p>&#x6743;&#x9650;&#x6839;&#x636E;&#x540E;&#x7AEF;&#x63A5;&#x53E3;<code>getUserInfo</code>&#x63A5;&#x53E3;&#x7ED9;&#x51FA;<code>userType: &quot;ADMIN_USER/GENERAL_USER&quot;</code>&#x6743;&#x9650;&#x63A7;&#x5236;&#x9875;&#x9762;&#x64CD;&#x4F5C;&#x6309;&#x94AE;&#x662F;&#x5426;<code>disabled</code></p>
<p>&#x5177;&#x4F53;&#x64CD;&#x4F5C;&#xFF1A;<code>src/js/module/permissions/index.js</code></p>
<p>disabled&#x5904;&#x7406;&#xFF1A;<code>src/js/module/mixin/disabledState.js</code></p>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
<a href="frontend-deploy.html#问题" class="navigation navigation-prev " aria-label="Previous page: 问题">
<i class="fa fa-angle-left"></i>
</a>
<a href="frontend-development.html#系统功能模块" class="navigation navigation-next " aria-label="Next page: 系统功能模块">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"项目目录结构","level":"1.2.6","depth":2,"next":{"title":"系统功能模块","level":"1.2.7","depth":2,"anchor":"#系统功能模块","path":"frontend-development.md","ref":"frontend-development.md#系统功能模块","articles":[]},"previous":{"title":"问题","level":"1.2.5","depth":2,"anchor":"#问题","path":"frontend-deploy.md","ref":"frontend-deploy.md#问题","articles":[]},"dir":"ltr"},"config":{"plugins":["expandable-chapters","insert-logo-link"],"styles":{"website":"./styles/website.css"},"pluginsConfig":{"insert-logo-link":{"src":"../images/logo.png","url":"/"},"expandable-chapters":{},"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"YIGUAN","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"调度系统-EasyScheduler","language":"zh-hans","gitbook":"3.2.3","description":"调度系统"},"file":{"path":"frontend-development.md","mtime":"2019-03-27T10:41:58.990Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-03-28T11:15:13.750Z"},"basePath":".","book":{"language":""}});
});
</script>
</div>
<script src="gitbook/gitbook.js"></script>
<script src="gitbook/theme.js"></script>
<script src="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
<script src="gitbook/gitbook-plugin-insert-logo-link/plugin.js"></script>
<script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
<script src="gitbook/gitbook-plugin-search/search.js"></script>
<script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
<script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
<script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
<script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>

0
docs/gitbook/fonts/fontawesome/FontAwesome.otf → docs/zh_CN/_book/gitbook/fonts/fontawesome/FontAwesome.otf

0
docs/gitbook/fonts/fontawesome/fontawesome-webfont.eot → docs/zh_CN/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot

0
docs/gitbook/fonts/fontawesome/fontawesome-webfont.svg → docs/zh_CN/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg

Before

Width:  |  Height:  |  Size: 382 KiB

After

Width:  |  Height:  |  Size: 382 KiB

0
docs/gitbook/fonts/fontawesome/fontawesome-webfont.ttf → docs/zh_CN/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf

0
docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff → docs/zh_CN/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff

0
docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 → docs/zh_CN/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2

0
docs/gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css → docs/zh_CN/_book/gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css

0
docs/gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js → docs/zh_CN/_book/gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js

0
docs/gitbook/gitbook-plugin-fontsettings/fontsettings.js → docs/zh_CN/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js

0
docs/gitbook/gitbook-plugin-fontsettings/website.css → docs/zh_CN/_book/gitbook/gitbook-plugin-fontsettings/website.css

0
docs/gitbook/gitbook-plugin-highlight/ebook.css → docs/zh_CN/_book/gitbook/gitbook-plugin-highlight/ebook.css

0
docs/gitbook/gitbook-plugin-highlight/website.css → docs/zh_CN/_book/gitbook/gitbook-plugin-highlight/website.css

0
docs/gitbook/gitbook-plugin-insert-logo-link/plugin.css → docs/zh_CN/_book/gitbook/gitbook-plugin-insert-logo-link/plugin.css

0
docs/gitbook/gitbook-plugin-insert-logo-link/plugin.js → docs/zh_CN/_book/gitbook/gitbook-plugin-insert-logo-link/plugin.js

0
docs/gitbook/gitbook-plugin-lunr/lunr.min.js → docs/zh_CN/_book/gitbook/gitbook-plugin-lunr/lunr.min.js vendored

0
docs/gitbook/gitbook-plugin-lunr/search-lunr.js → docs/zh_CN/_book/gitbook/gitbook-plugin-lunr/search-lunr.js

0
docs/gitbook/gitbook-plugin-search/lunr.min.js → docs/zh_CN/_book/gitbook/gitbook-plugin-search/lunr.min.js vendored

0
docs/gitbook/gitbook-plugin-search/search-engine.js → docs/zh_CN/_book/gitbook/gitbook-plugin-search/search-engine.js

0
docs/gitbook/gitbook-plugin-search/search.css → docs/zh_CN/_book/gitbook/gitbook-plugin-search/search.css

0
docs/gitbook/gitbook-plugin-search/search.js → docs/zh_CN/_book/gitbook/gitbook-plugin-search/search.js

0
docs/gitbook/gitbook-plugin-sharing/buttons.js → docs/zh_CN/_book/gitbook/gitbook-plugin-sharing/buttons.js

4
docs/zh_CN/_book/gitbook/gitbook.js

File diff suppressed because one or more lines are too long

0
docs/gitbook/images/apple-touch-icon-precomposed-152.png → docs/zh_CN/_book/gitbook/images/apple-touch-icon-precomposed-152.png

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

0
docs/gitbook/images/favicon.ico → docs/zh_CN/_book/gitbook/images/favicon.ico

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

0
docs/gitbook/style.css → docs/zh_CN/_book/gitbook/style.css

4
docs/zh_CN/_book/gitbook/theme.js

File diff suppressed because one or more lines are too long

0
docs/images/mal_5.png → docs/zh_CN/_book/images/addtenant.png

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
docs/zh_CN/_book/images/architecture.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

0
docs/images/mal_8.png → docs/zh_CN/_book/images/auth_project.png

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

0
docs/images/mal_7.png → docs/zh_CN/_book/images/auth_user.png

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

0
docs/images/mal_44.png → docs/zh_CN/_book/images/complement_data.png

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

BIN
docs/zh_CN/_book/images/dag_examples_cn.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
docs/zh_CN/_book/images/dag_examples_en.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

0
docs/images/esr_4.png → docs/zh_CN/_book/images/decentralization.png

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

0
docs/images/mal_25.png → docs/zh_CN/_book/images/definition_create.png

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

0
docs/images/mal_42.png → docs/zh_CN/_book/images/definition_edit.png

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

0
docs/images/mal_41.png → docs/zh_CN/_book/images/definition_list.png

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

0
docs/images/mal_t_1.jpg → docs/zh_CN/_book/images/dependent_1.jpg

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

0
docs/images/mal_t_2.jpg → docs/zh_CN/_book/images/dependent_2.jpg

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

BIN
docs/zh_CN/_book/images/dependent_edit.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
docs/zh_CN/_book/images/dependent_edit2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
docs/zh_CN/_book/images/dependent_edit3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
docs/zh_CN/_book/images/dependent_edit4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
docs/zh_CN/_book/images/devp_1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

0
docs/images/esr_5.png → docs/zh_CN/_book/images/distributed_lock.png

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 81 KiB

0
docs/images/esr_6.png → docs/zh_CN/_book/images/distributed_lock_procss.png

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

0
docs/images/esr_8.png → docs/zh_CN/_book/images/fault-tolerant.png

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 84 KiB

0
docs/images/esr_9.png → docs/zh_CN/_book/images/fault-tolerant_master.png

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save