技术面来看在线配资平台 ,7月5日以来,油价处于单边下跌走势,短线仍有进一步下行风险,美原油关注6月初低点78.28附近支撑。
Again Capital 合伙人John Kilduff称:"市场似乎已经认识到,尽管这些事件非常可怕,但也不可能引发一场全地区范围的冲突。"
原油短线(1H)走势继续向下创新低测试76价格。均线系统发散向下排列,短线客观趋势重回下行节奏。早盘油价在76.20附近窄幅调整,预计日内亚欧市场低位次要震荡,北美开盘走势将继续向下创新低概率较大。仍维持区间内下落节奏,测试区间下沿位置。
导读:货拉拉大数据团队在成立三年内解决了诸多业内难题,取得了一些阶段性成果。在本次分享中,作者将深入探讨大数据基础架构如何实现高钱效、高运维效率和高分析效率,其中遇到哪些挑战以及解决思路。
01 背景与挑战
1. 货拉拉介绍
货拉拉是一家集货运、搬家、跑腿等业务场景于一体的多边线上交易平台,成立于2013 年,在粤港澳大湾区取得了飞速发展。目前业务已覆盖全球 11 个市场,包括中国及东南亚、南亚、南美洲等地区。货拉拉作为一家拥有 1050 万月活用户、90 万月活司机的货运物流交易平台,拥有 8 条业务线覆盖国内 360 个城市,广阔的业务量带来巨量的数据,目前 1000 多台机器的存储量达 20PB+,7 条 IDC 处理日均 20K+ 的任务。庞大业务量能安全、稳定运转离不开大数据基础架构的支撑
目前货拉拉大数据团队已完成三大体系(大数据安全体系、成本管控体系、稳定性保障体系)和四大支柱(平台服务层、计算引擎层、集群管理&存储层、基础资源管理层)的大数据基础架构建设。
平台服务层提供数据治理能力和基础平台能力服务;
计算引擎层包含离线引擎、OLAP 引擎、(规划中的)AI 引擎;
集群管理&存储层包含在线存储(如 ES 和 HBase)、离线存储(HDFS、云存储)、资源管理(YARN、规划中的 K8s);
基础资源管理层包含基础设施管理体系(主要是货拉拉内部连线的各云厂商提供的物理资源,及对其进行本地化管控的体系),和正在进行中的智能运维体系。
2. 问题与挑战
在货拉拉大数据团队建设过程中,面临的问题主要有 3 个:
钱效低,具体表现在:
集群资源利用率低;
波峰波谷效应明显,采用高峰资源保障,带来成本浪费;
大数据成本增长快,缺乏对数据的冷热分层、生命周期的管理;
运维效率低,面对全球化/多地域/多集群/多服务的复杂场景,主要依赖 SOP 和脚本来保障运维,效率低下;同时,运维变更的稳定性比较差;运维人员的工作量繁重,被迫拉长工作时间;
分析效率低,用户经常吐槽查询引擎速度太慢,他们对分析效率的追求永无止境。
那么,如何在保障稳定的前提下,实现高钱效、高运维效率、高分析效率的极致效率数据架构呢?
接下来将分享货拉拉大数据团队展开的探索,以及其中的思考与经验。
02 基础架构实践
1. 高钱效
主要从资源弹性、异构计算两方面实现。
(1)资源弹性
离线计算资源在夜晚/白天、大促/春节等场景下,呈现明显的波峰波谷特征,离线高优任务的分布也比较集中,主要在凌晨到早上 6 点之间。如果按照波峰的资源水平提供保障,就会造成波谷时段的资源成本浪费。如何让固定大小的资源池提供弹性的计算资源成为了当务之急。
现有公有云能提供的实例主要分为:预留实例、按需实例、竞价实例,相应特点及价格如上。根据各云厂商能提供的实例特点及价格,货拉拉大数据团队将一部分资源实例替换成弹性实例,形成高低峰弹性扩缩容的策略机制。在凌晨至 12 点交易高峰期扩容弹性实例,12 点过后,回收部分弹性实例,进而节省资源。
基于上述策略,通过系统架构实现弹性扩缩容服务,系统包含弹性扩缩容策略和机制的管理,并对弹性实例进行购退对账,防止因遗忘退订弹性实例而造成的资源浪费;结合自动化运维平台,对弹性实例进行购退和上下线;对 YARN 进行优先级调度的改造,调整实例优先级、队列优先级,出现问题时进行调度降级,保证任务稳定性。
通过资源弹性的管理,集群成本节省 20%~30%,并且保证高优作业的稳定性,同时,也提高了弹性资源的利用率。
(2)异构计算
在计算降本方面,除了资源弹性、计算超卖、计算资源治理外,还有什么可优化的手段吗?我们将计算节点机型由 x86 替换为了 ARM,以下是 ARM 和 x86 的优劣势对比:
ARM 在成本和功耗上具有显著优势:ARM 的单核成本相较 x86 至少低 15%,且功耗较低,大量应用于移动端。
但 ARM 的整体软件兼容性较差,部分需要适配;同时业内服务端使用较少。
货拉拉大数据团队将 ARM 成功应用到大数据架构中,主要做了三部分工作:
首先,组件适配,包括大数据组件适配,例如目前主要使用的计算引擎 Tez、spark、YARN(某些 java 包等);和基础组件适配,例如公司级的安全组件、运维组件等。
第二,在调度改造方面,支持用户在应用层选择架构,同时也完成了对 PySpark 的兼容支持;
最后在机器物理资源压测、TPC-DS 压测、核心链路任务的抽样测试后发现,使用 ARM 节点后集群性能没有明显下降。
整体 ARM 实践的上线策略遵循分批灰度上线,控制风险,并对任务和资源进行监控,最后逐步完成了集群机器替换。
这里分享一个问题:在灰度上线的过程中,团队发现带窗口函数的 SQL 在物理资源使用正常的情况下,task 的运行时长会被拉长 10 倍。
通过对比火焰图,发现这种 SQL 触发了 JVM 的逆优化,导致大部分 CPU 时间消耗在 JVM 的代码中。对于此问题的一个解决方案是,将 ARM 的资源版本替换为云厂商的版本。
最终在团队的努力下,完成了离线计算 50%ARM 机型的替换,集群成本节省 10%(大概百万/年的水平),之所以替换 50%,是因为受限于云厂商的供给。上线 ARM 机型后,未出现高优作业的延迟故障。
2. 高运维效率
主要从大数据自动化运维、大数据云原生两方面实现。
(1)大数据自动化运维
团队内部大数据运维复杂度很高,面对的是 3 个业务线、30 多套集群、20 多个服务组件、上千个节点的复杂环境,且组件之间的运维流程不能复用;在如此复杂的场景下,运维主要依赖大量的 SOP,步骤复杂、人工操作、脚本不灵活;使 SRE 方向的同事超过 70% 的工作时间投入到事务型的运维工作场景中,员工幸福感很低。
根据下图可以感受一下运维场景的复杂度,如 HBASE 版本发布的工作流:
在如此复杂、低效的场景下,如何尽快实现自动化运维呢?
首先,需要构建集群的资产管理能力,可以统一资产管理入口,并对资产进行全生命周期管理;
然后,在工作流编排能力上,将 SOP 和运维脚本固化成工作流,使其具备分布式调度执行的能力;
最后,优先完成高优高频场景的自动化改造,快速提升运维效率。
通过实现大数据自动化运维在典型的场景上提效非常明显。
(2)大数据云原生
大数据领域主要关注的问题就是容器化和 DevOps,相对应的就是成本和效率。在成本方面,将 YARN 替换成 K8s,统一在离线资源池,为在离线混部打下基础;运维效率方面,面向 K8s 的运维比面向传统机器的运维要方便很多。
之所以做 Remote Shuffle 框架,主要基于以下考虑:
出发点是将计算节点本地的 shuffle 数据保存到远端,本地的计算节点就可以实现无状态化,计算节点便可进行容器化部署,为大数据云原生打下基础。
因为货拉拉使用 Tez 计算引擎,在选型方面主要考虑:通用性,能支持 Tez、Spark、MR;相比本地 shuffle,无明显性能下降;提供高可用的能力,且对 Tez 源码尽量少改动、侵入;首选 Apache 社区活跃项目。
经过对业界 RSS 框架的对比,与社区进行深度共建,最终选择腾讯开源的 Uniffle 框架,团队牵头设计 Tez Client 方案,向社区贡献了近 2 万行代码,成功让 Uniffle 框架支持 Tez。目前 RSS 在公司内部逐步灰度上线中。除了 RSS 外,团队还实施了 Flink on YARN 替换成 Flink on K8s 的方案。
3. 高分析效率
即引擎提效。
用户在即席查询过程中,经常遇到的一个痛点就是查询速度慢。在离线 ETL 链路中,团队会对一些库表进行数据质量的校验,如果 SQL 运行慢,也会影响数据链路的产出。
针对用户的痛点,团队开发了离线混合引擎服务。
在系统设计时,主要考虑以下三点:
多引擎路由,支持自动降级。主要思想是根据各引擎优缺点,将 SQL 路由到最适合它的计算引擎上。通过观测 SQL 的执行计划,查询数据扫描量和算子分布,匹配路由策略,最终分配到合适的计算引擎上。如果 SQL 执行失败,将自动降级到其他引擎。若所有引擎都执行失败,由 Hive 做兜底,保证执行成功。
对用户屏蔽多引擎差异,降低使用复杂度。不会更改用户使用习惯,用户以 Hive 语法编写 SQL,后台进行 SQL 转化,对用户屏蔽多引擎语法的差异。
分布式架构,高可用且支持横向扩展。为了应对未来的大规模需求。
另外,实现了多引擎兼容。通过对 Presto 进行 20+ 改造,包括 Hive 隐式转换的适配、Hive 视图的适配、对齐 Hive 的 UDF 语义等,最后达到了 84% 的兼容率。
数据质量保障方面,系统在灰度上线之前,将线上真实的 Ad-Hoc 的 SQL 查询进行多引擎数据对比,保证 100% 通过数据质量校验。
目前 Presto 路由率 * Presto 成功率能够达到 70%,并且在重点场景提效明显。
03 总结与思考
高钱效、高运维效率、高分析效率这三大目标驱动了货拉拉大数据基础架构的演进。
实践证明,要通过明确的收益驱动基础架构演进,引入新技术前多思考,不能贸然引进一些火热的新技术。目前货拉拉还未引进湖仓一体,因为其收益尚未明确。在成本和稳定性的基础上,只要领先业务“半步”即可,不需要过度演进。
04 未来展望
最后,对未来工作的规划主要包括以下几大方面:
1. 引擎提效
离线计算引擎由 Hive 迁移到 Spark。
2. 极致弹性
根据负载压力更精准、及时地弹性伸缩。
3. 大数据智能化运维
继续完善对云原生场景的支持,实现数智化运维(AIOps),做到故障自愈、全链路诊断。
4. 离线混部
完善大数据全面云原生化,继续探索符合业务场景的在离线混部策略。
5. 流批一体&湖仓一体
进一步探索符合业务需求的落地场景在线配资平台 。