蜀海供应链基于 Apache Doris 的数据中台建设

用户案例
2022/07/04
蜀海供应链 王永绪

导读:蜀海供应链是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业,因其业务比较复杂,2020 年底完成了以 Apache Doris 为核心的架构升级,并在 2021 年开始建设以 Apache Doris 为核心的数据中台。本文将从数据接入,数据服务编排,数据安全,Doris 应用等方面进行介绍。

业务背景

蜀海供应链是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业,为广大餐饮连锁企业及零售客户提供整体食材供应链解决方案服务。因其业务比较复杂,2020 年底完成了以 Apache Doris 为核心的架构升级,并在 2021 年开始建设以 Apache Doris 为核心的数据中台。

在使用 Doris 之前,我们采用了 CDH 这套数据平台,用了很多组件,但其链路过长,并且开发和维护成本比较大,最后没有引入一个很好的 OLAP 系统。

因为我们的数据历史包袱比较轻,经过对 Apache Doris 的调研和测试,决定使用以 Apache Doris 为核心建设数据平台,它有以下优势:

  • 同时支持高并发点查询和高吞吐的 Ad-hoc 查询。
  • 同时支持离线批量导入和实时数据导入。
  • 同时支持明细和聚合查询。
  • 兼容 MySQL 协议和标准 SQL。
  • 支持 Rollup Table 和 Rollup Table 的智能查询路由。
  • 支持较好的多表 Join 策略和灵活的表达式查询。
  • 支持 Schema 在线变更。
  • 支持 Range 和 Hash 二级分区。
  • 高可用,能容忍部分节点挂掉。
  • 运维简单,部署,维护,升级都比较简单,不依赖外部组件。

架构图如下:

蜀海-架构图

由于之前已经对元数据,数据服务,接入数据质量,血缘关系的建设做过介绍,本文将从数据接入,数据服务编排,数据安全,Doris 应用等方面进行介绍。

数据接入

数据接入功能是数据开发的重要一环,我们开发了一套数据接入系统,在 Web 端操作,实现零代码数据接入到 Doris,以下为主要功能介绍:

  • 订阅 MySQL Binlog,入仓到 Doris 表。
  • 订阅 Kafka Topic,入仓到 Doris 表。
  • 数据动态清洗,在页面编写代码即可完成数据入仓之前的转换。
  • 接入任务合并,为节省资源,支持分库分表在一个任务接入,支持多个 TOPIC 在一个任务接入。
  • 动态数据质量校验,配置字段质量规则,进行接入数据质量校验。
  • 入仓加密,再接入过程中,可以对敏感数据进行加密后再入到 Doris 表。
  • 错误数据管理,因为网络或者数据错误等原因,在页面可完成数据的重新入仓。
  • 数据接入链路监控,比如错误数据监控,数据生产链路异常监控,数据消费链路异常监控,任务数据接入趋势图,集群数据接入趋势图等。

数据接入任务列表:

数据接入-列表

数据接入任务配置:

数据接入-配置

数据接入动态代码处理:

数据接入-动态代码

数据服务编排

数据服务是供业务系统调用 API 获取数据的一个系统。可以在页面进行 API 新建、编辑、在线开发调试、设置限流、上下线等操作。由于 API 之间可能存在业务逻辑关系,并且不能在配置同一个 API,我们开发了数据服务编排功能,通过拖拉拽的方式,让 API 之间能够进行编排并进行数据传递,对外提供 API 时,仍然暴露的是一个 API。

举例: 用户和用户所属的城市保存在一个 MySQL 数据源,每个城市的销售额保存在 Doris 数据源。要开发的 API 的功能是用户只能查看他所属城市的销售额。那么可以通过服务编排功能来实现,Node1 节点通过用户 ID 获取到城市,Node2 节点获取上游节点的输出(城市)作为输入,获取城市销售额作为 API 的输出。

蜀海-编排

每个节点的输入和输出都可以自定义配置,输入可以来自 API 请求参数,也可以来自上游某个节点的输出,可以来自全局参数,比如用户 ID,分页参数等;

编排-节点

编排-节点

数据安全建设

数据安全是一个很大的话题,涉及到方方面面,这里从数据加密,数据权限和数仓数据备份几个方面进行简单介绍。

数据入仓加密

在数据接入过程中,可以选择对字段进行加密,当接入到 Doris 表后,就已经是加密的数据,后续的数据分析,可以利用密钥进行解密。

数据接入加密配置:

数据安全-加密

数据权限

由于公司查看报表的人员分布很广,对于同一个数据模型,每个城市每个区域的销售,运营,工厂人员,管理人员等人员查看到的数据是不一样的,需要精确控制到行权限和列权限,所以我们在 Doris 上层开发了一套数据权限系统,通过配置化的方式,完成数据权限配置,可以精确到行权限和列权限。 BI 报表系统作为一个接入方,引入数据权限客户端并实现相应抽象方法即可。

举例1: 对一个报表模型,张三只能查看区域为华北区域或者西北区域的数据;李四,王明只能查看城市为西安或者北京,并且销售额大于 10000 的数据;张四,张五不受限制,其他人无任何权限。

模型行级权限规则列表:

数据安全-权限

行级别赋权规则编辑:

数据安全-行级权限 数据安全-行级权限

举例2: 所有人都能查看报表数据,但是每个人只能查看自己所在城市,并且金额大于200或者金额小于100的数据。

自由组合规则条件和规则关系:

数据安全-自由组合

人员标签管理:

数据安全-人员标签管理

数据安全-人员标签管理

举例3: 列权限规则,可以针对用户设置禁止查看,数据脱敏等规则 列级别权限配置:

数据安全-列权限规则

数据安全-列权限规则

数仓数据备份

我们以 Doris 作为存储和计算的核心,Doris 本身数据已经是多副本存储,但是考虑到容灾,我们还是会对核心接入数据进行备份到 HDFS,为此开发了一套数仓数据备份系统,把 Doris 表按照全量或者分区,定时备份到 HDFS。

备份计划配置:

备份-配置

备份计划任务列表

备份-列表

Doris 的应用

我们用 Doris 承载了数据分析的计算和存储。此外,还存在一个这样的场景:业务的 MySQL 数据库数据一直在增长,大量的历史数据影响业务线上性能,而且不能直接删除,因为还有低频的历史数据查询,为此,我们基于 Doris 开发了一套业务历史数据归档系统,可以定时把不再变更的历史数据进行增量归档,通过数据服务系统提供数据查询,把归档的数据推送给业务方,业务方进行校验,并删除历史数据。

归档计划列表:

Doris 应用-归档列表

归档计划配置:

Doris 应用-归档配置

数据推送计划配置:

Doris 应用-推送

收益

目前以 Doris 为核心的数据平台,已经支撑了公司几十个业务系统的数据查询和数据分析需求。为BI智能分析,各业务系统提供了优异的查询性能,并且极大减少了数据平台维护,数据开发,数据中台建设的成本。

  • 数据实时接入稳定可靠,通过 Stream Load,实时接入了数千张表,每天接入数据总条数在亿级别,非常稳定可靠;
  • 支持高并发高性能的数据在线分析查询,每天对 Doris 的在线分析查询次数在百万级别,大部分 SQL 在毫秒级别,慢 SQL 也有很大优化空间,并且 Doris 会自动做一些场景下的查询优化;
  • 通过直接查询原始接入表,建立物化试图,建立索引,支撑了多个低延时高并发的实时查询需求。并且多表 Join 性能优异;

其他:

  • Doris 的整体架构简单,运维成本很低,可在线滚动升级,可节省人力专注于数据中台的建设以及业务开发;
  • Doris 高度兼容 MySQL 协议,交互式查询分析,提供高效的数据开发体验;
  • 高可用,数据分区多副本存储,不会因为部分节点的异常导致整体服务不可用;
  • 广泛生态兼容,社区提供了和 Flink,Datax 等大数据交互的 Doris 插件,通过 Broker 导入导出数据简单快捷;
  • 社区活跃,Doris 功能和性能在不断的扩充和提升,遇到问题能够得到社区的密切帮助。