写点什么

顺丰科技 x StarRocks :双十一实时运单分析实践

作者:StarRocks
  • 2021 年 11 月 24 日
  • 本文字数:4116 字

    阅读完需:约 14 分钟

顺丰科技 x StarRocks :双十一实时运单分析实践

顺丰科技有限公司隶属于顺丰速运集团,成立于 2009 年,致力于构建智慧大脑,建设智慧物流服务。顺丰科技经过多年的自主研发,已经建成大数据整体生态系统,完成数据采集与同步、数据存储与整合、数据分析与挖掘、机器学习、数据可视化等平台的构建。在建设底盘平台的基础上,结合大数据、区块链、物联网与人工智能技术,广泛应用于速运、仓储、冷运、医药、商业、金融、国际等业务领域。


作者:严向东

顺丰科技大数据平台架构师

顺丰大数据平台简介

早期顺丰在 OLAP 层主要使用了 Elasticsearch、ClickHouse、Presto、Kylin 这四个组件。

  • Elasticsearch 在顺丰场景使用的最多,倒排索引的机制下,检索效率高,整体运维也比较方便。目前在日志类、条件检索类的场景用的比较多。目前版本以 Elasticsearch 5.4 为主,新接入的业务使用了 7.6 版本,基于标准版本进行了一些定制化的开发工作,包含跨机房备份方案、K8S 容器化部署、数据服务平台等。

  • ClickHouse 是这两年引入,用于一些重点的运单场景,进行了 K8S 集群化改造,很好的满足了资源快速交付的需求。

  • Presto 在顺丰也使用的很多,主要用于 Hive 数据的查询。我们针对 Presto 进行了 Yarn 集群部署的改造,很好地用到了 Yarn 队列的资源。

  • Kylin 使用的相对较少,目前只在财经线的几个业务上作为试点。

当前痛点及产品选型

顺丰通过内部容器化建设、组件深度定制、组件平台的建设,组件的一些突出问题、共性问题已经解决,但是还有一些难以解决的组件自身的痛点问题。我们对这些组件的问题进行了一些总结:

  • 一、多版本多框架并存、基础组件升级难。由于历史原因,同时存在多个版本在线上运行,但因为多个版本的不兼容性,用户业务在线上稳定运转,主动切换意愿不高,导致版本难以统一,组件升级方案复杂、操作风险高,也是组件升级难的另外一方面原因。

  • 二、用户选用组件容易一刀切。在实际的应用中,有很多用户进行大数据选型时,缺乏对组件本身的了解,导致大量的使用不合理的情况,如使用 ES 做大量的聚合计算、使用 Presto 做报表、使用 Kafka 做批量交互等。

  • 三、使用难/运维难。各种组件的使用/运维不尽相同,需要用户和运维都要具备相应的专业知识。


OLAP 产品选型

目前 OLAP 场景,各家百花齐放。可以选择的组件很多,选择合适的组件需要方法论的支持。目前我们顺丰在选型上,遵照了以下原则:

  • 组件的核心能力要够强,短板不明显。

  • 组件交付的版本工程质量高。

  • 核心诉求/大的生产环境的问题响应足够及时。

  • 可塑性强,未来长期发展潜力大。

  • 运维的门槛要低。


我们针对性进行了相应的评估,评估包含下面一些方面:

  • 不同产品之间使用标准测试集的横向评估,主要选取评估的组件有 ClickHouse、Presto、Apache Doris、StarRocks。

  • 中等业务规模的业务体验:10 亿规模的契合度高的场景,带 Join。

  • 公司内典型场景的需求评测:百亿规模的运单场景的典型 SQL 等。

  • 重点功能项的评测:如大数据数据导入、大表 Join 、failover 等。


从评估的结果来看,对于 StarRocks 我们整体还是比较满意的,最终我们选择了 StarRocks ,基于如下的考虑:现阶段 StarRocks 性能、稳定性占优;StarRocks 处于高速发展期,能够提供专业的技术支持、生产环境问题/需求的快速反应;StarRocks 拥有强大的运维管理系统,用户开发、运维的功能很全面。

StarRocks 应用实践

整体目标

顺丰引入 StarRocks 的目标是:使 StarRocks 成为一站式的大数据分析平台的底座。从数据的源头来看,包含三条数据流:

  • 实时数据、离线数据导入,通过 StarRocks 原生的几种 Load 任务完成。

  • 通过 Flink/Spark 的 Connector 完成数据 ETL。

  • Hadoop、Elasticsearch、MySQL 等环境中的数据,作为数据源,通过 StarRocks 外表导入。


从数据使用的角度来看,通过 JDBC 接口给数据使用者提供服务,主要的数据使用者包含:

  • 组件开发/组件维护,目前顺丰环境对应的是大数据组件平台。

  • BI 工具平台,在顺丰内部叫作丰景台。

  • 数据中台,如数据服务、数据字典等。

  • 业务平台的访问,比如数据平台临时查询导数的平台,及其他一些业务平台。


为了应对统一的大数据分析底盘的诉求,需要一些场景化的能力,这里列一些我们主要的诉求:

  • 替代 Presto,在 BI 工具平台快速查询 Hive 数据。

  • 替代 ElastcSearch、ClickHouse、Kylin 做 OLAP 明细、汇总数据的存储。

  • 较好的数据导出能力,便于业务做二次分析。

StarRocks 应用进展

业务接入

  • 运单级别的业务已经完成开发,正在灰度运营中。

  • 其他几个细分业务领域也完成了接入,如财务、快运、国际等。

  • 其他也有一些业务正在接入、体验中。受限于前期的机器采购预算未申报,接入节奏不算快。


统一的 OLAP 平台能力建设

  • 已经可以进行 BI 工具平台打通。

  • 全链路的多个集群环境的搭建,包含测试集群/预发布集群/生产公共集群/容灾公共集群/重点业务私有集群。

  • 大数据平台 DataX 集成、Flink / Spark Connector 的集成正在开发/测试中。

  • 中台的数据服务、数据字典等正在进行相关的设计,目前也和鼎石团队在一起看如何拿到元数据。

实践案例

在物流行业,运单场景是最典型的场景。这里给大家分享一个顺丰最大体量级别的运单场景。这个场景原来是在 Oracle 上单机运行,更新频繁、对时效要求高。业务上存在着许多的痛点,业务数据成倍增长导致原来系统已经不堪负荷,主要表现为可用性不高、速度变慢、数据多份、时效性不高等。业务侧的诉求是希望接入 StarRocks 以后,性能和时效性大幅度提升,能够在现有业务翻倍双 11 场景下的撑得住,提供高可用的方案,能够快速扩容等等。


需求澄清

接到这个任务后,我们梳理了一遍需求:

  • 硬性指标,双 11 要满足单行数据 2k 左右大宽表、8 万 TPS 写入诉求。

  • 业务峰值效应明细,未来还会有大的增长空间。

  • 数据保存三个月以内的数据,目前数据量在百亿级别以内。

  • 旧业务改造需要考虑已有 BI 平台工具的 2K+报表的平滑过渡。

  • 数据导出需求,供业务侧做二次分析。


数据导入

针对需求,我们做了数据导入和查询两个方面的方案设计和优化。从数据导入来看,核心问题是提升单机数据写入性能。

  • 表设计按照日期分区,按照运单号分桶,第一个问题就是如何进行数据分布的设计,从使用经验来看,Kafka 分区个数与 StarRocks 的 BE 节点个数、导数任务并行度要一致,导入效率才最高。

  • 由于源头数据来源于不同的业务系统加工成大宽表,需要通过配置字段的 replace_if_not_null 支持部分字段更新,另外为了避免 Json 数据字段增删导致导数失败,需要每个字段指定 Json 位置。

  • StarRocks 导入能力与单条记录的字节数、合并效率有很大关系。为了更高的导入性能,我们把大宽表的按列分拆为两个,更新少的数据放入一个表(这里叫公表)、更新频繁的放到另外一个表(私表),多表的导入的任务数会增加。

  • 机器选型上,由于写入频繁,我们升级了单机 6 盘到 12 盘,未来考虑使用 ssd;StarRocks 向量化优化深入,我们升级了 40 核到 80 核,提升 QPS。

  • 系统按照日期进行分区,由于数据来源于多个业务系统,存在分区时间没有的情况,需要反查,初期方案是从 StarRocks 跨区查,效率较低,后面采用了 Flink 的 RocksDB 方案。

  • 跨机器跨磁盘的副本均衡问题:由于机器 down 机或者增删磁盘造成的,目前跨机器的副本均衡已经在最新版本解决,跨磁盘的副本均衡期待在后续版本解决。

  • 版本数问题:如果版本数过多会导致 BE 节点暂停从 Kafka 消费,导致数据导入效率下降。这里可以通过调整 Kafka 消费时间、合理设置分片、分区个数、副本个数减少版本数。


查询

  • 为解决原有系统的 2K+ 报表的平滑迁移问题,由于拆成了两个表,新增加了一个视图,保持跟原有表结构一致,降低迁移成本。

  • 跟 BI 平台合作,做了一些查询并行度限制核数据缓存策略,提高系统的稳定性。

为了提高的查询性能,做了一些针对性的优化工作:

  • 对于最常用的查询条件字段,加到 key 列,如客户的公司等。

  • 通过增加布隆过滤器索引提升查询效率。

  • 大表间的 Join ,调整 Join 的顺序(未开启 CBO )。

  • 两表 Join 时,增加冗余字段并放在 ON 条件里面使条件能够下推,减少扫描量。

  • 问题:为了提升查询性能,将查询条件中的非 key 列的加到了 key 列,对于此非 key 列的变更变成了删除+插入两步操作,可能会造成未合并的版本数累积。



目前系统的整体数据来源于多个业务系统,通过 Flink 进行计算后写入一个新的 Kafka ,StarRock 通过 Routine Load 从新的 Kafka 拉取数据,很好的实现了 Exactly Once 语义,各个系统的耦合度很低,可用度高。


为了更高的可用性,我们采用了双机房、双写、双活的方案。通过两种域名配置方式以负载均衡方式给 BI 工具和业务 APP 使用。业务 APP 通过域名、 JDBC LB 方案具有更高可用性,机器迁移、down 机无影响。

这里是我们具体的表设计:

1)聚合表模型、同时支持明细表和物化视图。

2)按照使用更新频度分成两个表,提高导入任务个数。

3)按照寄件日期分区,运单号分桶。

4)通过 replace_if_not_null 支持部分字段更新。

5)变化不频繁字段加到 key 列,并两个表冗余,提高查询效率。

6)两表按照 Collocate Join 提升 Join 效率。

7)按照日期动态分区,支持数据淘汰。

8)查询条件增加布隆过滤器索引,提升检索效率。



在适应性更高的场景、如不更新、数据量 10 亿以下等,StarRocks 更加得心应手,性能强大。这里是目前顺丰接入的其他一些非运单明细的场景,StarRocks 都有良好表现,如原财务系统,时常会出现告警。接入 StarRocks 以后,使用 1/3 的资源消耗即可良好的运行。

后续规划和社区共建

我们后续在 OLAP 方面的规划如下:

  • ClickHouse 的新业务接入已基本停止。

  • 明年准备大规模接入 StarRocks ,已经全面启动相关的机器采购预算申请,运单级别的业务系统已经有几个规划会进行改造接入。

  • 另外在云上数仓项目上,期待继续深入使用 StarRocks。


目前 StarRocks 已经源代码开放,面向未来,StarRocks 有更多的可能性。顺丰也有基于 StarRocks 建设统一、全场景、极速 OLAP 分析平台的诉求:

  • 从终端用户来看:建设一站式的开发/运营平台。

  • 从资源管理来看:达到 serverless 的管理目标、可衡量。

  • 从运维层面来看:更高可用性、更多的工具。

  • 从数据模型来看:更多的场景化模型支持。

  • 从统一查询平台:各种数据库引擎的更好支持。

  • 从生态来看:深入各个周边场景提供更多能力。


我们愿意与 StarRocks 社区一起,携手共进,为社区贡献我们的一份力量。


用户头像

StarRocks

关注

开源的新一代极速全场景MPP数据库 2020.08.08 加入

还未添加个人简介

评论

发布
暂无评论
顺丰科技 x StarRocks :双十一实时运单分析实践