# scheduling_system **Repository Path**: Adlereden/scheduling_system ## Basic Information - **Project Name**: scheduling_system - **Description**: 发布调度中心 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-04 - **Last Updated**: 2026-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 调度系统设计 ## 设计图 ![](images/arch.png) 功能描述: 1、统一调度平台发起发布 2、调用网关按钮切换流量 (网关原来有流量切换按钮) 3、k8s/dvm提供接口地址,调度中心json形式传参给k8s/dvm 是否发布蓝绿 用户名密码: admin/zxc123456 ## 数据库 数据结构原型: ```json { "switch":"auto/manual", "auto": { "blue": ["2020-02-15 11:52:09","2020-02-15 11:52:16"], "green": ["2020-02-15 11:52:09","2020-02-15 11:52:16"] }, "manual": "blue/green" } ``` 表`Config` | 字段 | 类型 | 描述 | | ------ | ------ | ------------------------------------------------------------ | | status | 字符串 | 取值on/off | | switch | 字符串 | 取值auto/manual | | auto | 字符串 | {"blue": ["2020-02-15 11:52:09","2020-02-15 11:52:16"],"green": ["2020-02-15 11:52:09","2020-02-15 11:52:16"]} | | auto_flow | 字符串 | 取值blue/green | | manual | 字符串 | 取值blue/green | 其中auto里表示蓝绿的有效时间范围。 ## 接口 #### 状态获取 自动时返回值 ``` { "switch": "auto",//自动和手动 对应的value(auto/manual) auto自动 manual手动 "status": "on",//当前是否可以发布 on可以发布 off不可发布 "flow": "blue/green", //blue蓝组发布 green绿组发布 "time_range": { //当前自动类型时,根据时间范围自动切换蓝绿发布; 如果手动模式则不显示发布时间范围,只显示可发布蓝组或绿组 "blue": { "beginDate":"2020-02-15 13:00:00 ", // 蓝组发布开启时间 这块用{} 数组返回 "endDate":"2020-02-15 12:59:00 " // 蓝组发布结束时间 }, "green": { "beginDate":"2020-02-15 13:00:00 ", "endDate":"2020-02-15 14:59:00 " } } } ``` 人工返回值 ``` { "switch": "manual",//手动 "status": "on",//当前是否可以发布 "flow": "blue/green/domain/blue_green", // blue蓝发布,green绿组发布,注意:domain单个项目紧急发布,则发布系统可以直接调domainID切换切换网关蓝绿换流量,单个项目发布; blue_grenl流量恢复,则status:off不可发布 "time_range": {" "} //当前手动类型时,发布不受时间限制。蓝组发布由管理员控制 } ``` ## 网关切换流量接口全量切换 全局流量配置 请求 url: /api/gateway/manager/updateGlobalDistribute method:POST params: keyvalueuserName操作用户名,示例:san.li body: { "ruleSwitch":"off", // 开关:on-打开;off-关闭 "greenWeight":0, // 绿组流量比例,值为0-100整数,蓝绿组流量加起来需等于100 "blueWeight":100, // 蓝组流量比例,值为0-100整数,蓝绿组流量加起来需等于100 "domainType":0 // 内外网标识:0-内网;1-公网,可以不传,表示内、外网同时更新 } 响应 body: { "success": true, "resultMap": {} } ## DVM 接口,接收调度中心推送的规则接口 接口名称:获取规则 接口路径:/apis/rules/getControlRules 测试环境接口:http://10.248.224.131:8006/apis/rules/getControlRules 需要参数: { "switch":"auto", "status":"on", "flow":"blue", "time_range":{ "blue":{ "beginDate":"2020-02-15 13:00:00", "endDate":"2020-02-15 12:59:00" } } } 返回结果: 1. 成功的state是true,否则是false - { "state": true, "data": null } ## 流量切换动作 在`app/action.py`里预留了接口,当手动切换蓝绿或者自动切换时会触发这个动作: `action.py` ``` import logging logger = logging.getLogger('auto_switch') def run(flow): """ 取值: blue、green、blue_green """ print(flow) logger.info('switch to %s', flow) ``` 根据要求可以做相关操作. ## 部署说明 1. 下面都是假设安装的是python3.6环境 2. 确保目录`/opt`存在,将代码放到这个目录 3. `cd /opt/scheduling_system` 4. 确保supervisor 配置文件里引用的是这个: `files = /etc/supervisor/conf.d/*.conf` 5. `pip3.6 install -r requirement.txt` 6. `python3.6 service.py restart`启动服务 注意:现在默认是启动的8080,如需修改,修改service.py里`SERVER_TEMPLATE`里的端口配置. admin/fvbsrtg@34!@ad pip install meld3 --upgrade