东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

实时计算在有赞的实践——效率提升之路

  • 2019-04-12
  • 本文字数:3652 字

    阅读完需:约 12 分钟

实时计算在有赞的实践——效率提升之路

1. 概述

有赞是一个商家服务公司,提供全行业全场景的电商解决方案。在有赞,大量的业务场景依赖对实时数据的处理,作为一类基础技术组件,服务着有赞内部几十个业务产品,几百个实时计算任务,其中包括交易数据大屏,商品实时统计分析,日志平台,调用链,风控等多个业务场景,本文将介绍有赞实时计算当前的发展历程和当前的实时计算技术架构。

2. 实时计算在有赞发展

从技术栈的角度,我们的选择和大多数互联网公司一致,从早期的 Storm,到 JStorm, Spark Streaming 和最近兴起的 Flink。从发展阶段来说,主要经历了两个阶段,起步阶段和平台化阶段;下面将按照下图中的时间线,介绍实时计算在有赞的发展历程。


2.1 起步阶段

这里的的起步阶段的基本特征是,缺少整体的实时计算规划,缺乏平台化任务管理,监控,报警工具,用户提交任务直接通过登录 AG 服务器使用命令行命令提交任务到线上集群,很难满足用户对可用性的要求。 但是,在起步阶段里积累了内部大量的实时计算场景。

2.1.1 Storm 登场

2014 年初,第一个 Storm 应用在有赞内部开始使用,最初的场景是把实时事件的统计从业务逻辑中解耦出来,Storm 应用通过监听 MySQL 的 binlog 更新事件做实时计算,然后将结果更新到 MySQL 或者 Redis 缓存上,供在线系统使用。类似的场景得到了业务开发的认可,逐渐开始支撑起大量的业务场景,详见 2017 年整理的一篇博客文章-《基于 Storm 的实时应用实践》


早期,用户通过登录一组线上环境的 AG 服务器,通过 Storm 的客户端向 Storm 集群做提交任务等操作, 这样在 2 年多的时间里,Storm 组件积累了近百个实时应用。 Storm 也同样暴露出很多问题,主要体现在系统吞吐上,对吞吐量巨大,但是对延迟不敏感的场景,显得力不从心。

2.1.2 引入 Spark Streaming

2016 年末,随着 Spark 技术栈的日益成熟,又因为 Storm 引擎本身在吞吐/性能上跟 Spark Streaming 技术栈相比有明显劣势,所以从那时候开始,部分业务团队开始尝试新的流式计算引擎。 因为有赞离线计算有大量 Spark 任务的使用经验,Spark Streaming 很自然的成为了第一选择,随着前期业务日志系统和埋点日志系统的实时应用的接入,大量业务方也开始逐渐接入。 同 Storm 一样,业务方完成实时计算应任务开发后,通过一组 AG 服务器,使用 Spark 客户端,向大数据 Yarn 集群提交任务。


初步阶段持续的时间比较长,差不多在 2017 年年末,有赞实时计算的部署情况如下图所示:


2.1.3 小结

这种架构在业务量少的情况下问题不大,但是随着应用方任务数目的增加,暴露出一些运维上的问题,主要在以下几个方面:


  1. 缺少业务管理机制。大数据团队平台组,作为集群管理者,很难了解当前集群上运行着的实时任务的业务归属关系,也就导致在集群出现可用性问题或者集群要做变更升级时,无法高效通知业务方做处理,沟通成本很高

  2. Storm 和 Spark Streaming 的监控报警,是各自实现的,处于工具化的阶段,很多业务方,为了可用性,会定制自己的监控报警工具,导致很多重复造轮,影响开发效率

  3. 计算资源没有隔离。资源管理粗糙,没有做离线系统和实时系统的隔离;早期离线任务和 Spark Streaming 任务运行在同一组 Yarn 资源上,凌晨离线任务高峰时,虽然 Yarn 层有做 CapacityScheduler 的 Queue 隔离,但是 HDFS 层公用物理机,难免网卡和磁盘 IO 层面会相互影响,导致凌晨时间段实时任务会有大量延迟

  4. 缺少灵活的资源调度。用户通过 AG 服务器启动实时任务,任务所使用的集群资源,也在启动脚本中指定。这种方式在系统可用性上存在很大弊端,当实时计算所在的 Yarn 资源池出现故障时,很难做实时任务的集群间切换


总的来说就是缺少一个统一的实时计算平台,来管理实时计算的方方面面。

2.2 平台化阶段

2.2.1 构建实时计算平台

接上一节,面对上面提到的这四个问题,对实时计算平台的初步需求如下:


  1. 业务管理功能。主要是记录实时应用的相关信息,并且和业务的接口人做好关联

  2. 提供任务级别的监控,任务故障自动拉起,用户自定义基于延迟/吞吐等指标的报警,流量趋势大盘等功能

  3. 做好集群规划,为实时应用构建独立的计算 Yarn 集群,避免离线任务和实时任务互相影响

  4. 提供任务零花的切换计算集群,保证在集群故障时可以方便迁移任务到其他集群暂避


所以在 18 年初,我们立项开始做实时平台第一期,作为尝试起初我们仅仅完成对 Spark Streaming 实时计算任务的支持, 并在较短时间内完成了所有 Spark Streaming 任务的迁移。 试运行 2 个月后,明显感觉到对业务的掌控力变强。随后便开始了对 Storm 任务的支持,并迁移了所有的 Storm 实时计算任务. AG 服务器全部下线,业务方再也不需要登录服务器做任务提交。


2018 年中,有赞线上运行着 Storm,Spark Streaming 两种计算引擎的实时任务,可以满足大部分业务需求,但是,两种引擎本身也各自存在着问题。 Storm 本身存在着吞吐能力的限制。和 Spark Streaming 对比,选择似乎更难一些。我们主要从以下几个角度考虑:


  1. 延迟, Flink 胜出,Spark Streaming 本质上还是以为微批次计算框架,处理延迟一般跟 Batch Interval 一致,一般在秒级别,在有赞的重吞吐场景下,一般 batch 的大小在 15 秒左右

  2. 吞吐, 经过实际测试,相同条件下,Flink 的吞吐会略低于 Spark Streaming,但是相差无几

  3. 对状态的存储支持, Flink 在这方面完胜,对于数据量较大的状态数据,Flink 可以选择直接存储计算节点本地内存或是 RocksDB,充分利用物理资源

  4. 对 SQL 的支持,对当时两种框架的最新稳定版本的 SQL 功能做了调研,结果发现在对 SQL 的支持度上,Flink 也具有较大优势,主要体现在支持更多的语法

  5. API 灵活性, Flink 的实时计算 API 会更加友好


出于以上几点原因,有赞开始在实时平台中增加了对 Flink 引擎的支持,选择 Flink 的更具体的原因可以参考我们另一篇博客文章-《Flink 在有赞实时计算的实践》


在完成 Flink 引擎的集成后,有赞实时计算的部署情况如下图所示:


2.2.2 新的挑战

以上完成之后,基本上就可以提供稳定/可靠的实时计算服务;随之,业务方开发效率的问题开始显得突出。用户一般的接入流程包含以下几个步骤:


  1. 熟悉具体实时计算框架的 SDK 使用,第一次需要半天左右

  2. 申请实时任务上下游资源,如消息队列,Redis/MySQL/HBase 等在线资源,一般几个小时

  3. 实时任务开发,测试,视复杂程度,一般在 1~3 天左右

  4. 对于复杂的实时开发任务,实时任务代码质量很难保证,平台组很难为每个业务方做代码 review, 所以经常会有使用不当的应用在测试环境小流量测试正常后,发布到线上,引起各种各样的问题


整个算下来,整个流程至少需要 2~3 天,实时应用接入效率逐渐成了眼前最棘手的问题。 对于这个问题。在做了很多调研工作后,最终确定了两个实时计算的方向:


  1. 实时任务 SQL 化

  2. 对于通用的实时数据分析场景,引入其他技术栈, 覆盖简单场景

2.2.2.1 实时任务 SQL 化

实时任务 SQL 化可以大大简化业务的开发成本,缩短实时任务的上线周期。 在有赞,实时任务 SQL 化 基于 Flink 引擎,目前正在构建中,我们目前的规划是首先完成对以下功能的支持: 1. 基于 Kafka 流的流到流的实时任务开发


\2. 基于 HBaseSink 的流到存储的 SQL 任务开发


\3. 对 UDF 的支持


目前 SQL 化实时任务的支持工作正在进行中。

2.2.2.2 引入实时 OLAP 引擎

通过对业务的观察,我们发现在业务的实时应用中,有大量的需求是统计在不同维度下的 uv,pv 类统计,模式相对固定,对于此类需求,我们把目光放在了支持数据实时更新,并且支持实时的 Olap 类查询上的存储引擎上。


我们主要调研了 Kudu,Druid 两个技术栈,前者是 C++ 实现,分布式列式存储引擎,可以高效的做 Olap 类查询,支持明细数据查询;后者是 Java 实现的事件类数据的预聚合 Olap 类查询引擎~


综合考虑了运维成本,与当前技术栈的融合,查询性能,支持场景后,最终选择了 Druid,关于 Druid 在有赞的实践,可以参考我们另一篇博客文章-《Druid在有赞的实践》


目前实时计算在有赞的整体技术架构如下图


3. 未来规划

首先要落地并的是实时任务 SQL 化,提高 SQL 化任务可以覆盖的业务场景(目标是 70%),从而通过提高业务开发效率的角度赋能业务。


在 SQL 化实时任务初步完成后,流数据的复用变成了提高效率上 ROI 最高的措施,初步计划会着手开始实时数仓的建设,对于实时数仓的初步设计如下图:



当然,完整的实时数仓绝没有这么简单,不只是实时计算相关的基础设施要达到一定的平台化水平,还依赖实时元数据管理,实时数据质量管理等配套的组件建设,路漫漫其修远~

4. 总结

有赞实时计算在业务方的需求下推动前进,在不同的阶段下,技术方向始终朝着当前投入产出比最高的方向在不断调整。本文并没有深入技术细节,而是循着时间线描述了实时计算在有赞的发展历程,有些地方因为作者认知有限,难免纰漏,欢迎各位同行指出。


最后打个小广告,有赞大数据团队基础设施团队,主要负责有赞的数据平台(DP), 实时计算(Storm, Spark Streaming, Flink),离线计算(HDFS,YARN,HIVE, SPARK SQL),在线存储(HBase),实时 OLAP(Druid) 等数个技术产品,欢迎感兴趣的小伙伴联系 hefei@youzan.com


2019-04-12 09:435224
用户头像

发布了 41 篇内容, 共 78132 次阅读, 收获喜欢 66 次。

关注

评论 3 条评论

发布
用户头像
流弊啊?
2019-04-12 18:24
回复
用户头像
有赞996不错
2019-04-12 15:41
回复
用户头像
文章写得不错,搞搞crm和内部oa的公司,都能考虑这么多,真是出淤泥而不染
2019-04-12 15:34
回复
没有更多了
发现更多内容

字节一面:TCP 和 UDP 可以使用同一个端口吗?

程序员小毕

Java 程序员 面试 TCP 计算机网络

阿里云技术专家邓青琳:云上跨可用区容灾和异地多活最佳实践

阿里云弹性计算

异地多活 多活容灾

2022秋招,Java岗最全面试攻略,吃透25个技术栈Offer拿到手软

程序猿阿宇

Java 面试题 面经 Java工程师 秋招

Java编程程序员怎么开发水平?

小谷哥

怎么才能提高自己web前端技术呢?

小谷哥

web前端开发技术学习比较靠谱

小谷哥

看了这么多Python教程,最香的还得是……

博文视点Broadview

OKA通证权益解析,参与Okaleido生态建设的不二之选

EOSdreamer111

物理防火墙是什么?有什么作用?

行云管家

网络安全 防火墙

Plus版SBOM:流水线物料清单PBOM

SEAL安全

开源 软件供应链 软件物料清单 SBOM 软件供应链安全

想要做好软件测试,可以先了解AST、SCA和渗透测试

华为云开发者联盟

云计算 安全 软件测试 后端 开发

kafka的Docker镜像使用说明(wurstmeister/kafka)

程序员欣宸

kafka 7月月更

如何把css渐变背景玩出花样来

南极一块修炼千年的大冰块

7月月更

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现

华为云开发者联盟

人工智能 推理 昇腾 处理器

敞开大门的支付宝,是商家的新掘金地吗?

ToB行业头条

用GaussDB(for Redis)存画像,推荐业务轻松降本60%

华为云开发者联盟

数据库 redis 存储 GaussDB ( for Redis ) 用户画像

第五届数字中国建设峰会举行,每日互动发布每日治数平台DIOS创新成果

个推

大数据 数据中台 数据智能 每日治数平台

Okaleido上线聚变Mining模式,OKA通证当下产出的唯一方式

鳄鱼视界

Java & Go 专场 | 阿里云中间件开发者线下 Meetup 开启报名

阿里巴巴云原生

Java Go 阿里云 云原生 中间件

大数据课程培训和自学哪个比较适合?

小谷哥

我写的dubbo扩展jar包如何无侵入的给别人使用

石臻臻的杂货铺

7月月更

微软Azure和易观分析联合发布《企业级云原生平台驱动数字化转型》报告

易观分析

数字化转型

基于Netty,从零开发IM(四):编码实践篇(系统优化)

JackJiang

网络编程 Netty 即时通讯 im开发 开源im

Okaleido生态核心权益OKA,尽在聚变Mining模式

股市老人

华为被迫开源!从认知到落地SpringBoot企业级实战手册(完整版)

程序猿阿宇

Java 程序员、 秋招 构架 面试‘

产品动态丨Android 13 高效适配全新升级

MobTech袤博科技

android

中文起,Python 字体反爬实战案例,再一点

梦想橡皮擦

Python 爬虫 7月月更

Kyligence 入选 Gartner 2022 数据管理技术成熟度曲线报告

Kyligence

sql查询 Gartner

大数据开发课程怎么学?

小谷哥

行云管家V6.5.1/2/3系列版本发布:数据库OpenAPI能力持续强化

行云管家

数据库 版本 IT运维 行云管家

创新突破!亚信科技助力中国移动某省完成核心账务数据库自主可控改造

亚信AntDB数据库

国产数据库

实时计算在有赞的实践——效率提升之路_大数据_有赞技术_InfoQ精选文章