# 架构设计
## 功能简介
数据要素流通平台是以长安链为基础构建的一个分布式应用,主要包括数据产品登记与认证、数据产品发现、数据产品市场、数据产品流通
和使用数据产品进行隐私计算等功能。平台采用分布式设计和部署架构,各参与方独立地部署和启动平台,通过区块链可信地进行数据交互。
## 整体架构
数据要素流通平台整体采用分布式架构。单个平台为B/S架构,采用前后端分离实现,后端使用微服务架构来提供服务。
多个数据要素流通平台之间支持基于区块链的互联互通。
整体架构如下:

主要包括以下服务:
- API网关:负责对前端请求进行有效性检查,并将请求转发到后端业务微服务。
网关还集成了用户中心模块,同时负责参与方内部的用户管理、区块链配置管理、合约配置管理与平台配置管理功能。
网关和其他业务微服务之间使用grpc或者http协议进行通信。
- 数据产品登记服务:负责数据产品登记和查询相关业务功能,使用grpc协议提供服务。
- 数据产品认证服务:负责数据产品认证相关功能。使用grpc协议提供服务。
- 隐私计算:负责隐私计算任务的创建、审批、调度和执行等功能。任务需要的数据产品来自数据产品登记服务。
- 密钥管理服务:负责用户私钥托管相关功能(该私钥目前主要用于安全存储用户链账户私钥)以及数据加解密、数字信封等功能。
- 链服务:负责链配置相关接口功能以及和长安链交互功能,接收其他服务的上链或查询请求并和长安链进行交互,
从而协助其他服务完成业务逻辑。使用grpc协议提供服务。
## 微服务架构

数据要素流通平台关键组件主要分为分为四个子系统: 公共服务、数据产品登记服务、可信计算服务和数据市场服务。
### 公共服务
公共服务作为数据产品登记服务和可信计算服务的基础组件,主要提供消息转发和区块链交互相关的支持功能,包括:
- 链服务 `chain-service`,提供链配置相关接口功能以及和长安链交互功能,接收其他服务的上链或查询请求并统一发送到长安链,支持多链多合约事件的订阅推送
- 密钥管理服务 `key-service`,提供链私钥管理功能,并为上层服务提供加解密、交易签名等功能
### 数据产品登记服务
数据产品登记服务,英文全称:Identifiable Data Asset,简称IDA。包括以下 4 个子服务:
- 前端 `circulation`: 前端服务,提供用户界面,用户可以通过前端界面进行数据产品登记、认证、隐私计算等操作
- API网关 `gateway`, 提供用户管理功能(集成了用户中心user-center);主要负责对接前端,提供统一用户权限验证和请求转发等功能
- 数据产品登记服务 `registration-service`,提供数据产品登记、查询、修改、删除等功能,支持数据集、api 等不同类型资产的登记上链,以及申请使用从链上同步其他方登记的资产
- 数据产品认证服务 `certification-service`,提供数据产品认证服务,包含认证申请、认证查询、认证通过、认证驳回等功能,支持合规认证、价值认证等多种认证类型
### 可信计算服务
可信计算服务,英文全称:Miracle,简称MIRA。包括以下多个子服务:
- 可信计算后端服务 `mira-backend-service`,提供可信计算后端web服务,接收gateway转发的http请求
- 任务调度服务 `mira-scheduler`,提供隐私计算任务调度服务
- 网络管理服务 `mira-network-manager`,为隐私计算任务提供网络管理服务,分配可用端口
- PQL解析服务 `mira-job-service`,将用户提交的PQL解析为可执行的任务和任务DAG流程图
- ida统一访问服务 `mira-ida-access-service`,实现与ida数据产品服务和public公共服务的交互,并为可信计算服务提供数据产品访问服务以及链访问服务。
- 联邦学习引擎 `mira-fl-engine`,提供联邦学习任务的执行服务(*注:当前版本不可用*)
- 联邦计算引擎 `mira-mpc-engine`,mpc执行引擎,用于创建mpc执行环境,执行mpc计算任务(如:PSI隐私求交)
- 联邦查询引擎 `mira-pir`,pir执行引擎,用于创建pir执行环境,执行隐私查询任务
### 数据市场服务
数据市场服务,针对API类型的数据产品,提供数据共享的能力
- 数据市场后端服务 `api-manager-service`,提供了数据市场的产品大厅、申请审批流、交钥匙、精准授权、计数对账结算等能力
- 适配器服务 `api-adapter-service`,为数据持有方提供了适配器模块,协助数据持有方管理所有数据使用方,协助进行授权书验证等
## 核心流程
核心交互流程如下:

- 数据产品登记流程:数据产品登记流程主要包括数据产品登记、数据产品查询、数据产品修改、数据产品删除等功能。
- 数据产品认证流程:数据产品认证流程主要包括数据产品认证发起、数据产品认证查询、数据产品认证通过、数据产品认证驳回等功能。
- 隐私计算流程:隐私计算流程主要包括隐私计算任务创建、隐私计算任务审批、隐私计算任务调度、隐私计算任务执行等功能。
- 结果下载流程:隐私计算任务执行完成后,用户可以下载计算结果。
### 数据产品登记流程

- 数据产品登记请求:用户在数据产品登记平台上发起数据产品登记请求,填写数据产品的相关信息,包括数据产品的名称、产品的类型、所属行业、数据规模等基本信息,如果是数据集类型数据产品,还需要选择数据源连接进行数据字段的编辑。
- 网关对请求的校验:网关会根据数据产品登记接口的定义,进行基础的请求格式校验,如一些关键字段是否存在等,然后对请求的用户登录态和权限进行检查。
- 数据产品信息上链:数据产品登记请求经过网关检查后,转发给数据产品登记微服务(registration),由资产登记微服务(registration)调用密钥管理微服务(keyservice)进行交易签名,然后调用链服务(chainservice)将数据产品登记信息上链。
### 数据产品认证发起流程

- 数据产品认证请求:数据产品登记方在登记平台上发起数据产品认证请求,主要信息包括要认证的数据产品、选择的数据产品认证方等信息。
- 网关对请求的校验:同数据产品登记流程
- 认证请求上链:数据产品认证请求经过网关检查后,转发给数据产品认证微服务(certification),由资产认证微服务(certification)调用密钥管理微服务(keyservice)进行交易签名,然后调用链服务(chainservice)将数据产品登记信息上链。
### 数据产品认证通过流程

- 数据产品认证结果请求:数据产品认证方在登记认证平台上发起数据产品认证通过或驳回请求,主要信息包括要认证的数据产品、认证结果等信息。
- 网关对请求的校验:同数据产品登记流程
- 认证结果请求上链:数据产品认证请求经过网关检查后,转发给数据产品认证微服务(registration),由资产登记微服务(registration)调用密钥管理微服务(keyservice)进行交易签名,然后调用链服务(chainservice)将数据产品登记信息上链。
### 隐私计算任务创建&审批
- 任务创建:用户在MIRA平台上创建隐私计算任务,填写任务相关信息,包括任务名称、任务描述、处理方式,并编写PQL任务代码, 其中PQL涉及到IDA数据产品登记平台登记的数据产品。
- PQL解析:MIRA平台接收到用户提交的PQL任务代码,解析PQL任务代码,生成任务执行计划,生成任务DAG流程图。
- TEE计算任务:MIRA平台根据任务执行计划,设置TEE算力资源。
- 流处理任务:如果任务处理方式为流式处理,则MIRA平台根据任务执行计划,设置常驻服务配置。
- 任务可见性设置:MIRA后端根据使用资产的可见性,设置任务是否需要加密。
- 提交任务:用户提交任务(包含任务执行计划,DAG图等),任务提交后存储到区块链上,等待审批。
- 任务创建事件订阅:MIRA平台订阅区块链上的任务事件,当有新任务提交时,MIRA平台接收到任务提交事件。如果任务被加密,MIRA平台解密任务并存入本地数据库。
- 任务审批:审批人员审批任务,审批通过后,任务进入调度阶段。
### 隐私计算任务调度&执行
- 任务调度:任务审批通过后,任务进入调度阶段。调度程序会从本地数据库中定时查询审批通过的任务,并根据任务处理方式和触发方式判断是否符合任务的执行条件。
- 任务实例调度:当任务满足执行条件时,调度服务将创建任务实例,并将将任务实例信息加密存储到区块链上。
- 任务实例事件订阅:MIRA平台订阅区块链上的任务实例事件,当有新任务实例提交时,MIRA平台接收到任务实例提交事件。如果任务实例被加密,MIRA平台解密任务实例并存入本地数据库。
- 任务执行:任务实例提交后,调度服务根据任务实例信息,调用任务执行服务执行任务。任务执行服务根据任务实例信息,调用联邦计算引擎执行任务。
- 任务结果存储:任务执行完成后,任务执行服务会将计算结果存储到对象存储中,参与方通过任务结果的存储地址下载任务结果。
### 数据产品市场产品申请&授权

- 浏览产品大厅:数据使用方浏览平台上的所有已经发布的API数据产品。
- 申请使用:数据使用方通过数据要素流通平台向数据持有方申请使用数据产品。
- 申请审批:数据持有方同意数据使用方使用某数据产品。
- 业务办理:授权方向数据使用方申请办理业务。
- 生成授权书:数据使用方通过数据要素流通平台生成授权书二维码。
- 展示授权书:数据使用方通过自己的方式,将数据要素流通平台生成的授权书二维码展示给授权方。
- 扫码确认:授权方用DID APP客户端扫描授权书二维码,并授权数据使用方获取、传输、存储、使用本企业自己的xxx数据。
- 回调通知:数据要素流通平台回调通知数据使用方自有业务系统,并附上签好的授权书结构体和授权书唯一ID。
- 数据交割:数据持有方收到数据使用方发送的API请求(附带上送授权书唯一ID)。
- 授权书验证:数据持有方通过数据要素流通平台验证授权书真伪。
- 返回数据:数据持有方原路响应数据给数据使用方。