5. 数据产品登记服务
5.1. 数据产品登记服务介绍
数据产品登记服务是数据要素流通平台的核心服务之一,采用微服务设计搭建,主要负责数据产品登记管理、数据产品认证管理等功能。数据产品登记服务项目简称IDA。
数据产品登记服务主要包括以下子服务模块:
- 数据产品登记服务: 提供数据产品登记、查询、修改、删除等功能,支持数据集、api 等不同类型资产的登记上链,以及申请使用从链上同步其他方登记的资产 
- 数据产品认证服务: 提供数据产品认证服务,包含认证申请、认证查询、认证通过、认证驳回等功能,支持合规认证、价值认证等多种认证类型 
5.2. 数据产品登记服务
数据产品登记服务(registration-service) 提供用户将不同类型的数据产品,登记到链上的服务。 用户可以根据自身数据产品(包括数据产品的名称、数据规模等信息)的特点,按照不同的数据产品类型,通过此服务登记到链上。 在数据要素流通平台上,可以通过选择已经在链上合法登记后的第三方企业(数据产品合规评估认证和数据产品价值评估),发起对应的认证申请。 当申请认证通过后,该登记的数据产品就会在链上拥有自己的合规认证证明和价值评估证明。
主要的模块如下所述:
- GRPC服务: - 提供GRPC服务,用于网关(gateway)层的转发。 
- 提供GRPC服务,专门用于隐私计算,服务中会包含数据库连接等隐私数据,为了保证数据的安全性,不可被网关层调用。 
 
- 上链模块: 提供数据产品登记上链、编辑链上数据产品和删除链上数据产品等功能 
- 事件订阅模块: 用于监听链上数据产品事件,同步其他部署方在当前链上登记的数据产品事件。 
- 数据源连接模块: 预先录入数据源连接信息,用于数据产品登记且数据产品类型为数据集的时候,选择数据源连接,拉取数据源表结构。 

5.2.1. 数据产品登记模块依赖关系图

5.2.2. 数据产品登记流程图

目前支持数据集、API 两种类型的数据产品登记,本地为其生成唯一的数据产品编号,然后和相关信息一起写入链上。其中数据集类型的数据产品,需要服务中检查处理好数据源连接和表结构信息,只有数据源可用才能登记成功。
5.2.3. 数据产品编辑流程图

数据产品的编辑不同于登记,它的上链和本地更新是异步的,只有监听到数据产品在链上的更新事件之后,才会真正更新本地数据的记录。通过这种形式,保证了多方最终能同步到正确可用的数据产品。
registration-service 启动配置文件样例 registration-service.yaml 如下:
# ------ go-zero 自带配置 ------ 
Name: registration.rpc
ListenOn: 0.0.0.0:8082
# 当前服务请求超时时间是 30s
Timeout: 30000
# 环境:dev、test、pre、prod
RpcServerConf:
  Mode: dev
Log:
  # 服务名称
  ServiceName: registration-service
  # 日志输出到文件
  Mode: file
  # 日志输出文件路径
  Path: logs
  # 日志级别
  Level: info
  # 是否压缩日志
  Compress: true
  # 日志保留天数,只有在文件模式才会生效
  KeepDays: 30
  # 按天切割日志
  Rotation: daily
  # 日志时间格式
  TimeFormat: "2006-01-02 15:04:05"
# 基于 OpenTelemetry 的日志收集链路追踪
Telemetry:
  # 链路追踪开关,不配置默认是开启
  Disabled: true
  # 链路追踪服务名称,跟服务名称保持一致即可
  Name: key.rpc
  # 链路追踪服务端地址
  Endpoint: http://jaeger:14268/api/traces
  # 采样率,不配置默认是 1.0
  Sampler: 1.0
  # 支持 jaeger|zipkin|otlpgrpc|otlphttp 这些链路追踪工具,不配置默认 jaeger
  Batcher: jaeger
# 监控,默认都是开启,主要调整端口和监控访问路由
DevServer:
  # 监控指标和健康检查的总开关,不配置是默认开启
  Enable: true
  # 监控指标和健康检查的端口
  Port: 6062
  # 健康检查路由,不配置是默认 /healthz
  HealthPath: "/healthz"
  # 健康检查返回,不配置默认是 OK
  HealthResponse: "OK"
  # 监控指标路由,不配置是默认 /metrics
  MetricsPath: "/metrics"
# grpc 通信服务端证书私钥
GrpcServerConf:
  #  ServerCertFile: ./cert/registration-service/server.pem
  #  ServerKeyFile: ./cert/registration-service/server.key
  #  CaCertFile: ./cert/ca/ca.pem
  ServerCertFile:
  ServerKeyFile:
  CaCertFile:
  # 接收、发送消息大小设置为 20 mb,根据服务实际场景调整
  MaxRecvMsgSize: 20971520
  MaxSendMsgSize: 20971520
  # 数据库连接限流速率
  TestDBConnRate: 10
# 数据库配置
DBConf:
  # 数据库类型,支持:mysql、kingbase_mysql、kingbase_pgsql、postgres
  Type: "mysql"
  # 数据库连接字符串
  DNS: root:root123456@tcp(127.0.0.1:3306)/registration_service?charset=utf8&parseTime=true&loc=Asia%2FShanghai
# redis 缓存配置,主要指定访问地址,其他配置项默认即可
Cache:
  - Host: 127.0.0.1:6379
    Pass: "123456"
# Event 链上事件
EventConf:
  Host: "127.0.0.1"
  Port: 6379
  Password: "123456"
  GroupName: "registration"
  ContractName: "ida200"
  ChainConfigInterval: 60
# ExpiredConf 过期时间配置
ExpiredConf:
  Internal: 300    # 检查间隔,单位秒,默认5分钟
  UploadInterval : 3  # 上链查询交易执行结果间隔
  UploadMaxSeconds: 1800    # 上链超时最大检查时间
GrpcConfs:
  key-service:
    #    ClientCertFile: ./cert/key-service/client.pem
    #    ClientKeyFile: ./cert/key-service/client.key
    #    CaCertFile: ./cert/ca/ca.pem
    ClientCertFile:
    ClientKeyFile:
    CaCertFile:
    DNS: localhost
    Endpoint: 127.0.0.1:8083
  chain-service:
    #    ClientCertFile: ./cert/chain-service/client.pem
    #    ClientKeyFile: ./cert/chain-service/client.key
    #    CaCertFile: ./cert/ca/ca.pem
    ClientCertFile:
    ClientKeyFile:
    CaCertFile:
    DNS: localhost
    Endpoint: 127.0.0.1:8081
5.3. 数据产品认证服务
认证服务(certification-service)是平台用来供认证人员完成认证操作的地方。在数据产品完成登记上链后,数据产品登记方可以发起认证请求。在认证请求上链后,认证平台即可收到待认证的请求。 certification-servic 是基于流行的 go-zero 框架开发的 gRPC 服务。
主要的模块如下所述:
- gRPC访问:对接网关侧的API访问 
- 认证信息整理: - 整理获取到的链上数据到本地数据库 
- 发送本地处理的认证信息推送到redis服务 
 
- 认证数据产品信息管理: - 认证数据产品信息的增删改 
- 认证数据产品信息的状态管理 
 
- 事件监听:通过链上事件监听,自动拉取认证请求 - 获取认证信息,包括认证请求、已完成的认证审批 
- 获取已上链的认证相关的数据产品信息 
- 同步链上数据产品状态到本地数据库 
 
- redis服务: - 认证服务与链服务的消息通道 
 
架构设计图

链上数据产品监听流程图

数据产品的同步都是通过监听链上事件来完成,认证模块则只用订阅监听认证相关的事件,对收到的认证事件先检查对应数据产品是否存在,然后再更新相关认证记录。
数据产品认证流程图

具有认证资格的用户,通过登录本平台查看待认证数据产品列表,对符合要求的数据产品发起认证请求。由于认证操作会上链,所以它会调用 chain-service 模块的合约调用接口来完成上链。同样地,服务本地异步监听认证事件,只有正确收到事件才认为认证上链成功,进而更新本地的认证记录。
certification-service 启动配置文件样例 certification-service.yaml 如下:
# ------ go-zero 自带配置 ------ 
Name: certification.rpc
ListenOn: 0.0.0.0:8084
#Etcd:
#  Hosts:
#  - 127.0.0.1:2379
#  Key: certification.rpc
# 当前服务请求超时时间是 30s
Timeout: 30000
# 环境:dev、test、pre、prod
Mode: prod
Log:
  # 服务名称
  ServiceName: certification-service
  # 日志输出到文件
  Mode: file
  # 日志输出文件路径
  Path: logs
  # 日志级别
  Level: info
  # 是否压缩日志
  Compress: true
  # 日志保留天数,只有在文件模式才会生效
  KeepDays: 30
  # 按天切割日志
  Rotation: daily
# 基于 OpenTelemetry 的日志收集链路追踪
Telemetry:
  # 链路追踪开关,不配置默认是开启
  #Disabled: true
  # 链路追踪服务名称,跟服务名称保持一致即可
  Name: chain.rpc
  # 链路追踪服务端地址
  Endpoint: http://jaeger:14268/api/traces
  # 采样率,不配置默认是 1.0
  Sampler: 1.0
  # 支持 jaeger|zipkin|otlpgrpc|otlphttp 这些链路追踪工具,不配置默认 jaeger
  Batcher: jaeger
# 监控,默认都是开启,主要调整端口和监控访问路由
DevServer:
  # 监控指标和健康检查的总开关,不配置是默认开启
  Enable: true
  # 监控指标和健康检查的端口
  Port: 6064
  # 健康检查路由,不配置是默认 /healthz
  HealthPath: "/healthz"
  # 健康检查返回,不配置默认是 OK
  HealthResponse: "OK"
  # 监控指标路由,不配置是默认 /metrics
  MetricsPath: "/metrics"
GrpcConf:
  #  CaCertFile: ./cert/ca/ca.pem
  #  ServerCertFile: ./cert/certification-service/server.pem
  #  ServerKeyFile: ./cert/certification-service/server.key
  CaCertFile: ""
  ServerCertFile: ""
  ServerKeyFile: ""
  # 接收、发送消息大小设置为 20 mb,根据服务实际场景调整
  MaxRecvMsgSize: 20971520
  MaxSendMsgSize: 20971520
# grpc 通信服务端证书私钥
GrpcConfs:
  chain-service:
    #    ClientCertFile: ./cert/chain-service/client.pem
    #    ClientKeyFile: ./cert/chain-service/client.key
    #    CaCertFile: ./cert/ca/ca.pem
    ClientCertFile: ""
    ClientKeyFile: ""
    CaCertFile: ""
    DNS: localhost
    Endpoint: 127.0.0.1:8081
  key-service:
    #    ClientCertFile: ./cert/key-service/client.pem
    #    ClientKeyFile: ./cert/key-service/client.key
    #    CaCertFile: ./cert/ca/ca.pem
    ClientCertFile: ""
    ClientKeyFile: ""
    CaCertFile: ""
    DNS: localhost
    Endpoint: 127.0.0.1:8083
# 数据库配置
DBConf:
  # 数据库类型,支持:mysql、kingbase_mysql、kingbase_pgsql、postgres
  Type: "mysql"
  # 数据库连接字符串
  DNS: root:root123456@tcp(127.0.0.1:3306)/certification_management?charset=utf8&parseTime=true&loc=Asia%2FShanghai
EventConf:
  Host: "127.0.0.1"
  Port: 6379
  Password: "123456"
  Consumer: "certification_consumer"
  GroupName: "certification"
  ChainConfigInterval: 3600