# 数据中台-架构设计 ## 一、引言 软件的概要设计又称为软件系统(程序系统)的设计,本文档应说明软件系统即程序系统设计的总体考虑,包括系统的基本处理流程、软件系统的组织结构、模块划分、功能分配、数据结构、接口、运行、出错处理和系统维护等方面的设计,为详细设计提供基础。 ## 二、业务设计 ### 1、统一数据标准管理 主要负责公司层面的持久化数据的定义。参考“数据架构”梳理中的数据字典excel、数据类型,设计数据统一标准的7类高级数据类型,七种高级数据类型分别为:字典、知识库、对象、关系、时序、图数据以及多维数据类型。 并在此基础上设计的统一数据模型进行管理: 1、包括模型的统一数据标准文件、数据结构、业务规则的管理, 2、包括数据模型、数据融合关系、数据模型映射、数据版本、数据业务含义的管理, 3、包括在数据模型基础上的实现代码,进行数据生成管理。 ![](./image/image-20200830112919069.png) 在数据中台的搭建中,采用统一数据标准管理,可以方便地规范数据资源,并向外提供统一的数据服务。管理行业标准、企业标准,对企业业务系统中涉及到的数据标准及其数据字典进行管理,包含数据标准的维护、查询、数据合理性和逻辑性核检。 统一数据标准文件可以批量导入数据中台,作为统一数据标准。 #### 1.1数据类型 编写统一数据标准文件,用于管理七种数据类型的数据编码,对所有数据编码进行统一管理,是数据中台集成的基础,主要包含七种高级数据类型:字典、知识库、对象、关系、时序、图数据以及多维数据。 #### 1.2命名规范 制定数据标准的库、表、字段等的命名规范,确保设计的正式和统一。 **1)数据库命名规范** ​ 采用26个英文字母 (区分大小写) 和0-9的自然数 (一般不需要) 加上下划线 ‘_’ 组成,命名简单明确 (Student_Union),多个单词用下划线 ‘_’ 分隔,一个项目一个数据库,多个项目慎用同一个数据库 **2)表命名规范** - 采用26字母和0-9的自然数(一般不使用)加上下互相 ‘_’ 组成,命名简洁明确,多个单词用下划线 ‘_’ 隔开 - 全部小写命名,避免出现大写 - 禁止使用关键字,如:select、table、show 等等 - 表名称不要取得太长(一般不超过三个英文单词) - 表的名称一般使用名词或者动宾短语 - 也要注意单词形式,列如:使用 user ,而不是 users(因为用户表是一个的而不是多个) - 表必须填写描述信息(建表时可以用注释详细写出表细节的作用,不同数据库的注释都不一样) **3)字段命名规范** - 采用26字母和0-9的自然数(一般不使用)加上下互相 ‘_’ 组成,命名简洁明确,多个单词用下划线 ‘_’ 隔开 - 全部小写命名,避免出现大写 - 字段必须填写描述信息 - 禁止使用数据库关键字 - 字段名称一般采用名词或动宾短语 - 采用字段的名字必须是易于理解,一般不超过三个英文单词 - 在命名表的列时,不要重复表的名称(如:在 user 表中,出现 user_name 字段) - 字段命名使用完整名称 **4)SQL语言编码规范** - 所有关键字最好大写,如:DELETE、UPDATE、INSERT等等 - 多有函数及其参数中除用户变量以外的部分大写 - 在定义变量时用到的数据类型小写 #### 1.3数据融合 1)主数据只能由一个服务、一个业务模块生成和编辑。 2)涉及主数据的字典编码由数据字典管理员统一定义、管理,研发人员、客户经理禁止做任何修改,产品只提供编码别名配置,不提供编码用户自定义。 3)非主数据的字典编码可以提供用户自定义,但是作为一种平台扩展功能,系统默认提供的编码不能被删除、修改。 4)主数据的编码采用单一代码,只采用代理主键的方式(主数据编码不强制含有业务意义,只具有主键作用,比如 UUID,看情况区分要不要前缀。)所有业务意义和业务规则依赖下的关系都由业务字段定义。 4)时间、空间坐标作为通用统一技术形式,业务上可以互相之间映射融合。 5)主数据的编码规则整个系统一但确定,禁止改变。 #### 1.4数据兼容 **1)主数据兼容** 主数据通过编码规则,在分布式系统下,所有主数据编码不产生冲突。主数据编码规则不变,所有用户、集团、项目的主数据编码不产生冲突。 **2)编码兼容** 数据标准提供一套标准的编码,形成产品统一的编码语义。每个集团自定义编码采用编码映射表管理,提供自定义编码语义、别名语义。 **3)非主数据的数据字典编码** 项目可以自定义扩展。但原则上,新字典编码(非主数据默认字典编码),不提供项目上自定义扩展。 **4)模板、产品知识等数据兼容** 产品默认提供一套标准的模板(包括流程、默认参数值等)、知识等通用业务数据。在建立集团、项目时,提供标准的业务数据,并提供集团、项目自定义。系统升级时,不改变这部分数据。 高级七种数据类型的数据结构完全兼容,条目、数值、内容是不同的。 **5)业务数据兼容** 功能、权限点、版本、报警规则、控制指令等业务数据产品统一定义,客户禁止修改。系统升级时自动兼容。 **6)接口兼容** 产品标准接口兼容。客户自定义接口默认在产品标准接口基础上形成,从而系统尽可能自动兼容。未在产品标准接口上定制的接口,系统采取不兼容方式。 #### 1.5存储原则 1)所有字典存采用MySQL存储。 2)不同用户的数据不做物理隔离,做逻辑隔离。 3)不同业务域数据分库存储,前端服务只能直接读取本业务域下的数据存储,不应跨业务域读取数据库数据。 4)kafka中存储的消息包不区分业务、用户,消息包头文件需要有消息区分,不同的业务划分采用不同的channel。 5)redis缓存中不区分业务、用户,完全由主数据编码规则保障数据不冲突。 6)ES数据也不区分业务、用户,查询时通过字典编码精确过滤掉非本业务、用户的数据。 7)用户扩展、自定义内容都在用户库中存储。每个用户自定义、定制内容采用逻辑隔离的方式存储(每个用户、项目创建一个schema)。所有用户扩展、自定义数据只能在MySQL、Hbase中存储。 8)多个不同版本产品,部署多套时,根据产品情况,数据库采用业务字段或schema方式隔离。(避免搭建很多套数据库实例) 9)Schema的命名方式: a、产品数据随着产品版本变化的产品: “产品ID”+”产品版本”+ “DB schema id” + “ 集团” + “项目” b、产品数据不随着产品版本变化的产品 “产品ID”+ “DB schema id” + “ 集团” + “项目” ### 2、数据流程管理 ![](./image/image-20200830113128572.png) 1)数据存储结构生成:注明表字段、表索引、表的主键规则、Schema。自动生成数据表 2)业务配置生成:根据业务逻辑,设计配置数据表,通过配置数据表的接口生成业务配置规则 3)接口生成:基于业务配置数据,生成业务数据查询接口,如配置了指标项、指标计算规则及要生成的指标计算结果,入参为业务配置id,出参为指标计算结果(多为多条) 4)数据输出 ​ a)数据文件生成:基于接口的出参生成excel文件,每个指标计算结果作为一列, ​ b)页面生成:封装web前端excel文件转化工具,将excel文件转化为Html页面 ### 3、数据结构管理 七大数据类型的数据结构管理,包含字典、知识库、对象、关系、时序、图数据以及多维数据的数据表设计、数据增删改查接口管理。 (图数据的数据结构管理暂不考虑) ### 4、业务规则管理 进行业务规则数据表的设计,及业务规则数据的增删改查接口管理。 ### 5、数据质量管理 数据管理主要是建立数据业务定义、融合、映射和版本管理的 处理模型 ![](./image/image-20200830113202100.png) 数据中台创建新的数据标准,在进行旧数据的迁移和第三方数据的接入时,需要考虑数据的兼容和数据的融合。 1)在做兼容和数据融合的处理时,我们引入数据映射的数据表, 2)将历史数据或者第三方数据与数据映射表建立业务定义的对应关系,主要包含数据表、字段、语义和精度等定义。 3)再数据映射表的数据映射到数据中台标准数据中,完成数据兼容和融合 4)还需在进行数据管理时,对数据的版本进行管理,必要时需要对不同版本的数据进行分表存储。 ## 三、功能设计 ### 1、功能服务架构 ![](./image/image-20200830113215707.png) 本次涉及的服务主要:数据字典、数据存储、数据查询、管理监控、人员组织权限、文件管理、报警中心、资产资料、统一收费管理 #### 1.1基础数据涉及的服务 数据字典、数据存储、数据查询:用于7大基础数据类型的存储和查询 管理监控:在该服务上开发任务调度服务 #### 1.2主数据涉及的服务 数据字典、数据存储、数据查询:为主数据存储和查询的基础服务 人员组织权限:为主数据-人员、组织结构、权限管理的业务服务 文件管理:为主数据-文件(合同等文件)的业务服务 资产资料:为主数据-供应商数据、耗材数据、工具数据的业务服务 统一收费:为主数据-租户数据的业务服务 #### 1.3中控业务涉及的服务 数据字典、数据存储、数据查询:为中控业务数据存储和查询的基础服务,同时支持监测、控制业务,提供物理世界和IOT数据 报警中心:为中控报警业务数据的服务 #### 1.4数据分层 ![](./image/image-20200830113229413.png) #### 1.5数据ER图 ![](./image/image-20200830113240966.png) ### 2、功能清单 | 功能分类 | 功能 | 需求点 | 备注 | | -----------------: | ----------------------- | :----------------------------------------------------------- | ---- | | 统一数据标准 | 字典数据管理 | 1、定义标准字典类型、定义标准字典数据结构、定义自定义字典数据映射结构
2、对字典数据进行增删改查,需提供相关字典数据接口
3、进行字典进行映射兼容管理,通过字典数据映射实现 | | | | 知识库数据管理 | 1、定义标准知识库类型,定义标准知识库数据结构
2、对知识库进行增删改查,需提供相关的知识库数据接口 | | | | 对象数据管理 | 1、对象属性管理,如a、物理世界对象,有对象的名称、编码、信息点等属性
b、业务对象,如报警对象,有报警类型、报警条目属性等
2、对象服务管理,添加业务对象数据结构
3、可对业务对象进行增删改查,需提供相关的业务对象管理接口 | | | | 关系数据管理 | 1、物理世界对象关系管理,描述物理世界对象之间的关系,如空间下的对象、服务空间的系统,主要采用图类型和边类型进行管理,边类型为图类型的补充说明
2、业务对象的关系管理,描述业务对象之间的关系,与工单与报警的关系数据,并提供相关接口 | | | | 图数据管理 | 无相关存储场景,暂不考虑 | | | | 时序数据管理 | 1、时序数据属性管理,定义时序数据的数据结构,主要为IOT数据,IOT采集数据分时序存储,如分精度数据的存储
2、可对时序数据进行增删改查,需提供相关的时序数据接口 | | | | 多维数据管理 | 1、维度管理,如时间维度、空间维度、人的维度、对象的维度、组织的维度等
2、指标管理,如工单、能源、环境等数据指标
3、多维数据结构管理,定义多维数据的数据结构,主要为报表、统计数据
4、对多维数据进行增删改查,需提供相关的多维数据管理接口 | | | | 数据流向管理 | 1、数据字典文件excel生成
2、数据存储结构生成
3、业务配置项生成
4、根据业务配置项,输出接口
5、数据输出,包含数据文件生成和页面生成 | | | 数据质量 | 数据质量管理 | 1、在做兼容和数据融合的处理时,我们引入数据映射的数据表,
2、将历史数据或者第三方数据与数据映射表建立业务定义的对应关系,主要包含数据表、字段、语义和精度等定义。
3、数据映射表的数据映射到数据中台标准数据中,完成数据兼容和融合
4、还需在进行数据管理时,对数据的版本进行管理,必要时需要对不同版本的数据进行分表存储。 | | | 主数据数据结构定义 | 主数据-人员组织结构权限 | 1、定义人员组织管理的数据结构,数据模型包含:
1)集团(多租户)
2)项目
3)数据权限(集团、中心、区域、项目,用于管理项目权限,)
4)部门
5)岗位
6)部门模版
7)岗位模版
8)人员
9)账号
10)应用
11)功能
12)功能权限
2、集团与部门,每个集团下有一个顶级部门与集团对应,创建集团时会同时创建一个部门,部门名称默认与集团名称相同
3、部门与项目,为部门分配项目,只能分配上级部门已分配的项目,可将项目权限进行打包。
4、顶级部门默认配置了集团下的全部项目,新增项目时也同时将项目分配到顶级部门
5、功能权限集,集团与应用关系,描述集团是否开通应用,集团的应用权限及应用下功能权限集合
6、岗位配置功能,描述岗位具备的功能权限
7、人员组织岗位关系,将人员加到某个组织的某个岗位上,则用户具备组织已配置的项目的数据权限,同时具备岗位已配置的功能权限 | | | | 主数据-租户数据 | 1、定义租户信息、租户配置、租户账单信息的数据结构,详见《finein_saas_web统一收费管理》
2、对租户数据进行管理,需提供相关的数据接口 | | | | 主数据-供应商数据 | 1、对供应商数据进行主数据表结构梳理
1)供应商类型表
2)供应商类型扩展字段表
3)供应商表
4)供应商扩展表
5)供应商与供应商类型关系表
2、供应商数据的增删改查接口管理 | | | | 主数据-库存数据 | 1、对库存数据进行主数据表结构梳理
1)系统类型常量表
2)仓库信息表:仓库数据主体表
3)仓库管理员表
4)工具清单表:工具数据主体表
5)工具箱表:工具箱数据主体表
6)工具箱清单表:工具箱清单的清单数据主体表
7)工具箱领用单:工具箱领用单的数据主体表
8)工具箱领用单详情:工具箱领用单内的工具箱详情数据主体表
9)公用工具表:公用工具数据主体表
10)公用工具借用单:公用工具借用单的数据主体表
11)公用工具借用单详情:公用工具借用单内的借用工具详情数据主体表
12)工具操作记录表
13)耗材出库详情表:耗材出库单内的耗材详情数据主体表
14)耗材出库表:耗材出库单的数据主体表
15)耗材入库详情表:耗材入库单内的耗材详情数据主体表
16)耗材入库表:耗材入库单的数据主体表
17)耗材表:耗材数据主体表
18)耗材模板、项目关联表
19)耗材模板表:记录耗材模版主体数据
20)工具转借单:工具转借单的数据主体表
2、库存数据的增删改查接口管理 | | | | 主数据-物理世界数据字典 | 1、物理世界数据字典进行版本升级,对底层存储数据切换为mysql,
2、对信息点编码进行调整,使用驼峰命名
3、调整存储方式和分库分表方案,数据字典部分调整为平台字典单独一个库,集团数据和项目数据按集团进行分库,物理世界部分按集团进行分库,按项目进行分表
4、枚举型信息点修改为引用数据标准化定义的数据
5、提供可行的数据迁移方案 | | | | 主数据-文件数据 | 1、定义文件的数据结构
2、提供文件的上传、下载功能,定义相关接口 | | | 中控业务 | IOT数据-物联网数据 | 1、提供物理世界对象与关系数据结构,供设备对接与写入
2、提供物理世界对象信息点数据结构,以用于IOT数据的写入和存储
3、进行IOT数据质量处理,如分精度计算等
4、提供接口查询服务,可查询IOT数据 | | | | 中控支持-报警系统 | 1、定义报警类型、报警条目数据接口,并提供报警类型与条目的增删改查管理接口
2、报警记录,用于描述一个发生的具体的报警,提供报警新建和查询接口
3、自动点位报警配置数据描述自动触发报警需要满足的类型、分类以及特定条件,以及报警时使用的报警条目
4、对象点位报警配置数据根据自动点位报警配置的类型自动生成,可以修改为开或者关
5、对象点位报警配置数据产生后,在接收到物联网采集数据后,系统自动根据配置的条件判断是否触发报警,如果触发报警则创建一条与配置条目对应的报警记录 | | | | 中控支持-监控配置 | 1、定义监控配置的数据结构、控制指令的数据接口
2、对监控配置数据进行增删改查,需提供相关配置数据管理的数据接口
3、对监控指令数据进行增删改查,需提供相关监控指令数据管理的数据接口 | | | | 中控支持-日志 | 1、定义日志类型的数据结构
2、定义日志的基础字段信息,并可对日志类型进行字段配置
2、对字典数据进行增与查,需提供相关日志的数据接口 | | | 任务调度 | 任务调度系统 | 1、任务配置,用于描述一个具体的任务配置信息
2、调度执行管理
1)读取配置的任务,进行,满足以下条件的任务会被触发:
a)状态为待执行且达到下次执行时间的
b)状态为执行中且达到上次执行的过期时间的
2)任务触发后更新任务的下次执行时间、本次任务的过期时间,
3)根据执行方式的配置来调起相关的服务,同时会将集团编码、应用编码、项目ID、任务编码、调起参数、任务ID等作为参数。
3、执行记录,用于描述一个任务的具体的一次执行过程
1)被调度方根据执行结果和任务ID来更新执行记录
4、任务调度的最小时间间隔是5秒,暂不支持频率要求快于5秒的场景
| | ## 四、总体设计 ### 1、技术选型 | **技术** | **约定** | **备注** | | ------------- | -------- | ------------------------------------------ | | Spark | xx版本 | 计算引擎 | | Hbase | xx版本 | 分布式数据库 | | MySQL | xx版本 | 关系型数据库 | | Redis | xx版本 | 缓存服务 | | ElasticSearch | xx版本 | 搜索引擎ES | | Zookeeper | xx版本 | 分布式共享存储,保证数据中台计算调度一致性 | | HDFS | xx版本 | 分布式文件系统(Hadoop) | | Flume | xx版本 | IOT数据采集的服务 | | Kfaka | xx版本 | 分布式发布订阅消息系统 ,消息中间件 | | rabbitmq | xx版本 | 消息中间件 | ### 2、技术复用 | **功能** | **技术复用** | **备注** | | ---------------------- | ---------------------------- | -------- | | 业务规则配置 技术复用 | 业务流程配置 | | | | 权限配置 | | | | 业务字段配置 | | | 数据接收 技术复用 | DRS数据修复软件 | | | | 通用数据上传工具ems-upload | | | | 通用数据导入工具mysql2hbase | | | | 通用数据分发工具ems-transfer | | | 文件服务 技术复用 | Image-service文件图片服务 | | | 计算任务 技术复用 | Spark计算引擎 | | | | DRS数据修复软件 | | | | 大数据实时存储计算 | | | 存储 技术复用 | 分布式数据库:hbase、mysql | | | | Redis、Cache系统缓存服务 | | | | 数据库访问中间件 | | | | Hbase数据监控-hbaseflow | | | 调度管理 技术复用 | 分布式调度 | | | | PFK平台急救箱 | | | 数据查询 技术复用 | 分布式搜索引擎ES | | | | metadata-web Hbase数据库查询 | | | | pdfreport PDF工具 | | ### 3、关键技术 #### 3.1接入层—大数据实时流处理技术 ![](./image/image-20200830113324793.png) 跨业务跨系统的实时数据处理**统一管理平台**,毫秒级响应,每秒10000条并发吞吐能力。 #### 3.2数据层—基于数据标准的平台开发技术 ![](./image/image-20200830113340784.png) ### 4、总体逻辑 ![](./image/image-20200830113435070.png) #### 4.1数据种类与技术选型 ![](./image/image-20200830113501019.png) ### 5、数据表设计 详见:http://git.sagacloud.cn/persagy/persagy-dmp-doc ## 五、系统联调 ### 1、内部联调 | **联调功能** | **联调方式** | **备注** | | ------------ | ------------------------------------------------------------ | -------- | | 数据写入 | 联调内部数据结构定义,通过统一数据标准来规范,避免出现差异化数据结构 | | | 查询接口 | 联调查询各种数据库,打通和各业务系统的联调 | | ### 2、外部联调 | **联调功能** | **联调方式** | **备注** | | ------------------ | ------------------------------------------------------------ | -------- | | 第三方接入数据联调 | 1、创建数据映射表,将第三方数据与数据映射表建立业务定义的对应关系,主要包含数据表、字段、语义和精度等定义
2、根据定义好的数据映射数据表结构进行第三方接入数据的写入。 | | | IOT数据接入 联调 | 联调数字化交付采集的IOT数据包 | | | 数据查询接口联调 | 联调查询语言形式,进行查询语言兼容,正确输出查询结果 | |