顺丰科技 x StarRocks :双十一实时运单分析实践
“ 作者:严向东,
顺丰科技大数据平台架构师 ”
顺丰大数据平台简介
早期顺丰在 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 外表导入。
组件开发/组件维护,目前顺丰环境对应的是大数据组件平台。 BI 工具平台,在顺丰内部叫作丰景台。 数据中台,如数据服务、数据字典等。 业务平台的访问,比如数据平台临时查询导数的平台,及其他一些业务平台。
为了应对统一的大数据分析底盘的诉求,需要一些场景化的能力,这里列一些我们主要的诉求:
替代 Presto,在 BI 工具平台快速查询 Hive 数据。 替代 ElastcSearch、ClickHouse、Kylin 做 OLAP 明细、汇总数据的存储。 较好的数据导出能力,便于业务做二次分析。
StarRocks 应用进展
业务接入
运单级别的业务已经完成开发,正在灰度运营中。 其他几个细分业务领域也完成了接入,如财务、快运、国际等。 其他也有一些业务正在接入、体验中。受限于前期的机器采购预算未申报,接入节奏不算快。
已经可以进行 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 机无影响。
这里是我们具体的表设计:
在适应性更高的场景、如不更新、数据量10亿以下等,StarRocks 更加得心应手,性能强大。这里是目前顺丰接入的其他一些非运单明细的场景,StarRocks 都有良好表现,如原财务系统,时常会出现告警。接入 StarRocks 以后,使用1/3的资源消耗即可良好的运行。
后续规划和社区共建
我们后续在OLAP方面的规划如下:
ClickHouse 的新业务接入已基本停止。 明年准备大规模接入 StarRocks ,已经全面启动相关的机器采购预算申请,运单级别的业务系统已经有几个规划会进行改造接入。 另外在云上数仓项目上,期待继续深入使用 StarRocks。
目前 StarRocks 已经源代码开放,面向未来,StarRocks 有更多的可能性。顺丰也有基于StarRocks建设统一、全场景、极速 OLAP 分析平台的诉求:
从终端用户来看:建设一站式的开发/运营平台。 从资源管理来看:达到 serverless 的管理目标、可衡量。 从运维层面来看:更高可用性、更多的工具。 从数据模型来看:更多的场景化模型支持。 从统一查询平台:各种数据库引擎的更好支持。 从生态来看:深入各个周边场景提供更多能力。
我们愿意与StarRocks社区一起,携手共进,为社区贡献我们的一份力量。
如希望了解更多详情请关注我们!
联系电话:010-53322390
商务合作:bd@starrocks.com