应用实践

2023-11-11

导读:蜀海供应链是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业,因其业务比较复杂,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 二级分区。
  • 高可用,能容忍部分节点挂掉。
  • 运维简单,部署,维护,升级都比较简单,不依赖外部组件。

架构图如下:

img

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

数据接入

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

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

数据接入任务列表:

img

数据接入任务配置:

img

数据接入动态代码处理:

img

数据服务编排

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

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

img

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

img

img

数据安全建设

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

数据入仓加密

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

数据接入加密配置:

img

数据权限

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

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

模型行级权限规则列表:

img

行级别赋权规则编辑:

img

img

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

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

img

人员标签管理:

img

img

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

img

img

数仓数据备份

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

备份计划配置:

img

备份计划任务列表

img

Doris 的应用

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

归档计划列表:

img

归档计划配置:

img

数据推送计划配置:

img

收益

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

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

其他:

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

加入社区

欢迎更多热爱开源的小伙伴加入 Apache Doris 社区,参与社区建设,除了可以在 GitHub 上提 PR 或 Issue 之外,也欢迎大家积极参与到社区日常建设中来,比如:

参加社区**征文活动**,进行技术解析、应用实践等文章产出;作为讲师参与 Doris 社区的线上线下活动;积极参与 Doris 社区用户群的提问与解答等。

最后,欢迎更多的开源技术爱好者加入 Apache Doris 社区,携手成长,共建社区生态。

img
SelectDB 是一家开源技术公司,致力于为 Apache Doris 社区提供一个由全职工程师、产品经理和支持工程师组成的团队,繁荣开源社区生态,打造实时分析型数据库领域的国际工业界标准。基于 Apache Doris 研发的新一代云原生实时数仓 SelectDB,运行于多家云上,为用户和客户提供开箱即用的能力。

相关链接:

SelectDB 官方网站:

https://selectdb.com (We Are Coming Soon)

Apache Doris 官方网站:

http://doris.apache.org

Apache Doris Github:

https://github.com/apache/doris

Apache Doris 开发者邮件组:

dev@doris.apache.org

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用实践 的相关文章

随机推荐

  • java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigD

    解决 将int类型转成BigDecimal类型就可以了 filtrationList add new Filtration MatchType EQ BigDecimal valueOf 0 fisRemove java lang Clas
  • 东北大学acm第五周周赛

    include
  • Resources.getResourceAsStream用法

    Resources com ibatis common resource Resources 类为从类路径中加载资源 提供了易于使用的方法 处理 ClassLoader 是一项 富于挑战的工作 尤其是应用服务器 容器的情况下 Resourc
  • mmdetection的VOC数据集训练、测试、保存(测试图片)

    mmdetection训练 测试总结 1 数据集格式 voc数据集 在 mmdetection data VOCdekit 上传数据 改名为VOC2007 其中包含JPEGImages Annotations ImageSets等 2 代码
  • 【vue3】监听路由的写法以及路由更新但是页面内容不更新的解决方案

    以下是vue3使用watch监听路由的写法 watch gt router currentRoute value newValue any gt 此处写监听路由后要执行的事情 if newValue fullPath manage rack
  • 2019年第十届蓝桥杯程序设计大赛国赛C++大学B组题解

    目录 A 平方序列 B 质数拆分 D 求值 E 路径计数 F 最优包含 G 排列数 H 解谜游戏 I 第八大奇迹 A 平方序列 题目解析 题意很直白 我们可以暴力枚举x y 2019
  • 机械革命开启Hyper-V安装Docker无限蓝屏(已解决)

    安装Docker时会蓝屏 安装Docker时会蓝屏 起初以为是docker 系统问题 后来经过仔细的检查 发现是只要开启虚拟化就会蓝屏 再检查好像硬件虚拟化有点问题 一番查找之后方知是bios的问题 CODE01需要升级到1 07版本 官方
  • 如何实现一个组件封装?

    问题网址 http bbs daxiangclass com thread 271 htm js前端组件的封装方法 定义一个类 类中增加一个方法 body中定义一个dom节点 脚本中把dom节点和类定义结合起来 实现特定的组件功能 vue组
  • Python爬取淘宝商品

    爬取淘宝商品信息 一个小菜鸡 用了十四个小时写了个爬虫 时间是有点长 但我心里美滋滋啊 记录下过程 也是第一次写博客排版什么的就凑合吧 主要用了selenium BeautifulSoup库 初始化 在十秒内页面加载完毕 调用seleniu
  • matlab函数大全

    转载方法 https blog csdn net yanmantian article details 53256765 本文转载自http www cnblogs com gtts archive 2011 05 20 2052339 h
  • cocos2d-x中有一个JniHelper类详细使用

    主体思路 通过JNI获取java虚拟机 再获取当前程序的JNI环境 通过JNI环境获取需要调用的java类信息 再获取需要调用的java类中的函数信息 再通过JNI环境调用 使用类信息 函数信息 调用对应的java函数 看起来好像有点复杂
  • Selenium之下拉框操作详解

    前言 执行自动化测试过程中遇到下拉框 包含 单选 多选 如何定位到下拉框并选中某个选项 1 下拉框的分类 select 标签 非 select 标签 2 Select 下拉列表处理 针对 select 标签的下拉列表 Selenium 提供
  • CCObject的分析:release retain基于2.2.3 增加3.2ref对比

    CCSprite fish new CCSprite 02 CCLOG After new d fish gt retainCount 03 fish gt init 04 CCLOG After init d fish gt retain
  • 图像的视网膜变换研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 图像的视网膜变换是受到人眼启发的一种技术
  • Spring Native实战(畅快体验79毫秒启动springboot应用)

    应用启动速度不超过100毫秒 启动即达到性能峰值 C1 C2等手段已经用不上了 运行时更低的内存消耗 docker镜像不含JDK 所需文件已经抽取出来放入镜像 官方展示的含有Spring Boot Spring MVC Jackson To
  • 面试时不要有谦卑的态度

    今天在B站看了几个Java面试的实战视频 然后茶余饭后产生了一些思考 在找工作过程中 虽然我们跟企业不是平等的 但起码是双向选择 你只需要以下三个问题即可 你可以谦虚但不可以谦卑 谦卑往往意味着你潜意识里想偷懒 不想学那么多 思考那么多就可
  • 虚拟机黑屏虚拟机繁忙的解决方法

    问题描述 不知是因为VMware版本的问题还是其他原因 有时候虚拟机很长时间不能正常开机 整个屏幕都是黑的 想关掉VM都关不了 提示 虚拟机繁忙 解决方法 呼出任务管理器强制结束VM的进程 然后再次打开VM 会出现以下的提示 而且之前出问题
  • c++ 编写杨辉三角(详细注释)

    include
  • PHP表单的创建和使用

    用户注册
  • 应用实践

    导读 蜀海供应链是集销售 研发 采购 生产 品保 仓储 运输 信息 金融为一体的餐饮供应链服务企业 因其业务比较复杂 2020 年底完成了以 Apache Doris 为核心的架构升级 并在 2021 年开始建设以 Apache Doris