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

2023-11-20 17:30

本文主要是介绍【遇见Doris】Apache Doris在京东双十一大促中的实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

     


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





2019年12月22日,Doris线下沙龙在百度大厦顺利举办。本次邀请了来自美团、京东、百度的技术大牛来分享实战经验,快来跟随小编一起回顾吧!
来自京东零售-商业提升部的刘航源为大家带来了 Apache Doris 在京东双十一大促活动的实践



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

10aa86c3-9966-40b4-aa59-ac4812762e9b.png

b56172df-e75b-4602-b62e-e77b0f529fea.png


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


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

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

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



8e0dc2ee-c557-4d87-ac4a-4a2f1e5411fd.png

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


971e1a31-4412-4cb4-98e7-47050bbd54ac.png




京东使用Doris解决当下面临的问题


在使用Doris前,原有的业务系统如图所示。报表系统下对接包括MySQL、Redis以及自有系统等,在今年年初时遇到一些困难。主要包括:



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

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

  • 开发成本高

  • SQL兼容难



于是在19年年初决定使用Doris。


业务现状


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


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

  • 对接的业务方众多

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

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


 

在切换时有如下几个诉求:


统一化


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

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

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

  • 可接受秒级的任务延迟


 

平台化


  • 数据定时备份

  • 支持任务优先级

  • 细化延迟监控


 

国际化


  • 支持时区功能

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


 

优化后整体架构如下:

de3c6dbf-bbbd-4924-a885-dbe2563180b7.png

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任务的并发是可控制的,也提供了更强的抗泄洪能力及支持任务优先级的能力。

 

具体实现:

c3984bae-f3ea-4e3d-a1dc-b50c18bf63e4.png

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

 

WebServer功能

 

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

 

数据管理

13c61e83-abfe-4098-a779-c137377066c9.png


数据导入

e00ee318-4c9a-41a8-b4e0-49aee5c1ddf8.png

任务管理


695bacac-fd09-4062-ae96-013e75714aea.png

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

 

如何处理历史数据变更


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

d39c719f-c432-4a8e-8fb4-dfbff03f0d81.png

京东经历了几个阶段。

 

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

 

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

 

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

 

京东非常期待Spark Doris connector的功能正式发布,也已经试用了很大一部分。

65acf1c8-a265-4e46-b5cc-47ff543e8ed5.png

应用Spark Doris connector后,对于这类操作将会更加便捷。例如上一行是错误数据,下面的一行是正确数据。Spark可以链接两条流,一条流链接Doris,一条流链接外部的正确数据(例如业务部门给的Parquet文件),做diff操作,将所有value算出diff值。可以看到最后一行的结果,将其导入进Doris即可。这样的好处是可以消除中间的时间窗口,同时也便于平时经常使用Spark的业务方来进行操作,非常友好。





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


57980e87-fd28-44c1-bc8c-56502d340971.png

稳定性


  • 整个大促期间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)社区发展







欢迎扫码关注:

fece82e6-4a54-4493-8d2f-0d19bf32e2b1.jpg

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


                                                                                                                                                   

文章已于2020-03-09修改

 

                   

微信扫一扫
关注该公众号


本文分享自微信公众号 - ApacheDoris(gh_80d448709a68)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

这篇关于【遇见Doris】Apache Doris在京东双十一大促中的实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/396269

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://