写点什么

【遇见 Doris】Apache Doris 在京东双十一大促中的实践

用户头像
ApacheDoris
关注
发布于: 2021 年 03 月 24 日

Doris 线下沙龙完美收官!本次沙龙邀请了来自百度、美团、京东的技术大牛带来实战分享。了解更多详情请关注 Doris 官方公众号。公众号后台回复“1222”立即 get 现场录像及嘉宾 PPT。


2019 年 12 月 22 日,Doris 线下沙龙在百度大厦顺利举办。本次邀请了来自美团、京东、百度的技术大牛来分享实战经验,快来跟随小编一起回顾吧!


来自京东零售-商业提升部的刘航源为大家带来了 Apache Doris 在京东双十一大促活动的实践


航源主要负责京东的广告平台报表业务,京东的广告平台每天支撑了千万级以上的查询量,同时每天有百亿级的增量需要维护。所有的报表级查询需要毫秒级返回数据,场景主要包括报表查询、多维分析、日志分析等。




以账户报表为例,京东的报表平台有如下特点:


存储介质多、逻辑计算复杂且延迟敏感:一张报表中通常会有非常多的指标列,涉及多个存储介质(MySQL、Doris、Redis 等),这些列都需要实时关联,且需要保证报表是毫秒级数据返回。

聚合数据为主:与 Doris 的聚合模型场景贴合。

对外业务,服务质量要求高:面对的客户是所有京东的广告主。



京东广告平台在京东内部支持了十余个业务线,300+报表,涵盖了 270 个底层数据。覆盖了京准通内绝大多数的效果报表。超过 80%的业务需求可以通过修改配置支持,并且平台作为统一的数据出口,拥有完善的权限管理系统。


  • 性能问题:查询速度慢,满足不了大批量毫秒级返回数据的需求

  • 运维问题:运维困难,难以保障

  • 开发成本高

  • SQL 兼容难


业务现状


在大规模将系统切入 Doris 时遇到了下面几个问题:


  • 产品线众多,甚至包括海外产品线

  • 对接的业务方众多

  • 维护集群众多,面临资源隔离和数据隔离的问题

  • 财务相关数据,数据安全性要求高


统一化


  • 增量可回溯/可查询:对于导入增量进行把控

  • 更强的抗泄洪能力:因为对接产品线众多,不能因为任务激增而影响到众多产品线

  • 业务方可自助查数、补数

  • 可接受秒级的任务延迟


平台化


  • 数据定时备份

  • 支持任务优先级

  • 细化延迟监控


国际化


  • 支持时区功能

  • 多集群多环境/同名 HDFS NS 的区分


优化后整体架构如下:



Web Server:


  • 集群运维可视化

  • 统一运维

  • 对外接口系统


ReportEngine:


  • 查询业务引擎

  • 业务逻辑处理

  • 主要作为对外出口对接业务


AdminServer:


  • 任务的管理系统

  • 控制 Load 并发


数据最开始从 Kafka 进行导入,经过 ETL 层。ETL 会做一份增量数据,数据批次会取决于业务需求。目前线上大部分是每分钟会有一个批次。通过 HTTP 的接口调用 Admin Server,收到 Load 的任务后,会写到 MySQL 的消息队列上,向 Doris 提交一个 Load 的任务。Doris 收到任务后会提交 Broker Load 将 HDFS 的数据导入到 Doris 中。所有历史数据导入任务存储在 MySQL 中,通过 Admin Server 来实现可回溯可查询的功能,可同时可实现定期的 Backup。同时 Load 任务的并发是可控制的,也提供了更强的抗泄洪能力及支持任务优先级的能力。


具体实现:



所有提交的任务会通过 HTTP 的 JSON 发送到 Admin Server 里,主要是 Doris 的 Broker Load 需要的字段。Label,Path 和 Type(目前支持 csv 和 Parquet,未来会支持 orc)


WebServer 功能


WebServer 是京东研发的功能,覆盖了大部分 Doris 的操作功能,包括建表、建 Rollup、建 Partition、数据管理、数据查询、数据导入、任务管理、性能监控、集群导入、操作日志查询的功能。业务方可以方便地通过这个平台来提交任务。




任务管理



未来京东考虑将 WebServer 贡献给社区,让更多用户享受到 WebServer 带来的便利。


如何处理历史数据变更


Doris 修改数据的成本很高,但数据的修改和删除需求在真实业务中时常出现。



京东经历了几个阶段。


从最开始的无法进行删除操作,发展成采用了外部留存重新刷数的方式。即原来导入的错误数据不要删除,采用 replace 的方式,将原来的数据全部倒入一份负值的,从而将 value 刷成 0,再将正确的数据导入进去。这种方式的不便之处在于要留存原始错误数据。


后来采用了 Doris 的 delete 功能,把错误数据删除后再将正确数据 insert 进来。


但所有这些方式都存在一个问题,即总有一段时间窗口内数据 value 为 0。这对于外部系统来说是不能容忍的。例如广告主需要查看自己的账户信息,如果因数据变更问题而导致账户显示为 0,将是难以接受的,很不友好。



京东双十一大促期间 Doris 的表现



稳定性


  • 整个大促期间 Doris 的内存、CPU 非常平稳,即使 11 日凌晨也没有出现大规模上涨

  • 整个集群规模已经的达到了上百台

  • 整个大促期间没有 Bug 和事故


导入性能


  • 双 11 当天达到了 120 亿行的增量(聚合后的数据)

  • 峰值导入在 2000 万/分钟

  • 所有事实表基本都可以做到秒级延迟


查询性能


京东只用了 40 台 16 核 Docker 支撑了查询,且最高峰 CPU 占用率仅 30%左右。达到的效果:


  • 双 11 当天承载了 8000 万+的查询

  • TP99 58 毫秒,TP999 164 毫秒

  • 双 11 当天 00:20 左右达到峰值 QPS 达到 4500+,压测阶段 QPS 达到万级以上


不仅如此,所有统计指标也是通过 Doris 来进行分析的:京东在每台 Doris 上部署了一个 Doris 的 Agent 来收集日志,然后将其导入到 Kafka 中,再通过 Doris 的 Kafka Load,即可使用 Doris 分析自己的日志。可以通过 Doris 优秀的 OLAP 特性,分析任意时间段,任意维度的查询,为问题定位和性能分析提供了很大的帮助。


未来规划


  • 贡献成熟的 Web 屏体啊

  • 建立 UDF 平台,提升业务灵活性

  • 参与 SQL 优化器开发

  • 支持 Apache Doris (incubating)社区发展




欢迎扫码关注:



Apache Doris(incubating)官方公众号


相关链接:


Apache Doris 官方网站:


http://doris.incubator.apache.org


Apache Doris Github:

https://github.com/apache/incubator-doris

Apache Doris Wiki:

https://github.com/apache/incubator-doris/wiki

Apache Doris 开发者邮件组:

dev@doris.apache.org


发布于: 2021 年 03 月 24 日阅读数: 13
用户头像

ApacheDoris

关注

还未添加个人签名 2021.03.17 加入

Doris(原百度Palo https://cloud.baidu.com/product/palo.html )是一款基于大规模并行处理技术的分布式 SQL 数据仓库,由百度在2017年开源,2018年进入 Apache 孵化器

评论

发布
暂无评论
【遇见Doris】Apache Doris在京东双十一大促中的实践