NOTE

2.4 如何设计配置中心

1. 什么是配置中心 用来统一管理项目中所有配置的系统 2. 为什么需要配置中心 传统的配置是放在一个配置文件中,跟代码一起发布,这种每次修改了配置都要重新发布服务 而配置中心则是把配置存储在独立的配置服务器上,用户通过管理界面配置和调整服务配置,具体服务通过定期拉(Scheduled Pull)的

Software Architecture & Engineering创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 什么是配置中心

用来统一管理项目中所有配置的系统

2. 为什么需要配置中心

传统的配置是放在一个配置文件中,跟代码一起发布,这种每次修改了配置都要重新发布服务 而配置中心则是把配置存储在独立的配置服务器上,用户通过管理界面配置和调整服务配置,具体服务通过定期拉(Scheduled Pull)的方式或者服务器推(Server-side Push)的方式更新动态配置。

3. 如何实现配置中心

3.1. 数据存储在哪

3.2. 配置更新如何通知客户端

  • push:实时性最高,但是需要应用与配置中心保持长连接。复杂性会高一些,特别是负载均衡这块。
  • poll:实时性相对差一些,如果不做增量更新的话对配置中心也会造成不必要的压力。不过实现会简单很多

3.3. 如何找到配置服务

3.4. 如何提高性能

3.5. 如何灰度发布

  • 把配置项发布到某台机器看看效果,再决定全量或者回滚
    • 配置项增加一个host属性,表示这个配置项只“发布”给某些IP。
    • 定义一个优先级,客户端优先加载本地配置文件,这样如果某些机器上的应用需要特殊配置,那么可以采用老的方式上去修改其本地配置文件。

4. 配置中心组件

4.1. 阿波罗

Apollo.md(原链接已失效)

4.2. 七彩石

4.2.1. 流程图

  • admin:配置更新到数据库后,写入通知到zookeeper
  • config:zookeeper通知配置服务,配置服务读取数据库获取最新配置,更新到缓存中

配置中心

4.2.2. 数据库设计

CREATE TABLE `tb_app_gray_rule` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `gray_rule_type_id` int(11) NOT NULL DEFAULT 0 COMMENT '灰度规则类型ID',
  `app_id` varchar(128) NOT NULL DEFAULT '' COMMENT '项目ID',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`gray_rule_type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='项目灰度规则表';



CREATE TABLE `tb_app_info` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `app_id` varchar(256) NOT NULL DEFAULT '' COMMENT '项目ID, 唯一',
  `app_name` varchar(512) NOT NULL DEFAULT '' COMMENT '项目名称',
  `project_managers` varchar(500) NOT NULL DEFAULT '' COMMENT '负责人',
  `dept` varchar(64) NOT NULL DEFAULT '' COMMENT '部门',
  `description` varchar(500) NOT NULL DEFAULT '' COMMENT '项目描述',
  `creator` varchar(128) NOT NULL DEFAULT '' COMMENT '创建人',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `is_delete` tinyint(4) NOT NULL DEFAULT '1' COMMENT '1: 有效, 2: 已删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_name` (`app_name`)
) ENGINE=InnoDB AUTO_INCREMENT=137 DEFAULT CHARSET=utf8 COMMENT='项目信息表';

CREATE TABLE `tb_app_white_list` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `white_list_type_id` int(11) NOT NULL DEFAULT 0 COMMENT '白名单类型ID',
  `app_id` varchar(128) NOT NULL DEFAULT '' COMMENT '项目ID',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`white_list_type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='项目白名单表';

CREATE TABLE `tb_auto_group_map` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `group_rule_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组规则ID',
  `ret_value` int(11) NOT NULL DEFAULT '0' COMMENT '返回值',
  `group_name` varchar(256) NOT NULL  DEFAULT '' COMMENT '分组名',
  `app_id` varchar(128) NOT NULL DEFAULT '' COMMENT '项目ID',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='自动分组规则返回值映射表';

CREATE TABLE `tb_auto_group_ret_value` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `ret_value` int(11) NOT NULL DEFAULT '0' COMMENT '返回值',
  `app_id` varchar(128) NOT NULL DEFAULT '' COMMENT '项目ID',
  PRIMARY KEY (`id`),
  KEY `RET_VALUE_APP_IDX` (`app_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='自动分组返回值表';

CREATE TABLE `tb_auto_group_rule` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `app_id` varchar(128) NOT NULL DEFAULT '' COMMENT '项目ID',
  `group_prefix` varchar(2048) NOT NULL COMMENT '分组前缀',
  `name` varchar(2048) NOT NULL DEFAULT '' COMMENT '规则名',
  `auto_rule_type_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组规则类型ID',
  `status` int(11) NOT NULL DEFAULT '0' COMMENT '状态, 1:有效; 2:无效',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `GROUP_APP_IDX` (`app_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='自动分组规则表';

CREATE TABLE `tb_auto_group_rule_type` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `client_name` varchar(64) NOT NULL DEFAULT '' COMMENT '客户标识名',
  `name` varchar(64) NOT NULL DEFAULT '' COMMENT '规则类型中文名',
  `en_name` varchar(64) NOT NULL DEFAULT '' COMMENT '规则类型英文名',
  `app_id` varchar(128) NOT NULL DEFAULT '' COMMENT '项目ID',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`en_name`,`client_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='自动分组规则类型表';

CREATE TABLE `tb_client_log_history` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `client_name` varchar(64) NOT NULL DEFAULT '' COMMENT '客户端标识名',
  `client_value` varchar(64) NOT NULL DEFAULT '' COMMENT '客户端标识值',
  `version_name` varchar(128) NOT NULL DEFAULT '' COMMENT '版本名称',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  `group_name` varchar(256) NOT NULL DEFAULT '' COMMENT '分组名',
  `app_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'AppID',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`group_name`,`client_name`,`client_value`,`version_name`)
) ENGINE=InnoDB AUTO_INCREMENT=284944 DEFAULT CHARSET=utf8 COMMENT='客户端历史列表';

CREATE TABLE `tb_client_log_lastest` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `client_name` varchar(64) NOT NULL DEFAULT '' COMMENT '客户端标识名',
  `client_value` varchar(64) NOT NULL DEFAULT '' COMMENT '客户端标识值',
  `version_name` varchar(128) NOT NULL DEFAULT '' COMMENT '版本名称',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  `group_name` varchar(256) NOT NULL DEFAULT '' COMMENT '分组名',
  `app_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'AppID',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`group_name`,`client_name`,`client_value`)
) ENGINE=InnoDB AUTO_INCREMENT=284876 DEFAULT CHARSET=utf8 COMMENT='客户端列表最新版';

CREATE TABLE `tb_config` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `ckey` varchar(256) NOT NULL COMMENT '配置key',
  `cvalue` mediumtext NOT NULL COMMENT '配置Value',
  `value_type` int(11) NOT NULL COMMENT 'Value类型(1-NUMBER;2-STRING;3-TEXT;4-JSON;5-XML;6-FILE)',
  `check_rule_id` int(11) NOT NULL DEFAULT '0' COMMENT '数据类型校验ID',
  `description` varchar(2048) NOT NULL DEFAULT '' COMMENT '配置描述',
  `version_id` int(11) NOT NULL DEFAULT '0' COMMENT '版本ID',
  `value_md5` varchar(256) NOT NULL COMMENT '配置value的md5',
  `from_group_id` int(11) NOT NULL DEFAULT '0' COMMENT '配置key来源分组',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID',
  `app_id` varchar(256) NOT NULL DEFAULT '' COMMENT '项目ID',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `status` int(11) NOT NULL DEFAULT '0' COMMENT '状态,0:已发布,1:修改,2:新增,3:删除,4:发布中',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`group_id`,`version_id`,`ckey`)
) ENGINE=InnoDB AUTO_INCREMENT=2024 DEFAULT CHARSET=utf8 COMMENT='配置表';

CREATE TABLE `tb_config_mid` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `ckey` varchar(256) NOT NULL COMMENT '配置key名称',
  `cvalue` mediumtext NOT NULL COMMENT '配置内容',
  `value_type` int(11) NOT NULL COMMENT 'Value类型(1-NUMBER;2-STRING;3-TEXT;4-JSON;5-XML;6-FILE)',
  `check_rule_id` int(11) NOT NULL DEFAULT '0' COMMENT '数据校验规则id',
  `description` varchar(2048) NOT NULL DEFAULT '' COMMENT '描述',
  `value_md5` varchar(256) NOT NULL DEFAULT '' COMMENT '变化后md5',
  `source_value_md5` varchar(256) NOT NULL DEFAULT '' COMMENT '初始md5',
  `from_group_id` int(11) NOT NULL DEFAULT '0' COMMENT '来源分组id',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID',
  `app_id` varchar(256) NOT NULL DEFAULT '' COMMENT 'AppID',
  `status` int(11) NOT NULL DEFAULT '0' COMMENT '状态,0:已发布,1:修改,2:新增,3:删除,4:发布中',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  `operator` varchar(64) NOT NULL DEFAULT '' COMMENT '操作人',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`group_id`,`ckey`)
) ENGINE=InnoDB AUTO_INCREMENT=1923 DEFAULT CHARSET=utf8 COMMENT='配置中间表';

CREATE TABLE `tb_favorite_app` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `person` varchar(64) NOT NULL COMMENT '收藏人',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP  ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `FAVOR_PERSON_IDX` (`person`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='项目收藏表';

CREATE TABLE `tb_gray_rule` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID',
  `task_id` int(11) NOT NULL DEFAULT '0' COMMENT '发布任务ID',
  `gray_rule_type_id` int(11) NOT NULL DEFAULT '0' COMMENT '灰度规则类型ID',
  `content` text NOT NULL COMMENT '灰度规则内容',
  `status` int(11) NOT NULL DEFAULT '1' COMMENT '状态, 1:有效, 2:无效',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`group_id`,`task_id`),
  UNIQUE KEY `app_id_2` (`app_id`,`group_id`,`task_id`)
) ENGINE=InnoDB AUTO_INCREMENT=183 DEFAULT CHARSET=utf8 COMMENT='灰度规则表';

CREATE TABLE `tb_gray_rule_mid` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `group_id` int(11) NOT NULL COMMENT '分组ID',
  `task_id` int(11) NOT NULL DEFAULT '0' COMMENT '发布任务ID',
  `gray_rule_type_id` int(11) NOT NULL DEFAULT '0' COMMENT '灰度规则类型ID',
  `content` text NOT NULL COMMENT '灰度规则内容',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`group_id`,`task_id`)
) ENGINE=InnoDB AUTO_INCREMENT=388 DEFAULT CHARSET=utf8 COMMENT='灰度规则中间表';

CREATE TABLE `tb_gray_rule_status` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID',
  `task_id` int(11) NOT NULL DEFAULT '0' COMMENT '发布任务ID',
  `gray_rule_id` int(11) NOT NULL DEFAULT '0' COMMENT '灰度规则ID(0:表示修改中, >0:表示灰度规则已下发)',
  `op_type` tinyint(4) NOT NULL COMMENT '操作类型(1:新增, 2:修改)',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`group_id`,`task_id`)
) ENGINE=InnoDB AUTO_INCREMENT=259 DEFAULT CHARSET=utf8 COMMENT='灰度规则状态表';

CREATE TABLE `tb_gray_rule_type` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `client_name` varchar(64) NOT NULL DEFAULT '' COMMENT '客户端标识名',
  `name` varchar(64) NOT NULL DEFAULT '' COMMENT '灰度规则类型中文名',
  `en_name` varchar(64) NOT NULL DEFAULT '' COMMENT '灰度规则类型英文名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='灰度规则类型表';

CREATE TABLE `tb_group` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `name` varchar(256) NOT NULL COMMENT '分组名',
  `description` varchar(500) NOT NULL DEFAULT '' COMMENT '分组描述',
  `type` int(11) NOT NULL DEFAULT '0' COMMENT '分组类型(1:私有, 2:公有)',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `status` int(11) NOT NULL DEFAULT '0' COMMENT '状态, 1:有效, 2:无效',
  `white_list_status` int(11) NOT NULL DEFAULT '2' COMMENT '白名单状态, 1:开启, 2:关闭',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`name`,`status`)
) ENGINE=InnoDB AUTO_INCREMENT=216 DEFAULT CHARSET=utf8 COMMENT='分组信息表';

CREATE TABLE `tb_group_lastest_version` (
  `app_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'AppID',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID',
  `group_name` varchar(512) NOT NULL DEFAULT '' COMMENT '分组名称',
  `main_version` varchar(128) NOT NULL DEFAULT '' COMMENT '主versionID',
  `prev_main_version` varchar(128) NOT NULL DEFAULT '' COMMENT '上一主versionID',
  `gray_version` varchar(128) NOT NULL DEFAULT '' COMMENT '灰度versionID',
  `lastest_event_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '最新任务事件ID',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `main_version_name` varchar(128) NOT NULL COMMENT '最新主版本名',
  `gray_version_name` varchar(128) NOT NULL COMMENT '最新灰度版本名',
  UNIQUE KEY `app_id` (`app_id`,`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='最新配置版本表';

CREATE TABLE `tb_group_relation` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID',
  `from_group_id` int(11) NOT NULL DEFAULT '0' COMMENT '来源分组ID',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `from_version_id` int(11) NOT NULL DEFAULT '0' COMMENT '来源版本ID',
  PRIMARY KEY (`id`),
  KEY `RELATION_GROUP_IDX` (`app_id`,`group_id`),
  KEY `RELATION_FROM_GROUP_IDX` (`app_id`,`from_group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 COMMENT='分组关联表';

CREATE TABLE `tb_group_version_status` (
  `app_id` varchar(128) NOT NULL DEFAULT '' COMMENT '项目ID',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID',
  `version_id` int(11) NOT NULL DEFAULT '0' COMMENT '版本ID(0:表示修改中, >0:版本已发布)',
  `prev_version_id` int(11) NOT NULL DEFAULT '0' COMMENT '上一个版本ID',
  `status` int(11) NOT NULL DEFAULT '1' COMMENT '版本状态,(1:版本可修改, 2:版本发布中不可修改)',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  UNIQUE KEY `app_id` (`app_id`,`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='分组版本状态表';

CREATE TABLE `tb_release_task` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `app_id` varchar(128) NOT NULL COMMNET '项目ID',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID',
  `group_name` varchar(512) NOT NULL DEFAULT '' COMMENT '分组名称',
  `version_name` varchar(128) NOT NULL DEFAULT '' COMMENT '版本名称',
  `apply_user` varchar(128) NOT NULL DEFAULT '' COMMENT '发布任务申请者',
  `status` int(11) NOT NULL DEFAULT '0' COMMENT '任务状态,(1:等待审批,2:审批拒绝,3:待发布,4:已全量发布,5:已灰度发布,6:回滚,7:任务已完成)',
  `reject_reason` text COMMENT '任务拒绝理由',
  `approval_user` varchar(128) NOT NULL DEFAULT '' COMMENT '审批人',
  `description` varchar(2048) NOT NULL DEFAULT '' COMMENT '任务描述',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `version_id` int(11) NOT NULL DEFAULT '0' COMMENT '当前版本号',
  `prev_version_id` int(11) NOT NULL DEFAULT '0' COMMENT '上一版本号',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `TASK_APP_GROUP_NAME_IDX` (`app_id`,`group_id`,`group_name`)
) ENGINE=InnoDB AUTO_INCREMENT=304 DEFAULT CHARSET=utf8 COMMENT='发布任务信息表';

CREATE TABLE `tb_release_task_config` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `ckey` varchar(256) NOT NULL COMMENT '配置key',
  `cvalue`  mediumtext NOT NULL COMMENT '配置value',
  `value_type` int(11) NOT NULL DEFAULT '0' COMMENT 'Value类型(1-NUMBER;2-STRING;3-TEXT;4-JSON;5-XML;6-FILE)',
  `description` varchar(2048) NOT NULL DEFAULT '' COMMENT '配置描述',
  `task_id` int(11) NOT NULL DEFAULT '0' COMMENT '任务ID',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `status` int(11) NOT NULL DEFAULT '0' COMMENT '状态,0:已发布,1:修改,2:新增,3:删除,4:发布中',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`task_id`,`ckey`)
) ENGINE=InnoDB AUTO_INCREMENT=1662 DEFAULT CHARSET=utf8 COMMENT='任务配置key/value中间表';

CREATE TABLE `tb_role` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `name` varchar(128) NOT NULL COMMENT '角色名称',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `persons` varchar(500) NOT NULL DEFAULT '' COMMENT '人员列表',
  `object` varchar(500) NOT NULL DEFAULT '' COMMENT '权限分组名',
  `permission_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '权限类型,(1:查看, 2:发布)',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `ROLE_APP_PERSONS_IDX` (`app_id`,`persons`)
) ENGINE=InnoDB AUTO_INCREMENT=92 DEFAULT CHARSET=utf8 COMMENT='角色表';

CREATE TABLE `tb_task_event` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `event_type` varchar(64) NOT NULL DEFAULT '' COMMENT '任务类型',
  `task_id` int(11) NOT NULL DEFAULT '0' COMMENT '任务ID',
  `app_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'AppID',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID',
  `src_version_name` varchar(128) NOT NULL DEFAULT '0' COMMENT '源版本名称',
  `dst_version_name` varchar(128) NOT NULL DEFAULT '0' COMMENT '目标版本名称',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `EVENT_APP_GROUP_IDX` (`app_id`,`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1053 DEFAULT CHARSET=utf8 COMMENT='发布任务事件表';

CREATE TABLE `tb_value_check_rule` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `value_type` int(11) NOT NULL COMMENT 'Value类型(1-NUMBER;2-STRING;3-TEXT;4-JSON;5-XML;6-FILE)',
  `name` varchar(64) NOT NULL DEFAULT '' COMMENT '数据校验规则名',
  `content` varchar(64) NOT NULL DEFAULT '' COMMENT '数据校验规则内容',
  `check_type` int(11) NOT NULL DEFAULT '0' COMMENT '校验规则类型(1:表达式, 2:远程url)',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`value_type`,`name`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='配置value校验规则表';

CREATE TABLE `tb_version_info` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `name` varchar(128) NOT NULL COMMENT '版本名称',
  `description` varchar(2048) NOT NULL DEFAULT '' COMMENT '版本描述',
  `creator` varchar(64) NOT NULL DEFAULT '' COMMENT '版本创建者',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `version_uuid` varchar(128) NOT NULL DEFAULT '' COMMENT '版本UUID',
  `status` int(11) NOT NULL DEFAULT '1' COMMENT '状态,(1:有效, 2:无效)',
  PRIMARY KEY (`id`),
  KEY `VERSION_APP_GROUP_IDX` (`app_id`,`group_id`),
  KEY `VERSION_INFO_UUID` (`version_uuid`)
) ENGINE=InnoDB AUTO_INCREMENT=399 DEFAULT CHARSET=utf8 COMMENT='版本信息表';

CREATE TABLE `tb_version_info_mid` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `name` varchar(128) NOT NULL COMMENT '版本名',
  `description` varchar(2048) NOT NULL DEFAULT '' COMMENT '版本描述',
  `creator` varchar(64) NOT NULL DEFAULT '' COMMENT '创建者',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组id',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `version_uuid` varchar(128) NOT NULL DEFAULT '' COMMENT '版本UUID',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`group_id`,`name`)
) ENGINE=InnoDB AUTO_INCREMENT=333 DEFAULT CHARSET=utf8 COMMENT='版本信息中间表';

CREATE TABLE `tb_version_log` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `version_name` varchar(128) NOT NULL COMMENT '版本名称',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `group_name` varchar(2048) NOT NULL DEFAULT '' COMMENT '分组名称',
  `ckey` varchar(256) NOT NULL COMMENT '配置key',
  `cvalue` mediumtext  NOT NULL COMMENT '配置value',
  `op_type` int(11) NOT NULL DEFAULT '0' COMMENT '操作类型(1:新增, 2:修改)',
  `operator` varchar(2048) NOT NULL DEFAULT '' COMMENT '操作这',
  `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `version_uuid` varchar(128) NOT NULL DEFAULT '' COMMENT '版本UUID',
  `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID',
  PRIMARY KEY (`id`),
  KEY `VERSION_LOG_APP_IDX` (`app_id`,`version_name`,`ckey`)
) ENGINE=InnoDB AUTO_INCREMENT=1096 DEFAULT CHARSET=utf8 COMMENT='版本更新key/value流水';

CREATE TABLE `tb_white_list` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `app_id` varchar(128) NOT NULL COMMENT '项目ID',
  `group_id` int(11) NOT NULL COMMENT '分组ID',
  `white_list_type_id` int(11) NOT NULL COMMENT '白名单类型ID',
  `content` text NOT NULL COMMENT '白名单内容',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `app_id` (`app_id`,`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8 COMMENT='白名单表';

CREATE TABLE `tb_white_list_type` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `client_name` varchar(64) NOT NULL DEFAULT '' COMMENT '客户标识名',
  `name` varchar(64) NOT NULL DEFAULT '' COMMENT '类型中文名',
  `en_name` varchar(64) NOT NULL DEFAULT '' COMMENT '类型英文名',
  PRIMARY KEY (`id`),
  UNIQUE KEY `en_name` (`en_name`,`client_name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='白名单类型表';

5. 参考