跨越速运如何构建实时统一的运单分析

news2024/11/29 2:34:01

作者:张杰,跨越速运大数据架构师(本文为作者在 StarRocks Summit Asia 2022 上的分享)

作为大型现代化综合速运企业,跨越速运拥有 3000 多家服务网点 ,日均处理 30 多万票运单。海量运单数据涌来,统一 OLAP 引擎、建设实时数仓、将极速数据分析能力应用到多个场景,成为了跨越速运大数据部门的核心工作目标。

通过将 StarRocks 作为大数据引擎支持,跨越速运的单笔运单计算时长从 90 秒缩短到 4 秒,单位时间内订单计算量提升了 400%,每年节省了百万级成本开销。

本文就将着重分享跨越速运如何利用 StarRocks 构建统一极速的运单分析。主要内容包括:OLAP 引擎统一,实时数仓建设,多场景应用,总结和展望。

#01

OLAP 引擎统一

1、业务背景

跨越速运是一家主营“限时速运”服务的大型现代化综合速运企业,拥有“国家AAAAA级物流企业”、“国家级高新技术企业”、“中国物流行业 30 强优秀品牌”、“中国电商物流行业知名品牌”、“广东省诚信物流企业”等荣誉称号。跨越速运拥有员工 5万+ 名,服务网点 3000+ 家,覆盖城市 500+ 个, 日均处理 30万+ 票。

跨越速运的大数据中心提供了标准的大数据平台,为 Java 开发、基于场景的数据分析、定制化 BI 开发等需求提供了 100 多个相关基础工具、产品和服务组件。

集团大数据平台提供 1 万多个接口,客户可以使用这些接口来获取相关数据并开发实现所需的定制 IT 服务产品。平台所提供接口每天被调用的次数达到千万级数据量。

上游业务系统包括集团 ERP 系统或是业务移动端应用系统等对大数据平台的数据服务的时效性要求较高,99% 的响应时间都需要达到 1 秒以下。

大数据平台使用者包括整个集团所属的五万多名员工,涉及到所有的内外部生产数据,比如核算运单业务和绩效考核等等。

集团业务信息化早期,由于数据量和业务场景都相对较少,MySQL 被用来满足实际需要。后来随着数据量增多,场景增多,加入了大数据查询引擎 Presto 和易扩展 ES 引擎的相关使用,来满足大规模数据存贮和查询的需求。

后期又为了满足实时性需求,加入了 Impala + Kudu 的引擎,也加入 TiDB 的引擎,即便当时存在多种引擎的支持,但是在多表关联查询和大宽表聚合查询上的性能仍然存在一定的问题。

再后来加入了 ClickHouse,虽然在查询性能上得到了较大提升,但是也带了新的问题,比如维护性的工作增加、开发模式改变等,并且 ClickHouse 在多表关联查询的功能表现上较弱,无法满足实际业务需求。

基于以上变化,最后造成的局面就是 BI 开发人员在进行业务场景开发时需要判断到底需要哪种引擎来实现需求,出现了引擎选择困难。并且系统运维也需要对多种大数据引擎都有一定了解,才能满足维持系统稳定性的工作需求,变相增加了工作压力和响应了工作效率。

下图展示了使用 Presto 大数据查询引擎时,查询时间的表现,可以看到性能并不理想,工作时间段内 3 秒、5 秒等超时情况非常多,大量时间被花费在 SQL 性能优化上。

2、查询引擎选型

为了解决大数据平台引擎选择困难和运维保障要求高的技术痛点,大数据团队于  2021 年下半年做了要进行引擎收敛的决策。大数据团队根据实际运单场景和历史经验,并且使用同样的硬件机器和数据集,定义了满足自身需求的 Benchmark 标准,要求所选引擎既要有好的查询性能,又要能支持数据实时更新,满足实时报表的需求。

如下为性能测试结果对比图,可以看到 StarRocks 的表现要优于其他三种引擎。

3、引擎收敛

最终大数据团队保留了两个引擎,ES 引擎和 StarRocks 引擎。

ES 引擎可以解决大规模数据的明细查询问题,比如针对几个月或者是整年的数据明细下钻,数据并发查询等。

StarRocks 引擎则有以下优点:

  • AP 查询性能优异,市面上难有对手。

  • 兼容 MySQL 协议,对集团上游的系统完美结合,直接连接 MySQL 驱动即可完成连接,相关查询语法与 MySQL 兼容。

  • 支持主键更新模型,可以解决实时问题。

  • 支持多种类型的外表,支持联邦查询,支持 ES 外表、Hive 外表、集群之间的外表等更多场景。

  • 集群维护简单,对第三方组件依赖较少。

  • 集成了大数据平台相关工具,比如数据加载工具 Stream Load 和 Spark Load 等,优化了数据导入,比如上亿数据量导入时间从几小时缩短到几分钟。

4、最终收益

引擎收敛的结果在以下各个方面都比较突出:

  • 引擎变化带来的业务接口查询速度提升,接口查询速度达到毫秒级。一方面 BI 开发人员不用在 SQL 优化上花费太多时间,从而把精力放到业务理解上。用户在使用上体验提升,无延迟等待感。

  • 成为核心引擎,日均调用 600万+ 次,10+ 套 StarRocks 集群满足了 20 多个业务的需求。

  • 简化了 BI 开发模式,比如开发人员不需要把时间消耗在引擎选择上,加快开发进度。之前的架构中需要 ETL 过程所操作的数据预处理工具也可以通过 StarRocks 引擎上来实现。效能提升了 20%。

#02

实时数仓建设

1、运单分析-背景

大数据中心需要汇总上游各个业务系统数据,如销售、物流、绩效工时等相关数据,融合成大的运单宽表给到用户使用,下游包括 ERP 铸剑系统、BI 工具和星河大数据平台。

数据使用中就会遇到一些问题:

  • 字段多,合并效率低

  • 多维度分析 SQL 性能有待提升

2、运单分析-原有架构

在原有数据处理架构中,数据都是来自上游各个业务系统的 MySQL。通过 Binlog 用 Canal 工具同步到 Kafka,再通过一些自建的数据同步的工具,将数据同步到 Hive 的表上。这些数据是 5 分钟更新。基于这些更新,我们又做了离线处理逻辑,做宽表的合并,由最先的每天提供一次缩短到 2 个小时,无法再缩短。并且宽表中做数据查询速度也要 1 秒到 10 秒,查询延迟感较为明显,不能满足预期,使用体验较差。

3、运单分析-现有架构

现有数据架构处理中,宽表的字段合并交由 HBase 进行处理,上游可能有几十个 topic,利用 HBase CDC 的功能,将宽表的所有字段反向同步回 Kafka,就只有一个 topic 了,再用实时的 Flink 写到 StarRocks 中。基于 StarRocks 我们构建了运单实时宽表,所有运单分析都是基于 StarRocks 来做数据分析,在 StarRocks 我们接入了自己的 BI 工具。这样整个链路的时效从 2 小时缩短到 5 秒以内,并且数据接口查询速度变为 3 秒以内,提升非常明显。

4、运单分析-收益

目前实时数仓的查询性能比 Presto 提升了 300%,并且最新的 StarRocks 采用了 PK 模型(Primary Key Model),比之前的 UK 模型(Unique Key Model)在性能上提升了 200%。

另外,我们使用了 Flink StarRocks Connector,能够把数据实时地写入到 StarRocks 中去,能够按主键整行更新,并且整个链路更新时效小于 5 秒。

#03

多应用场景

运转成本优化项目,其目标是实现每笔订单运转成本最优。如下所示,从业务数据中抽取运单数据,实时同步到中间引擎上,原来使用的是 Impala+Kudu,后面替换成了 StarRocks。数据在计算引擎汇聚后,我们用 Java 程序做系统调用,去计算最优运转方式,推荐给业务方,辅助其决策。

如下图所示,业务最优的计算逻辑是在始发地和目的地之间寻找最经济路线,从而节省相关不必要成本。比如一笔订单从深圳发往东莞,正常流程是收件、分拨进入中转场,再一级级派送给用户,环节繁多。但其实始发地与目的地之间距离很近,通过直达的方式,可以节省很多成本。

采用 Java 调用,中间计算过程由 StarRocks 去实现,主要利用了 StarRocks 微批的能力和并发的能力。

通过新的 StarRocks 大数据引擎支持,最新的单笔运单计算时长从以前的 90 秒缩短到现在的 4 秒。并且由于其强大的批处理能力和并发计算能力,单位时间内订单计算量提升了 400%。

以前需要 15 台大数据节点来支持运单计算任务,现在使用 4 台新型大数据引擎就能完成需求。通过单笔运单优化,每年节省百万级成本开销。

#04

总结与展望

1. 过往经验

利用 StarRocks 的极致 AP 性能,对之前的五六套大数据引擎做了收敛。

StarRocks 大数据引擎中的主键模型实现了所需的实时数仓分析场景,带来了较好的使用体验,并且在核心业务场景上实现了成本的降低。

2. 未来尝试

未来将在以下三个方面进一步挖掘新引擎的价值:

  • 将使用新特性来验证资源隔离问题,进而减少集群的数量,降低成本,减少维护人员压力。

  • 基于新引擎,探索准实时性问题的解决方案。

  • 解决版本一致性问题,统一各个场景下新引擎的使用版本,降低维护复杂度和降低风险发生概率,提升集群稳定性。

关于 StarRocks 

StarRocks 创立两年多来,一直专注打造世界顶级的新一代极速全场景 MPP 数据库,帮助企业建立“极速统一”的数据分析新范式,助力企业全面数字化经营。

当前已经帮助腾讯、携程、顺丰、Airbnb 、滴滴、京东、众安保险等超过 170 家大型用户构建了全新的数据分析能力,生产环境中稳定运行的 StarRocks 服务器数目达数千台。 

2021 年 9 月,StarRocks 源代码开放,在 GitHub 上的星数已超过 3600 个。StarRocks 的全球社区飞速成长,至今已有超百位贡献者,社群用户突破 7000 人,吸引几十家国内外行业头部企业参与共建。

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

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

相关文章

博科交换机使用

博科交换机使用 ip查询 博科交换机的默认IP地址是10.77.77.77,用户名admin,密码:password。 ipaddrshowip修改 ipaddrset端口查询 交换机的端口表示为(A,B)或者(A,B;C,D)。 A,C表示交换机的…

使用JLINK给GD32下载程序

使用JLINK给GD32下载程序关于GD32单片机需要的工具和软件包①Jlink仿真器一个②相关软件包下载准备①选择好芯片②在DEBUG中选择JLINK下载现象总结关于GD32单片机 GD32是兆易创新基于Arm Cortex-M内核和RISC-V内核,推出的32位通用微控制器,对比了下两者…

[附源码]Python计算机毕业设计SSM流浪宠物申领信息平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Java中进制基础知识与算法题

本篇文章旨在给大家普及下计算机内部数据的机器级表示方式,即:二进制、八进制、十进制、十六进制… 对于进制,我们从小最先接触的是十进制,这个也是我们日常生活中应用最多的数值统计方式。然而,现实中我们感觉到的媒体…

python的opencv操作记录(十)——图像融合

文章目录前言opencv中的一个方法泊松融合图像梯度图像散度融合图像散度通过散度场进行图像重建泊松融合的一般逻辑前言 最近碰到一个项目上的难题,是要从电动显微镜对焦的多张图像进行融合。因为,显微镜物镜的景深范围较小,可能在同一视野中…

地理空间数据共享资源大汇总

1.全国12.5米分辨率ALOS高程数据 全国12.5米分辨率DEM数据,该数据由锐多宝的地理空间提供并进行分省裁剪与镶嵌,由测绘营地进行影像坐标系转换。 ALOS-12.5m高程数据参数: 覆盖范围:全国(仅有小部分区域存在数据空白…

本机使用python操作hdfs搭建及常见问题

一.虚拟机安装CentOS7并配置共享文件夹 二.CentOS 7 上hadoop伪分布式搭建全流程完整教程 三.本机使用python操作hdfs搭建及常见问题 四.mapreduce搭建 五.mapper-reducer编程搭建 本机使用python操作hdfs搭建及常见问题一、环境搭建1.打开虚拟机系统,打开hadoop2.修…

【JavaScript 逆向】极验四代滑块验证码逆向分析

前言 相较于三代滑块,四代的逻辑流程更简短,底图没混淆,某些点校验不严格 声明 本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除! 案例目标 滑动验证码&…

[NAS] QNAP/威联通 常用设置和操作

🍁简介 QNap 产品是一种可扩展的数据存储解决方案。它们包括具有 1 到 30 个驱动器托架的设备,并提供 HDMI、Thunderbolt 2 和 USB 3.1 等连接选项,以及 802.11ac/a/n Wi-Fi 和高达每秒 40 Gb 的以太网。内置软件提供基本服务,例如…

WeetCode2滑动窗口系列

一丶[无重复字符的最长子串](3. 无重复字符的最长子串 - 力扣(Leetcode))# 思路:# 维护一个窗口,窗口中不存在重复的字符,窗口右边界从第一个字符移动到最后,使用一个变量记录窗口大小的最大值 那么问题就变成了&…

浅谈h264和h265的区别

相比h264,压缩同样的视频获得同样的质量的情况下,h265可以做到压缩后的大小为前者的一半,但压缩时间复杂度增加。h264编码单元为宏块(MB),最大划分为16x16,而h265编码单元为编码树单元(CTU),最大划分为64x6…

C++ 不知算法系列之深入动态规划算法思想

1. 前言 前面写过一篇博文,介绍了什么是动态规划算法。动态规划算法的最大特点,原始问题可以通过分解成规模更小的子问题来解决,子问题之间互成依赖关系,先计算出来的子问题的结果会影响到后续子问题的结果。 有点类似于武侠片中…

Python——变量以及基础数据类型练习题

要求:注意变量名的命名规范问题!!!不能再出现没有意义的变量名!!!一行一注释,用下划线命名法。 请使用相对应的数据类型,不能全部使用字符串!!&a…

HotSpot VM垃圾收集器——Serial Parallel CMS G1垃圾收集器的JVM参数、使用说明、GC分析

目录HotspotVM的垃圾收集器简介1. Serial Collector2. Parallel Collector(throughput collector)3. Concurrent Mark Sweep Collector(CMS)4. Garbage-First Garbage Collector(G1)5. Z Garbage Collector…

STM32实战总结:HAL之GUI

在TFT上简单的显示字符、数字、汉字、图形、图片等,都是一些简单的显示。如果想要进行较为复杂的显示,就推荐使用GUI。 市面上常见的嵌入式GUI有LVGL,emWin(ucGUI),TouchGFX,Embedded GUI、QT f…

[附源码]计算机毕业设计springboot基于vuejs的爱宠用品销售app

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

ES系列二之常见问题解决

一 更新ES信息报错 报错信息如下:Use ElasticsearchException.getFailedDocuments() for detailed messages [{yjZ8D0oBElasticsearchException[Elasticsearch exception [typecluster_block_exception, reasonindex [au_report] blocked by: [FORBIDDEN/12/index …

c++ vector的模拟实现以及迭代器失效问题

目录 1.vector的模拟实现 2.迭代器失效问题 3.总结 1.vector的模拟实现 这里&#xff0c;我们使用三个指针来控制vector。 用_start指向头&#xff0c;_finish指向最后一个元素的尾巴&#xff0c;_end指向最大容量。 #include<iostream> #include<cassert>usin…

Spring Cloud Netfix Hystrix(断路器)

一、灾难性雪崩 造成灾难性雪崩效应的原因&#xff0c;可以简单归结为下述三种&#xff1a; 服务提供者&#xff08;Application Service&#xff09;不可用。如&#xff1a;硬件故障、程序BUG、缓存击穿、并发请求量过大等。 重试加大流量。如&#xff1a;用户重试、代码重试…

手记:把代码上传到Gitee等远程仓库的过程记录及常见问题

很久没用git了&#xff0c;指令都有点生疏了&#xff0c;今天上传了一些代码到码云上&#xff0c;先把过程记录下来供使用git的朋友参考。没有用图形化界面&#xff0c;因为只有熟悉指令才能真正的理解领会。 步骤一&#xff1a; 1、安装git&#xff1b;安装后可以使用指令git…