让数据中台飞起来—— Quick BI性能优化解决方案及实践

Quick BI“数据门户”在企业数据中台建设中的重要性
企业在数据中台初步建设完成以后,怎样让客户直观感受到数据中台的价值?企业决策者、各部门管理人员、业务运营人员如何通过统一的窗口,快速看到数据中台提供的数据,并利用这些数据全方位的支持企业发展?
基于Quick BI构建的企业数据门户,有效的解决了上述问题。
Quick BI“数据门户”是数据中台提供给业务人员使用的门户和窗口,以场景化分析的方式,为企业各类人员和角色,提供统一的可视化服务。作为真正触达用户的可视化工具,Quick BI“数据门户”在企业数据中台建设中的重要性尤为突出。

为什么要对Quick BI进行优化?
企业数据中台建设完成后,数据中台作为企业统一数据的“供给方”,越来越多的部门和业务人员会成为“需求方”,希望通过数据中台的数据支持业务。随着“需求方”越来越多,并发要求越来越高,作为统一入口的Quick BI数据门户的压力随之越来越大。因此,随着数据中台在企业内推广和使用的逐步深入,需要对Quick BI进行全面优化,以满足不断增长的业务需要。

本文旨在说明的问题本篇文章基于实际客户案例中Quick BI性能优化的实践探索,总结提出数据中台建设中的测试方法和性能优化解决方案,抛砖引玉,供其他类似项目参考。

典型的数据中台技术架构

基于阿里云数据中台整体解决方案,对数据中台技术实现进行选型及设计,典型的数据中台技术架构如下图所示,整个技术架构选型包含五个层次:业务数据源存储技术、数据源接入技术、数据中台数据存储与计算技术、数据服务及数据应用技术。
image.png

数据存储计算,数据中台中离线数据存储和计算采用MaxCompute离线计算引擎;实时计算部分采用阿里云StreamCompute流式计算技术实现;数据研发与管理采用Dataphin智能数据构建与管理大数据研发平台。

数据服务层,主要分API接口和数据库服务两种方式,一般普通查询使用RDS,多维分析使用ADB,搜索服务使用ElasticSearch,在线接口使用OneService服务。

数据应用层,使用阿里云智能报表工具Quick BI实现各种定制数据报表分析需求;以及基于阿里云产品技术体系实现客户个性化数据应用需求。其中基于Quick BI产品的数据中台门户如图中橙色部分所示。

Quick BI压测方法

1、压测目标
Quick BI数据中台门户压测目标主要围绕着两类发布变更和用户体验反馈,提前做好:性能卡点、性能调优工作,满足日常客户报表的极致体验、以及性能特殊诉求。
image.png

两个卡点:
1)压测,保障上线内容无性能问题以及隐患
2)新的报表上线时,需要对新上线报表进行简单压测,避免单一报表导致整个系统性能出现瓶颈。

一个检查点:
当客户直观使用感受数据中台门户报表显示过慢时,对系统整体压测,检查性能瓶颈点进行优化。
从而保障数据中台门户满足客户日常报表可视化性能需求。

2、压测策略

1)压测环境
Quick BI数据中台门户通常在客户现场只有正式环境,Quick BI门户页面压测接口全为查询类请求,压测执行不会对线上数据造成污染。当然为了避免影响线上用户,会在用户低峰期如凌晨节点执行压测。大部分项目数据门户环境如下:
image.png

2)压测实施

具体实施压测时,主要流程如下:

image.png
(1)获取客户需求,如客户需求的可能是要支持100个并发,返回时间不超过3s、日常峰值用户多少PV等。
(2)根据客户需求结合线上PV访问量预估,计算出经验qps和极限qps。
(3)前期准备,需要跟客户沟通压测时间点以及压测方案,同时压测期间协调产品方跟进,观察产品在压测时是否触发异常。
(4)压测工具准备
(5)压测数据准备
QuickBI门户涉及多个页面,一个页面包括多个接口请求,如果通过手工抓接口录API入参的方式工作量极大,而且接口入参数据时效不高、容易出错。因此需要一种实时页面录制请求的方式实现压测数据快速准备。

3、压测方式
通常数据中台Quick BI门户的性能瓶颈是在提供数据服务的数据库,因此在进行压测时,我们主要通过区分不同数据源类型的报表页面,进行压测,如下表所示:
下表所示:
image.png
(1)摸高测试
以最初始的qps开始施加压力,观察系统个性指标和业务指标,稳定没问题后就往上调高qps并发数,依次循环,最后达到目标qps甚至超过目标qps,稳定一段时间,记录目标qps下的系统各项关键指标及业务指标;
(2)恒定压力测试
一般在小于目标qps稳定压力,持续试压至少2min,观察系统表现,没问题后,调整到目标qps,持续施压2min或者更长,观察系统表现,记录系统各项关键指标及业务成功率。
(3)混合压测
指的是多场景同时压测,这种情况往往需要充分评估好多个场景总的流量对模块甚至产品的影响。
各模块混合压测时,需要评估好各自qps对模块及对下游模块可能造成的影响。

某客户Quick BI性能优化实践

1、Quick BI数据门户压测与调优
在实际客户案例中,为了从根本上解决Quick BI数据门户性能问题,采用如下方案进行整体的优化与压测验证:
image.png
首先优化分为任务优化和产品优化:

任务优化
(1)第一轮压测:首先对Quick BI进行一轮压测,记录当前系统性能数据。
(2)查找优化对象:ADB产品根据top10耗时SQL,针对性的探查性能瓶颈,Quick BI产品侧通过查找元仓,找到自定义SQL数据集,并筛选非传参且耗时高的数据集。
(3)优化:
ADB以优化表DDL为主和规格评估为主,通过在ADB库中查询INFORMATION_SCHEMA.PARTITIONS,获得各表组分区如下:
image.png

为了使数据分布均匀,避免长尾问题,根据产品建议,通过重命名原表->创建新表->数据回写的方式,将ADB中非128分区的表进行DDL改造,分区调整为128分区。

Quick BI通过将自定义SQL数据集固化成结果表的方式,降低使用此类数据集时每次查询复杂SQL的性能消耗。通过元仓查询到的此类数据集如下,其中有两个数据集不是传参类型自定义SQL数据集,并且SQL非常复杂,对ADB系统性能影响非常大,针对这两个数据集进行优化调整,将处理逻辑下沉在Dataphin的ads层,并将结果表同步至ADB,供Quick BI的报表直接访问。
image.png

(4)第二轮压测:对Quick BI各场景页面进行第二轮压测,验证优化效果。

产品优化:
(1)Quick BI产品:后续升级为3.6.1版本后,支持数据缓存功能,可以将各场景默认展示页的数据进行缓存,降低对后端数据库的性能消耗。

(2)ADB:优化完成后,可视情况进行限流,从而在资源紧张情况下保障绝大部分用户的正常使用。后续从2.0版本升级为3.0版本,写入效率预计提升50%,读取效率预计提升40%,并且ADB 3.0版本支持存储计算分离。

另外在Quick BI独立部署正式上线期间,GTS侧进行现场重保,各相关产品侧在远程进行重保,进而保障客户数据门户环境平稳运行。

与此同时,因ADB资源不足,对ADB规格进行评估,联合商务侧临时使用代金券,将ADB资源由进行临时扩容,优先保障客户上线,根据上线后实际客户使用情况决定是否保持扩容规格。

系统调优的目的在于满足客户对数据中台数据门户性能的需求,那么对数据门户的压测必不可少,经过分析,20个qps即可满足当前客户的使用需求,在实际进行压测是,针对数据门户场景分别进行压测,压测方式如下:
image.png

2、事后监控
在扩容和调优完成后,我们还需要对系统的使用情况进行监控,监控指标如下:
image.png
通过监控指标项发现,扩容和优化后:

(1)每日1:30~8:30左右,数据中台数据写入ADB库,CPU等资源会占用较高,使用率可以达到90%+,但因是非业务使用时间,所以对业务使用无影响。

(2)工作时间CPU使用平均40%左右
业务人员在日间使用期间,系统当前配置在理论上可以支持100用户并发(20qps)的使用,而且客户侧在短期内会进行数据中台门户系统推广,因此保留当前系统配置,应对后续推广的用户涌入。

Quick BI性能优化建议

1、Quick BI开发规范
总结上述性能测试和性能优化的结果,开发人员在使用Quick BI进行可视化开发的过程中,应遵循一定的开发规范,以保证在前期就规避一些性能风险,提升整体平台的性能。

自定义SQL建模
image.png

使用Quick BI进行数据可视化开发,其中的大部分SQL都是Quick BI的SQL引擎自动生成的,此处不需要开发人员关注。而在Quick BI专业版中支持的“即席分析SQL”功能(如上图)中,允许开发人员通过自定义的SQL创建数据集,此处需要开发人员遵循以下原则进行SQL开发:

(1) 只有必须使用即席查询SQL中的“参数”传递功能,以满足特殊场景需要的时候,才使用“即席分析SQL”的方式创建数据集。其他场景下,都要求将此数据查询的过程前置到数据计算过程里面,即使用Dataphin等工具将所需加工的数据提前计算好,形成专门的数据表,Quick BI直接使用该数据结果,而不是在Quick BI中,创建数据集的时候进行比较复杂的SQL数据加工。
(2) 自定义SQL,不建议使用超过3个以上的union 类型的操作。不建议使用超过5个字段以上的group by 操作。不满足的情况,均建议采用上面1)中的方式,前置到数据计算环境,将数据处理好,再在Quick BI中使用数据。
(3) SQL的编写规范,需要严格遵循《数据中台模型设计&数据开发规范》的要求编写。
4) 可通过简单的性能测试衡量在即席分析SQL中编写SQL脚本是否可行,在该过程编写的SQL,页面执行后,返回结果的时间建议不要超过1s的时间,否则相应的页面查询很可能无法满足客户对相应时间的要求。

数据集表关联
Quick BI在数据集管理页面,支持通过数据表的关联建立数据集
image.png

此处也比较可能产生性能问题。开发过程中需循序以下规范:
(1) 应尽可能减少使用数据表关联的功能,如果能够在Dataphin等数据加工工具提前将关联加工好,则要求此关联过程前置到计算层。
(2) 如前面的1)条无法满足,则需要尽可能的使用相同数据源的数据进行关联。
(3) 如果前面1)2)都无法满足,应尽量使用RDS或ADB数据库中的数据集进行关联。尽量避免使用ODPS的数据源进行关联访问。
(4) 尽量避免两个表全关联,或者笛卡尔积的方式进行关联,这样可能造成数据集数据量极大膨胀,产生性能问题。
(5) 可通过简单的性能测试衡量在数据集中进行数据表关联操作是否可行,在数据集中进行关联,页面刷新预览数据时,返回结果的时间建议不要超过1s的时间,否则相应的页面查询很可能无法满足客户对相应时间的要求。

数据集缓存
Quick BI在数据集页面,支持对数据集进行缓存配置,如下图:
image.png

Quick BI的3.6.1版本以后支持对ODPS和ADB数据源的数据集进行缓存配置,技术上会将开启了缓存的数据集数据缓存到Quick BI安装部署时配置的Redis上面,以减轻对来源数据库的频繁访问,加速查询性能。使用该功能,需要注意:
(1) Redis数据缓存按小时进行更新,因此开启了缓存的数据集数据不会实时与数据源进行同步,如源数据发生变化,查询结果不会实时响应,只会根据Redis的更新才会识别到最新的数据变化。
(2) Redis的空间有限(具体示安装部署时的配置而定),因此也不建议所有的数据集都开放该缓存功能,而应选择并发查询度较高,性能较差的数据集,有重点的开放该功能。

2、 AnalyticDB for MySQL表设计规范

ADB数据模型:
ADB是MPP分布式架构,其数据模型如下:
image.png
用户在设计表的时候,需要重点关注以下四点:
分布键(一级分区键)
分布键(也成为一级分区键)根据分布键的Hash值,将表数据打散到各个数据分片。
所以,在选择分布键时,一定要尽量确保数据分布均匀,避免数据倾斜。这是重中之重!
同时,尽量选择多表join时的关联键,避免数据shuffle。
针对一些数据量少且很少更新的码表,可以选择创建为“维度表”,来避免数据shuffle,提升性能。

分区键(二级分区键)
再每一个一级分区下,再根据 List Value,将数据分配多个分块。

分区键通常基于“日期”,并根据二级分区数的定义,按照分区键值的大小进行排序,保留最大的N个二级分区。这样就赋予数据“生命周期”的特性。

主键(Primary Key)
通过主键进行记录的唯一性判断,且分布键和分区键必须包含在主键中。

为了确保主键的性能,通常要选择“数值型”的列作为主键,并严格控制主键的个数,通常控制在4个列以内。

聚集列(Clustered Key)
通过将相同的数据物理排序在一起,可以达到降低IO并提升查询性能的效果。通常聚集列选择那些有一定重复数据量、且常常作为查询过滤条件的列,例如商品类型、人员部门等。

3、AnalyticDB for MySQL开发规范
AnalyticDB for MySQL拥有强大的自研存储、MPP计算引擎和先进的优化器,通常客户无需过于关注SQL是否规范。但是,以下的基本原则可以充分利用ADB的特点,已达到最佳的性能:

尽量避免列上嵌套函数
如下,如果在列上嵌套函数,会导致该列上的索引失效,从而需要扫描全表数据,增加系统资源消耗的同时还会影响查询的性能。
image.png

因此,我们在编写SQL时要尽量避免在列上嵌套函数,上面的SQL可以做如下修改:
image.png

尽量确保join时基于分布键:
如果两表Join是不是基于分布键,则需要进行大量的数据shuffle,如下:
例如:
表 customer 的分布键是 UserId
表 order 的分布键是 OrderId
SQL:
Select * from customer c join order o on c.userId=o.userID

在SQL执行时就需要对order表shuffle数据,这样会增加系统的资源消耗,包括内存、网络、CPU等,查询响应时间也会增加
image.png
因此,我们需要修改 Order 表的分布键为 UserID,这样上面的SQL在执行时会在单个ECU本地内完成计算,从而提升性能,如下:
image.png

尽量多的添加过滤条件
默认情况下,客户无需关心哪些列需要创建索引,ADB会在所有的列上创建索引。但是如果过滤条件的过滤性不佳,甚至是缺失,则无法发挥ADB强大的自研索引的性能,需要进行全量数据的扫描。因此,我们需要根据业务和数据的特性,尽可能多的添加过滤条件。

 

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

到底要不要报考“通信工程”?

作者 | 小枣君来源 | 鲜枣课堂“通信工程”是干嘛的通信工程,英文全称叫做Communication Engineering,是一门重要的工学基础学科。根据教育部《学位授予和人才培养学科目录设置与管理办法》,“通信工程”属于二级学科,归属于“信息…

日均调用量超13亿次,阿里达摩院研发全球首个实时翻译直播

简介: 近几年来,直播电商到处开花,但绝大多数都是国内的中文直播。如果想买外国电商主播推荐的商品,语言不通怎么办?这一难题已被阿里巴巴(下称 “阿里”)攻克,阿里速卖通是面向全球…

双十一消费近万亿!1亿人见证数字物流,“尾款人”收货更快了?购物狂欢七大趋势浮现

来源: 券商中国 作者: 段久惠 国人买买买,双十一期间交易额首次进入万亿元时代。 今年双十一分为两个阶段,11月初就开始预售,一方面减缓了商家发货的压力,另一方面在营销上商家有了两波密集营销的机会以带…

数据爆炸时代,浪潮K1 Power释放新算能

IDC 预测,到 2020 年至 2023 年,亚太地区 GDP 的 65% 以上将实现数字化,数字化转型支出将达到 1.2 万亿美元。其中到 2025 年,超过 25% 的 500 强企业将成为软件开发公司。 数字化进程的加快带来的科技革命和产业变革…

AI云原生浅谈:好未来AI中台实践

简介: 2020年云栖大会上,好未来AI中台负责人刘东东,分享了他对AI云原生的理解与好未来的AI中台实践,本文为演讲内容整理。 AI时代的到来,给企业的底层IT资源的丰富与敏捷提出了更大的挑战,利用阿里云稳定、…

直击“上云”痛点的 MSP 新生意,万博智云发布云原生迁移工具 HyperMotion 3.0

作者 | 宋慧 出品 | CSDN云计算 头图 | 付费下载于IC photo CSDN 在 4 月对德勤《2021 年技术趋势报告》的报道时,德勤分析师曾提到,在中国近 20 年的 IT 历程中,经历 ERP 和 toC 浪潮之后的中国企业,对云计算的认识却停留在降低…

我看技术人的成长路径

简介: 有一句诗词说:宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒。其实就是讲内心修炼到了一种心境平和,淡泊自然的境界。 作者 | 儒枭 为什么要成长 成长是为了在职场升值,提升职场竞争…

KubeVela 正式开源:一个高可扩展的云原生应用平台与核心引擎

美国西部时间 2020 年 11 月 18 日,在云原生技术“最高盛宴”的 KubeCon 北美峰会 2020 上,CNCF 应用交付领域小组(CNCF SIG App Delivery) 与 Open Application Model (OAM) 社区,以及来自阿里云、微软云的 OAM 项目维护者们在演…

ESL:我们如何使用首云混合云产品实现提效降本

背景ESL Play是世界上最大也是历史悠久的电子竞技独立联盟,成立于1997年。ESL Play负责组织和举办电子竞技赛事,并提供在线直播。在所有电子竞技平台中,收看时间长期位居行业第一。其举办赛事覆盖PS、PC、移动端等多个平台。ESL Asia是ESL Pl…

鹰角网络全球海量数据,一键轻松统一存储与处理

简介: 对于鹰角网络遇到的数据激增以及数据统一收治方面的问题,阿里云对象存储 OSS 为其提供了统一的数据存储 池,方便鹰角网络将全球收集到的海量不同数据进行统一存储,同时阿里云对象存储 OSS 可无缝对接 云原生数据湖 分析 DLA…

直击“上云”痛点的 MSP 新生意

作者 | 宋 慧出品 | CSDN 云计算头图 | 付费下载于 IC photoCSDN 在 4 月对德勤《2021 年技术趋势报告》的报道时,德勤分析师曾提到,在中国近 20 年的 IT 历程中,经历 ERP 和 toC 浪潮之后的中国企业,对云计算的认识却停留在降低 …

申通完美支撑“双11”——亿级包裹背后的云基础设施

简介: 亿级包裹洪峰过境,千万级订单毫秒级响应,系统稳如泰山。今年双11,申通的系统前所未有的流畅与平稳。 今年双11,申通的系统前所未有的流畅与平稳 “双11全站跑在阿里云上,亿级包裹洪峰过境&#xff0…

java map是大括号_Java8如何基于flatMap处理异常函数

Java8的flatMap函数,作用是:如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。见到的映射函数往往都只有一句话,连大括号都不需要加的,如下:String personValue Optio…

AI 赛道“新选手”锐捷发布新一代 AI SaaS 云平台,支撑百万级零售货柜

编辑 | 宋慧 出品 | CSDN 云计算 头图 | 付费下载于 IC photo 近几年,传统零售模式经历了几轮深层次变革,2016 年是新零售的元年,2017 年无人零售在国内又刮起了一阵大风,从传统零售到新零售再到无人零售等概念的革新&#xff0c…

2019 年 CNCF 中国云原生调查报告

简介: 在 CNCF,为更好地了解开源和云原生技术的使用,我们定期调查社区。这是第三次中国云原生调查,以中文进行,以便更深入地了解中国云原生技术采用的步伐及如何在庞大且不断发展的社区中赋能开发者并作出变革。本报告…

快手基于 Apache Flink 的优化实践

本次由快手刘建刚老师分享,内容主要分为三部分。首先介绍流式计算的基本概念, 然后介绍 Flink 的关键技术,最后讲讲 Flink 在快手生产实践中的一些应用,包括实时指标计算和快速 failover。 一、流式计算的介绍 流式计算主要针对 u…

探索交通治理新思路,广州黄埔智能交通治“堵”

路口车辆平均延误下降20%、主干道平均行程时间下降25%、有轨电车每趟行程时间节省约28%……随着政府科学管理与人工智能技术的结合,广州黄埔越来越多交通路口正在逐渐AI化,市民出行效率得以大幅提升。在共建共治共享理念指导下,广州黄埔正在拓…

Flink 双流 Join 的3种操作示例

在数据库中的静态表上做 OLAP 分析时,两表 join 是非常常见的操作。同理,在流式处理作业中,有时也需要在两条流上做 join 以获得更丰富的信息。Flink DataStream API 为用户提供了3个算子来实现双流 join,分别是: join…

云原生趋势下的迁移与容灾思考

作者 | 孙琦 导读:下一个云原生颠覆的领域会不会是在传统的容灾领域呢?在云原生的趋势下,如何构建应用系统的迁移与容灾方案? 趋势 1. 云原生发展趋势 云原生(Cloud Native)是最近几年非常火爆的话题&…

深度盘点Python11个主流框架:Pandas、Django、Matplotlib、Numpy、PyTorch......

六月份TIOBE编程语言排行榜,位居第二名的Python与第一名C语言之间的差距正在逐渐缩小。Python如此受欢迎一方面得益于它崇尚简洁的编程哲学,另一方面是因为强大的第三方库生态。要说杀手级的库,很难排出个先后顺序,因为python的明…