# 数据中台-架构设计

## 一、引言

软件的概要设计又称为软件系统（程序系统）的设计，本文档应说明软件系统即程序系统设计的总体考虑，包括系统的基本处理流程、软件系统的组织结构、模块划分、功能分配、数据结构、接口、运行、出错处理和系统维护等方面的设计，为详细设计提供基础。

## 二、业务设计

### 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、定义标准字典类型、定义标准字典数据结构、定义自定义字典数据映射结构<br />2、对字典数据进行增删改查，需提供相关字典数据接口<br />3、进行字典进行映射兼容管理，通过字典数据映射实现 |      |
|                    | 知识库数据管理          | 1、定义标准知识库类型，定义标准知识库数据结构<br />2、对知识库进行增删改查，需提供相关的知识库数据接口 |      |
|                    | 对象数据管理            | 1、对象属性管理，如a、物理世界对象，有对象的名称、编码、信息点等属性<br />b、业务对象，如报警对象，有报警类型、报警条目属性等<br />2、对象服务管理，添加业务对象数据结构<br />3、可对业务对象进行增删改查，需提供相关的业务对象管理接口 |      |
|                    | 关系数据管理            | 1、物理世界对象关系管理，描述物理世界对象之间的关系，如空间下的对象、服务空间的系统，主要采用图类型和边类型进行管理，边类型为图类型的补充说明<br />2、业务对象的关系管理，描述业务对象之间的关系，与工单与报警的关系数据，并提供相关接口 |      |
|                    | 图数据管理              | 无相关存储场景，暂不考虑                                     |      |
|                    | 时序数据管理            | 1、时序数据属性管理，定义时序数据的数据结构，主要为IOT数据，IOT采集数据分时序存储，如分精度数据的存储<br />2、可对时序数据进行增删改查，需提供相关的时序数据接口 |      |
|                    | 多维数据管理            | 1、维度管理，如时间维度、空间维度、人的维度、对象的维度、组织的维度等<br />2、指标管理，如工单、能源、环境等数据指标<br />3、多维数据结构管理，定义多维数据的数据结构，主要为报表、统计数据<br />4、对多维数据进行增删改查，需提供相关的多维数据管理接口 |      |
|                    | 数据流向管理            | 1、数据字典文件excel生成<br />2、数据存储结构生成<br />3、业务配置项生成<br />4、根据业务配置项，输出接口<br />5、数据输出，包含数据文件生成和页面生成 |      |
|           数据质量 | 数据质量管理            | 1、在做兼容和数据融合的处理时，我们引入数据映射的数据表，<br />2、将历史数据或者第三方数据与数据映射表建立业务定义的对应关系，主要包含数据表、字段、语义和精度等定义。<br />3、数据映射表的数据映射到数据中台标准数据中，完成数据兼容和融合<br />4、还需在进行数据管理时，对数据的版本进行管理，必要时需要对不同版本的数据进行分表存储。 |      |
| 主数据数据结构定义 | 主数据-人员组织结构权限 | 1、定义人员组织管理的数据结构，数据模型包含：<br />1）集团（多租户）<br />2）项目<br />3）数据权限（集团、中心、区域、项目，用于管理项目权限，）<br />4）部门<br />5）岗位<br />6）部门模版<br />7）岗位模版<br />8）人员<br />9）账号<br />10）应用<br />11）功能<br />12）功能权限<br />2、集团与部门，每个集团下有一个顶级部门与集团对应，创建集团时会同时创建一个部门，部门名称默认与集团名称相同<br />3、部门与项目，为部门分配项目，只能分配上级部门已分配的项目，可将项目权限进行打包。<br />4、顶级部门默认配置了集团下的全部项目，新增项目时也同时将项目分配到顶级部门<br />5、功能权限集，集团与应用关系，描述集团是否开通应用，集团的应用权限及应用下功能权限集合<br />6、岗位配置功能，描述岗位具备的功能权限<br />7、人员组织岗位关系，将人员加到某个组织的某个岗位上，则用户具备组织已配置的项目的数据权限，同时具备岗位已配置的功能权限 |      |
|                    | 主数据-租户数据         | 1、定义租户信息、租户配置、租户账单信息的数据结构，详见《finein_saas_web统一收费管理》<br />2、对租户数据进行管理，需提供相关的数据接口 |      |
|                    | 主数据-供应商数据       | 1、对供应商数据进行主数据表结构梳理<br />1）供应商类型表<br />2）供应商类型扩展字段表<br />3）供应商表<br />4）供应商扩展表<br />5）供应商与供应商类型关系表<br />2、供应商数据的增删改查接口管理 |      |
|                    | 主数据-库存数据         | 1、对库存数据进行主数据表结构梳理<br />1）系统类型常量表<br />2）仓库信息表：仓库数据主体表<br />3）仓库管理员表<br />4）工具清单表：工具数据主体表<br />5）工具箱表：工具箱数据主体表<br />6）工具箱清单表：工具箱清单的清单数据主体表<br />7）工具箱领用单：工具箱领用单的数据主体表<br />8）工具箱领用单详情：工具箱领用单内的工具箱详情数据主体表<br />9）公用工具表：公用工具数据主体表<br />10）公用工具借用单：公用工具借用单的数据主体表<br />11）公用工具借用单详情：公用工具借用单内的借用工具详情数据主体表<br />12）工具操作记录表<br />13）耗材出库详情表：耗材出库单内的耗材详情数据主体表<br />14）耗材出库表：耗材出库单的数据主体表<br />15）耗材入库详情表：耗材入库单内的耗材详情数据主体表<br />16）耗材入库表：耗材入库单的数据主体表<br />17）耗材表：耗材数据主体表<br />18）耗材模板、项目关联表<br />19）耗材模板表：记录耗材模版主体数据<br />20）工具转借单：工具转借单的数据主体表<br />2、库存数据的增删改查接口管理 |      |
|                    | 主数据-物理世界数据字典 | 1、物理世界数据字典进行版本升级，对底层存储数据切换为mysql，<br />2、对信息点编码进行调整，使用驼峰命名<br />3、调整存储方式和分库分表方案，数据字典部分调整为平台字典单独一个库，集团数据和项目数据按集团进行分库，物理世界部分按集团进行分库，按项目进行分表<br />4、枚举型信息点修改为引用数据标准化定义的数据<br />5、提供可行的数据迁移方案 |      |
|                    | 主数据-文件数据         | 1、定义文件的数据结构<br />2、提供文件的上传、下载功能，定义相关接口 |      |
|           中控业务 | IOT数据-物联网数据      | 1、提供物理世界对象与关系数据结构，供设备对接与写入<br />2、提供物理世界对象信息点数据结构，以用于IOT数据的写入和存储<br />3、进行IOT数据质量处理，如分精度计算等<br />4、提供接口查询服务，可查询IOT数据 |      |
|                    | 中控支持-报警系统       | 1、定义报警类型、报警条目数据接口，并提供报警类型与条目的增删改查管理接口 <br />2、报警记录，用于描述一个发生的具体的报警，提供报警新建和查询接口<br />3、自动点位报警配置数据描述自动触发报警需要满足的类型、分类以及特定条件，以及报警时使用的报警条目<br />4、对象点位报警配置数据根据自动点位报警配置的类型自动生成，可以修改为开或者关<br />5、对象点位报警配置数据产生后，在接收到物联网采集数据后，系统自动根据配置的条件判断是否触发报警，如果触发报警则创建一条与配置条目对应的报警记录 |      |
|                    | 中控支持-监控配置       | 1、定义监控配置的数据结构、控制指令的数据接口<br />2、对监控配置数据进行增删改查，需提供相关配置数据管理的数据接口<br />3、对监控指令数据进行增删改查，需提供相关监控指令数据管理的数据接口 |      |
|                    | 中控支持-日志           | 1、定义日志类型的数据结构<br />2、定义日志的基础字段信息，并可对日志类型进行字段配置<br />2、对字典数据进行增与查，需提供相关日志的数据接口 |      |
|           任务调度 | 任务调度系统            | 1、任务配置，用于描述一个具体的任务配置信息<br />2、调度执行管理<br />1）读取配置的任务，进行，满足以下条件的任务会被触发：<br />    a）状态为待执行且达到下次执行时间的<br />    b）状态为执行中且达到上次执行的过期时间的<br />2）任务触发后更新任务的下次执行时间、本次任务的过期时间，<br />3）根据执行方式的配置来调起相关的服务，同时会将集团编码、应用编码、项目ID、任务编码、调起参数、任务ID等作为参数。<br />3、执行记录，用于描述一个任务的具体的一次执行过程<br />1）被调度方根据执行结果和任务ID来更新执行记录<br />4、任务调度的最小时间间隔是5秒，暂不支持频率要求快于5秒的场景<br /> |      |



## 四、总体设计



### 1、技术选型

| **技术**          | **约定** | **备注**                                   |
| ----------------- | -------- | ------------------------------------------ |
| Spark             | xx版本   | 计算引擎                                   |
| Hbase             | xx版本   | 分布式数据库                               |
| MySQL             | xx版本   | 关系型数据库                               |
| Redis             | xx版本   | 缓存服务                                   |
| ElasticSearch     | xx版本   | 搜索引擎ES                                 |
| Zookeeper         | xx版本   | 分布式共享存储，保证数据中台计算调度一致性 |
| HDFS              | xx版本   | 分布式文件系统(Hadoop)                     |
| Flume             | xx版本   | IOT数据采集的服务                          |
| Kfaka             | xx版本   | 分布式发布订阅消息系统 ，消息中间件        |
| ActiveMQ/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、创建数据映射表，将第三方数据与数据映射表建立业务定义的对应关系，主要包含数据表、字段、语义和精度等定义 <br />2、根据定义好的数据映射数据表结构进行第三方接入数据的写入。 |          |
| IOT数据接入  联调  | 联调数字化交付采集的IOT数据包                                |          |
| 数据查询接口联调   | 联调查询语言形式，进行查询语言兼容，正确输出查询结果         |          |

 

