海量数据下查询慢、数据不一致难题如何解?看某游戏公司的技术实践

news2024/9/21 15:27:50

导语: 复杂架构的危害是隐性且持续增长的,尤其在海量数据处理的业务场景下,导致系统吞吐量增长、各功能模块相互影响,且数据重复、维护困难。某游戏公司就面临这样的困境,在寻求解决方案的过程中,携手OceanBase 搭建了存储与实时分析的一体化数仓架构,替换了ClickHouse,Hive。该公司大数据平台负责人从实时数仓面临的问题与挑战谈起,讲述了他们从确定选型方向到最终实现选型落地的历程,以及使用 OceanBase 的经验,供大家参考。

 

业务背景:数仓架构复杂,重视数据分析、处理与运营

 

我们公司是一个游戏公司,以前重研发,现在重运营。对于游戏公司来说,数据分析是非常重要的一块业务,因此,我们非常看重数据分析系统的能力。目前,我们主要使用数仓工具对用户行为(下载、注册、充值)和广告营销数据进行分析,还有其他游戏数据的分析,比如用户打怪升级的现状、战斗的参数等,也会用到数仓。

和大多数公司一样,我们的数仓是典型的 Lambda 架构,如图1所示。我们通过数据源获取到数据后先进行预处理如数据质量控制、数据清洗等处理后,将数据放入 Kafka进行数据缓存。后续的任务调度分成两部分,一部分是通过Hive做离线处理,另一部分数据用ClickHouse 进行实时分析。处理后的数据供应用系统使用,比如BI系统、用户系统、营销系统、以及第三方系统如百度、腾讯、头条、抖音等。

 

Image

图1 数仓架构

 

当前的数仓在获取数据后会进行解析和数据质量的处理。当收集到质量不符合规定的(缺字段、字段的类型不对)数据都会进行告警和处理。游戏行业数据处理比较特别的一点是会对数据进行归因,简单来说就是把数据收集流程进行详细解析,以此来判断该数据是通过哪个渠道哪个广告位产生的,后续的广告营销策略也会依赖于数据归因。另外,我们还有一套“数据打宽”流程,这是数据仓库中最为常见的业务加工场景,可以将用户的 IP 解析后显示用户的国家、省市、地区、信息,可以解析用户的手机型号,可以解析用户的年龄和性别等,放入离线数仓和实时数仓中,为用户画像提供支撑。

 

业务挑战:实时性、一致性、可维护性差,查询慢

 

我们的数仓架构包括数据贴源层,数据详细层、数据中间层、数据服务层、数据集市等,原始数据通过数据质量检查后,分别写入Hive 和 ClickHouse 中的ODS贴源层,严格来说kafka中有什么数据,ODS层也有什么数据,Kafka也属于贴源层的范畴,数据通过任务调度系统,进行打宽如解析ip、解析年龄和加工后,存入数据详细层DWD,数据在数据中间层DWM和数据服务层DWS经过一系列指标汇聚处理后,放入数据集市,我们是用PostgreSQL数据库和Redis中来做的数据集市,其中任务调度系统是我们自研的,可以进行源数字典的管理和数据质量管理及任务调度,可以执行任务重跑、任务优先级调整、数据质量告警等操作,是一个比较强大的调度系统。虽说这个架构是当前较为先进的架构,但在使用过程中也遇到了不少挑战。

挑战1:实时性。 很多公司的数仓策略都是T+1,此前我们在使用 Hive 数仓时对其进行了优化,达到了数据从产生到可见只需要30分钟。就是说我们30分钟就去load一遍数据,写入Hive再insert overwrite 到当天的分区里面(可减少数据的碎片)。在实时数仓上ClickHouse也达到了一分钟可见。但有些场景需要在毫秒内看到结果,是 Hive 和ClickHouse无法达到的。

挑战2:一致性。 相信用过 Lambda 架构的人都知道 ClickHouse和Hive 的数据经常“打架”,二者计算出来的数据不一致。我们允许数据重复,在计算上也做了重复数据的去重处理,但即使重复处理完,仍然有数据不一致的问题,导致ClickHouse 的数据只能用于实时数据的查看,Hive 数据则会用于最终数据使用。

挑战3:可维护性。 ClickHouse实时数仓一套代码,Hive 离线数仓一套代码,一个架构两套系统,维护起来比较困难。

挑战4:即席查询。 Hive 离线数仓,需要几分钟甚至十几分钟才能看到查询结果。ClickHouse实时数仓在几秒钟至几分钟就能展示查询结果。即席查询在大多数情况下一切正常,但在以下两种极端情况下会遇到挑战。

  • 一种情况是用户身份信息邦联查询,当用户在注册过程中绑定了身份证,需要通过身份证回查用户账号时,是需要毫秒级的响应。而我们的用户信息是存在MySQL中,在数据量较小时,查询达到毫秒级响应是没问题的,但在数量上亿或者数十亿的查询场景下,MySQL的响应就非常慢甚至不可用。

  • 另一种情况是广告渠道邦联查分析,需通过订单数据邦联用户数据再邦联广告商渠道信息,以往查看广告投放效果需等待要半小时。而我们的需求是1秒内可见。

目前 Lambda 架构下的数仓不支持上述需求,这迫使我们探索新的数仓工具。

 

技术选型:OceanBase 查询测试,性能提升286倍

 

我们调研了Hudi、Doris两款数仓工具,Hudi从数据写入到Join查询,至少需要60秒;Doris 能实现10秒到60秒可见,而我们已经在用的ClickHouse查询结果的可见时间为 66秒(见图2),相比之下,如果选用Hudi或Doris与使用现有的ClickHouse并没有明显的数值提升,没有从根本上解决业务的需求。

 

Image

图2 ClickHouse查询数据66秒可见

 

在进行新工具调研的过程中,我们了解到 HTAP 数据库 OceanBase,并使用 OceanBase 在用户身份证号查找用户ID的场景下简单测试了数据查询速度。通过图3可以看到,我们在对 OceanBase 未做分区优化只做索引优化的情况下,1.2 亿 Join查询 34亿条数据,初次查询用时0.23秒,数据预热后 0.01秒出数据查询结果,性能提升66/0.23=286倍。我们认为,这是一个很“吓人”的性能提升。

 

Image

图3 OceanBase查询数据结果毫秒可见

 

因此,我们当即决定封装 OceanBase 的能力去满足业务需求,包括通过身份证号查找用户ID、通过用户ID查询广告信息、实时红包推广效果等。

 

生产部署:实时数据写入优化,历史数据导入踩坑

 

在确定使用 OceanBase 后,下一步的计划就是考虑如何把它用起来。首先,我们对历史数据和实时数据进行区分。

  • 历史数据:我们用 DataX 将历史数据导出为 CSV 文件后,再用 DataX 将 CSV 文件导入OceanBase。

  • 实时数据:考虑到用户需求是毫秒级响应,我们选用了 Flink SQL 抽取实时数据。经过测试,从数据产生到数据落到 OceanBase,1秒内完成。

对于历史数据的导入,由于前期对 OceanBase 不够熟悉,在使用过程中,我们也走了一些弯路,很多问题通过在OceanBase 技术答疑群(钉钉群号:33254054)与技术专家交流得到了解决。在数据导入过程中,通过 DataX 导出 CSV 文件时,配置文件中最好用 2881 端口直连 OceanBase 数据库,如果通过2883端口,也就是OBProxy 代理连接的话,由于OBProxy 的分发机制,可能将不同的命令分发到另外一台机器上,如果另外一台机器没有部署 DataX并导出文件的话则会找不到文件,所以我建议使用Datax的时候,连接2881是最保险的。

对于实时数据的写入,值得一提的是,在写 OceanBase 时,我们也考虑过 Spark。Spark 是通过微批的方式去写,在微批写时,实时性还是比 Flink 差了一些。最大的微批时间间隔为300毫秒的延迟。而 Flink 则可以实时写入 OceanBase,因此,我们选择通过 Flink SQL 的方式把数据写到 OceanBase 中。

下面三张图片是Flink 数据实时ETL 的加载转化以及写入OceanBase 的流程代码展示。其中,图4是使用Flink-kafka抽取实时数据的过程;图5为使用FlinkSQL转换、加工整理实时数据的过程;图6为使用FlinkSQL实时加载至目的地 OceanBase 的过程。

 

Image

图4 使用Flink-kafka抽取实时数据

 

Image

图5 使用FlinkSQL转换、加工整理实时数据

 

Image

图6 使用FlinkSQL实时加载至OceanBase

我也对这些代码进行部分抽取,将其做成脚本成批量提交,在转化成脚本工具化后 Flink Source 数据源可以支持从Kafka、MySQL、Oracle、OceanBase、MongoDB、PostgreSQL、Sqlserver等数据源实时同步数据并加工后写入OceanBase 中,数据形成了闭环,OceanBase 作为数据中台核心/实时数仓的雏形初步完成。

以上代码我们已经部署到生产环境中,目前应用到两个应用场景中:一是通过用户身份证号查找用户ID,二是通过用户 ID 查找数据归因等信息,比如用户通过哪个广告渠道了解并注册到我们的产品。目前,OceanBase 在业务系统中的位置如图7所示。

 

Image

图7 使用OceanBase后的数仓架构

 

总结与展望:一个系统支撑TP与AP场景,解决所有问题

 

随着 OceanBase 在我们业务系统中的稳定落地,帮助我们解决了上文提到的四个固有问题。

实时性: 从Kafka到Flink再到 OceanBase,写入与导出的实时性没有任何问题。例如,使用 Flink SQL抽取实时数据并写入 OceanBase,能实时完成。对于flink-sql-connector-OceanBase-cdc工具,我希望它更好的支持历史数据再加工高效效率,以及不重不漏高效的历史数据、实时数据无缝对,我们期待 OceanBase 的CDC工具能够迭代出更完美的版本。我们更期待社区开发出 OceanBase 专有的flink-connector,实现不重不漏高效的写 OceanBase。做好flink-sql-connector-OceanBase-cdc读工具和flink-connector写工具,就可以不重不漏高效的进行数仓第二层,第三层的加工,将OceanBase的生态扩展到了大数据圈,顺带实现了大数据环境下的存算分离。

一致性: OceanBase 可以完美对接我们现有系统中的历史数据和实时数据,实现数据不重、不漏、不丢。

即席查询: 我们在对 OceanBase 未做分区优化只做索引优化的情况下,1.2 亿 Join查询 34亿条数据,初次查询用时0.23秒,数据预热后 0.01秒出数据查询结果,性能提升66/0.23=286倍。数据可以达到毫秒内可见。

可维护性: 以往我们需要维护ClickHouse和Hive这两套代码,未来我们计划将所有核心场景逐渐迁移至 OceanBase,简化架构,只需维护一套代码即可实现TP和AP的双重能力。

下一步,我们计划在用户系统、广告系统、数据分析系统,以及营销和渠道管理分析中推广和使用OceanBase(见图8),目前已经开始了代码开发与数据对接。我们的理想状态是将所有的业务数据放到 OceanBase 中进行分析、保存,实现数据闭环,一个系统解决所有问题。

 

Image

图8 将OceanBase应用至更多系统

 

此次 OceanBase 落地实践带给我们很多惊喜,正所谓千里之行始于足下,我们要敢于尝试,才能逐渐到达千里之外,感受更美丽的风景。最后,希望 OceanBase 能够越做越好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通用的异常处理程序机制与处理返回值方案

通用的异常处理程序机制与返回值方案文章目录通用的异常处理程序机制与返回值方案现状示例方案原理步骤总结附完整代码现状相信很多人都为处理错误返回值代码都烦恼过。例如:一个程序嵌套了10个方法,嵌套最深的方法一旦有个业务错误代码,那么…

如何通过文档改善用户体验和客户关系

文档对你的员工和客户来说都是一个宝贵的信息来源。你策划和分享的每一个教程、"如何做 "的文章和指南都可以改善用户体验和客户关系。 在这个数字时代,每个人都希望立即得到答案,很少或没有人际互动,一个坚实的知识库软件使你领先…

TIOBE12月编程语言榜发布:C++首超Java!

本月TIOBE更新了榜单,其中变化最大的莫过于C以0.12%微弱优势,总市场份额首次超过了Java。 在今年6月份的时候,TIOBE的CEOPaul Jansen曾做出过预测,C将会是下一个超越Java的语言。果然在最新版本的C 20的推动下,超越了…

模板方法模式(python)

一、模式定义 1.模板方法模式(Template Method Pattern):定义一个操作中算法的框架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 2.模板方法是一种类行为型模式。 二、模式结构 …

斩获三奖 | 国产BI行业唯一获奖,Smartbi荣获36氪、数据猿等多项荣誉

入选36氪新经济之王年度企业近日,36氪WISE2022 新经济之王盛会隆重举行,会上正式发布了“WISE2022 新经济之王年度企业”名册,思迈特软件成功斩获“WISE2022 新经济之王年度企业”荣誉,成为国产BI行业唯一获奖品牌。据了解&#x…

scrapy爬虫框架

scrapy爬虫框架一 scrapy架构介绍二 安装指南三 创建项目3.1 创建爬虫项目3.2 创建爬虫3.3 启动爬虫3.4 pycharm中运行四 scrapy解析数据五 settings相关配置六 持久化方案七 全站爬取cnblogs文章八 中间件一 scrapy架构介绍 Scrapy一个开源和协作的框架,其最初是为…

在线购物电商网站毕业设计,网上购物商城系统设计与实现,毕业设计怎么写论文毕设源码开题报告需求分析怎么做

项目背景和意义 目的:伴随着互联网技术的不断发展和完善,在人们的生活和工作的各个方面,互联网都有着非常重大的影响。伴随着国内电子商务行业的迅猛发展,消费者现在能够轻松的实现足不出户的,仅仅通过网络购物平台就可…

【工作经历分享】软件测试求职真的难,但是我还是从7K涨到了14K

上个礼拜刚好转正了,三个月试用期,五月份换的工作。 现在这份工作,相比上一份确实好很多,比如工资直接涨了一倍,7到14,13薪,朝九晚六,从不加班,项目也简单,包…

Kubernetes基础概念

什么是Kubernetes 1.用于自动部署、扩展和管理“容器化( containerized) 应用程序”的开源系统 2.可以理解成K8S是负责自动化运维管理多个容器化程序(比如Docker)的集群,是–个生态极其丰富的容器编排框架工具 Kubernetes作用 1.用于自动部署、扩展和管理“容器化…

2022下半年的软考成绩公布时间?

今年软考下半年成绩公布时间预估在12月15-20日左右。 软考成绩一般并没有一个固定的时间点公布,不过从近几年软考办成绩查询通知公布时间来看,大多是下午出的成绩。一般来说,成绩查询通知公布之前的几分钟,考生已经可以查成绩了。…

使用Golang语言walk框架开发一个简单的windowsGUI

1、前言 最近使用golang语言开发了一个windowsGUI的Demo,由于golang语言属于比较新的语言,对GUI开发这一块并没有原生库也没有推荐库,因此我在github上找到了一个叫做walk的GUI开发框架。 github原址为:http://github.com/lxn/w…

定时执行专家 —— 定时循环发送TCP消息(例如:控制设备的开关机等场景)

《定时执行专家》是一款制作精良、功能强大、简单易用、毫秒级精度、专业级的定时任务执行软件。软件具有 21 种【任务类型】、12 种【触发器】触发方式,并且全面支持界面化Cron表达式设置。软件采用多线程并发方式检测任务触发和任务执行,能够达到毫秒级…

带你快速入门JDBC

1,JDBC概述 在开发中我们使用的是java语言,那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的一套API 全称:( Java DataBase Connectivity ) Java 数据库连接 …

Win11的两个实用技巧系列之开机后桌面无响应怎么办?

目录 win10开机后桌面无响应怎么办?win10开机后桌面无响应点什么都不行 win10开机后桌面无响应点什么都不行怎么办? Win10和Win11 22H2如何关闭文字热门搜索? Win11 22H2关闭文字热门搜索 Win10 22H2关闭文字热门搜索 点击拿去 win10开机后桌面无响应怎么办…

NR PUSCH power control

这篇看下NR PUSCH power control的相关内容,主要内容集中在38.213 7.1章节,功率计算无非就是一个长公式,根据RRC配置的参数及后续DCI field 的内容作出功率的调整;最初这部分看的就云里雾里的,最近再看,相比…

环境土壤物理模型HYDRUS

HYDRUS是由著名土壤学家Rien van Genuchten和Jirka Simunek等人基于Windows系统界面开发的环境土壤物理模拟软件,是模拟一维和多维变饱和多孔介质的水流、溶质运移、根系吸水和溶质吸收、热量传输等的强有力工具。除基础功能以外,该模型还附有一系列扩展…

交叉验证、网格搜索、模型选择与调优、鸢尾花案例增加K值调优与Facebook人造世界签到位置train.csv数据预测代码实现

一、交叉验证 交叉验证(cross validation):将拿到的训练数据分为训练和验证集,以下图为例,将数据分成4份,其中一份作为验证集,经过4次(组)的测试,每次都更换不同的验证集,即得到4组模型的结果&…

One-shot就能做事件抽取?ChatGPT在信息抽取上的强大应用

One-shot就能做事件抽取?ChatGPT在信息抽取上的强大应用0. 前言1. 灵感2. 实验3. 结论0. 前言 近期,OpenAI发布的chat GPT可谓是各种刷屏,很多人都在关注这种模式是否可以应用于搜索引擎,这给做搜索的朋友们带来了很大的危机感。…

强大的VS插件DevExpress CodeRush v22.1 - 让代码编程更智能

DevExpress CodeRush是一个强大的Visual Studio .NET 插件,它利用整合技术,通过促进开发者和团队效率来提升开发者体验。为Visual Studio IDE增压、消除重复的代码并提高代码质量,可以快速思考、自动化测试、可视化调试和重构。 CodeRush v2…

vue学习笔记(一)-vue基础语法

视频教程:尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通_哔哩哔哩_bilibili 相关文档:Vue核心 Vue简介 初识 (yuque.com) 兼容性 Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但它支持所有兼容 ECMAS…