导读:蜀海供应链是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业,因其业务比较复杂,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 为核心的数据平台,已经支撑了公司几十个业务系统的数据查询和数据分析需求。为BI智能分析,各业务系统提供了优异的查询性能,并且极大减少了数据平台维护,数据开发,数据中台建设的成本。
- 数据实时接入稳定可靠,通过 Stream Load,实时接入了数千张表,每天接入数据总条数在亿级别,非常稳定可靠;
- 支持高并发高性能的数据在线分析查询,每天对 Doris 的在线分析查询次数在百万级别,大部分 SQL 在毫秒级别,慢 SQL 也有很大优化空间,并且 Doris 会自动做一些场景下的查询优化;
- 通过直接查询原始接入表,建立物化试图,建立索引,支撑了多个低延时高并发的实时查询需求。并且多表 Join 性能优异;
其他:
- Doris 的整体架构简单,运维成本很低,可在线滚动升级,可节省人力专注于数据中台的建设以及业务开发;
- Doris 高度兼容 MySQL 协议,交互式查询分析,提供高效的数据开发体验;
- 高可用,数据分区多副本存储,不会因为部分节点的异常导致整体服务不可用;
- 广泛生态兼容,社区提供了和 Flink,Datax 等大数据交互的 Doris 插件,通过 Broker 导入导出数据简单快捷;
- 社区活跃,Doris 功能和性能在不断的扩充和提升,遇到问题能够得到社区的密切帮助。