当前位置: 首页 > news >正文

作业帮 x TiDB丨多元化海量数据业务的支撑

导读

作业帮是一家成立于 2015 年的在线教育品牌,致力于用科技手段助力教育普惠。经过近十年的积累,作业帮运用人工智能、大数据等技术,为学生、老师、家长提供学习、教育解决方案,智能硬件产品等。随着公司产品和业务场景越来越丰富,数据量越来越大,业务方对数据库的使用需求也越来越多元化。本文介绍了作业帮对 TiDB 的探索历程,以及逐渐落地多个业务场景的使用实践。

TiDB 在作业帮的探索和推广

作业帮内部最开始接触的版本是 TiDB v4.0.9。相较于 TiDB v3.x,v4.0.9 在性能、管理、易用性等方面都有了质的提升,同时 TiDB 的生态组件以及社区也都达到了非常完善的程度,可以说是一个标志性的版本。2020 年,我们正式开始调研测试 TiDB v4.0.9, 以实现团队在分布式数据库的技术储备,从而更好地服务公司的业务需求。

1. 探索期: 使用 TiDB 隔离对在线 MySQL 集群有性能影响的查询请求

研发人员需要不定时查询线上实时数据,以此来确定业务数据的情况或者对部分业务数据做汇总分析。

● 引入 TiDB 之前:业务人员是直连到 MySQL 从库查询数据,如果扫描的数据量太大经常会引起线上 MySQL 节点性能抖动甚至机器的 io/cpu 资源瓶颈。

● 引入 TiDB 之后:通过数据同步工具 DM 将 MySQL 的数据以全量+实时增量的方式同步到 TiDB 中,实现在线、离线请求的隔离性。

在这个探索阶段,一方面满足了离线查询的隔离性的要求,另一方面也熟悉了 TiDB 及其生态组件的特性以及使用方法。

2、推广期:内部分享+主动出击

经过半年左右时间的使用,在对 TiDB 有一定了解的基础上,我们开始在公司内部进行 TiDB 相关的技术分享,向研发人员介绍 TiDB 的一些特性和在大数据量场景下的优势,并主动接触各个业务线去寻找合适的使用场景。研发人员也陆续将一些业务 内部使用的报表服务 接入到离线 TiDB 集群中。

在线业务落地从 0-1

在各个团队使用和熟悉 TiDB 一段时间后,我们开始针对已有业务的痛点或者未来新业务的规划,逐渐将视野转移到 TiDB。通过配合业务一起测试验证,开始正式将在线业务迁移到 TiDB 中。

1、报表平台使用 TiDB 突破存储&性能瓶颈

作业帮的报表服务每天要导入大量来自各个业务线的文件数据,来实现最终的数据大盘展示。随着业务线越来越多以及 MySQL 单实例主机的磁盘限制,报表服务平台逐渐显现出存储受限以及数据展示响应慢,甚至无法响应等问题。

我们通过 DM 将数据同步到 TiDB 中,经过业务验证,TiDB 对 SQL 达到了高度兼容性。同时,对比使用 MySQL 的耗时,TiDB 减少 80% 的时间,效果远超预期。随着 DM 同步稳定性的提高,报表平台也将一些直连线上 MySQL 的报表服务改成使用 TiDB 作为数据源。

经过改造,报表服务最终架构如下:

2、业务流水数据

业务流水数据业务的主要特点是每日写入数据量特别大,而且需要保存时间比较长。在公司的多个业务线中,只要是发展到一定阶段,使用 MySQL 存储的数据最终都会遇到存储瓶颈。此时 TiDB 便是非常好的一种解决方案。

在线业务落地从1-N

得益于 DM 同步数据的可靠性以及后面 TiDB-5.x 版本的兼容性、稳定性,作业帮有些业务逐渐将性能采集数据、用户访问记录、业务日志等业务也迁移到 TiDB。同时,在人工智能爆发的背景下,越来越多的探索性业务天然需要存储海量的数据,TiDB 自然成为首选方案。当然,线上还有很多核心业务不会轻易更换数据存储方案,那么对历史数据的归档使用 TiDB 也是目前的标准方案。

从 TiDB 4.0 版本开始,TiDB 加入了 TiFlash 列存引擎,并且在之后的版本中不断增强。如果业务有任何复杂查询需求,直接就可以在 TiDB 集群里通过增加 TiFlash 节点解决一些比较复杂的查询。

总结以及未来展望

现在,TiDB 在作业帮内部使用中已经可以独当一面了。目前,作业帮已经部署了几十套 TiDB 集群,总体数据量规模超过百 TB。在这些集群中,大部分采用的是 TiDB 5.4 版本,有一半已经升级到 6.5 版本。如果大家还在用 v3.x 版本的话,建议可以采用一些比较保险的方法测试升级到新的版本。作业帮从 v4.0.9 版本一路不断升级上来,整体感受是越来越稳定,让人比较安心,升级过程也非常丝滑,业务几乎没有任何感知。

最近有看到消息说杭州银行已经在核心账务系统上线 TiDB 6.5.6 版本,到 2024 年我们应该也会全部升级到这个版本。

最后,也说一下对 TiDB 的希望:

  1. 希望 TiDB 能有不依赖于 CDC 的主备集群方案,一方面可以做异地机房的灾备,另一方面可以作为升级回滚的方案,避免升级之后出现业务不兼容的情况;
  2. 探索使用资源管控方案 (Resource Control)。对于 MySQL 分库分表的业务,无法将多个分集群同步到同一个 TiDB 集群,会出现库名冲突的情况;
  3. SQL 限流或者拦截功能:对于资源消耗异常高的 SQL,可以自动进行降级处理,避免将集群资源耗尽,集群雪崩。

相关文章:

作业帮 x TiDB丨多元化海量数据业务的支撑

导读 作业帮是一家成立于 2015 年的在线教育品牌,致力于用科技手段助力教育普惠。经过近十年的积累,作业帮运用人工智能、大数据等技术,为学生、老师、家长提供学习、教育解决方案,智能硬件产品等。随着公司产品和业务场景越来越…...

文生图提示词:天气条件

天气和气候 --天气条件 Weather Conditions 涵盖了从基本的天气类型到复杂的气象现象,为描述不同的天气和气候条件提供了丰富的词汇。 Sunny 晴朗 Cloudy 多云 Overcast 阴天 Partly Cloudy 局部多云 Clear 清晰 Foggy 雾 Misty 薄雾 Hazy 朦胧 Rainy 下雨 Showers …...

【nginx实践连载-3】发布VSTO应用

要使用 Nginx 发布 VSTO 应用程序,需要将 ClickOnce 发布文件夹部署到 Nginx 服务器上。以下是一些步骤: 将 ClickOnce 发布文件夹复制到 Nginx 服务器上。确认 Nginx 配置文件中有一个指向 ClickOnce 发布文件夹的位置块。确保Nginx 配置文件中启用了 …...

【前端工程化面试题】使用 webpack 来优化前端性能/ webpack的功能

这个题目实际上就是来回答 webpack 是干啥的,你对webpack的理解,都是一个问题。 (1)对 webpack 的理解 webpack 为啥提出 webpack 是啥 webpack 的主要功能 前端开发通常是基于模块化的,为了提高开发效率&#xff0…...

思迈特再获国家权威认证:代码自主率98.78%

日前,思迈特软件自主研发的商业智能与数据分析软件(Smartbi Insight)通过中国赛宝实验室(工业和信息化部电子第五研究所)代码扫描测试,Smartbi Insight V11版本扫描测得代码自主率为98.78%的好成绩&#xf…...

JavaScript排序

直接看代码 <table border"1" cellspacing"0"><thead class"tou"><tr><td>选择按钮</td><td>汽车编号</td><td>汽车图片</td><td>汽车系列名称</td><td>汽车能源</…...

【读书笔记】ICS设备及应用攻击(一)

工控系统通常是由互联设备所构成的大型复杂系统&#xff0c;这些设备包括类似于人机界面&#xff08;HMI&#xff09;、PLC、传感器、执行器以及其他使用协商好的协议进行相互通信的设备。所有交互背后的驱动力都是软件&#xff0c;软件为工控系统中几乎所有部分的运行提供支撑…...

网络原理(HTTP篇)

网络原理HTTP 前言HTTPHTTP的工作流程抓包工具抓取HTTP报文HTTP报文格式 请求报文具体细节首行URLURL的基本格式URL encode 方法 报头(header)HostContent-Length 和 Content-TypeUser-Agent&#xff08;UA&#xff09;RefererCookie&#xff08;重要&#xff09; 前言 如图&a…...

关于油封密封件你了解多少?

油封也称为轴封或旋转轴封&#xff0c;旨在防止设备中的润滑剂泄漏&#xff0c;并防止外部污染物进入机械。它们通常用于泵和电机等旋转设备&#xff0c;在固定部件和移动部件之间提供密封界面。 油封的有效性很大程度上取决于其材料。不同的材料具有不同程度的耐热性、耐压性…...

Leetcode 72 编辑距离

题意理解&#xff1a; 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 将word1转换为word2,可以进行三种操作&#xff1a;增、删、改&am…...

羊大师揭秘,如何挑选出好牧场的奶羊,该怎么看

羊大师揭秘&#xff0c;如何挑选出好牧场的奶羊&#xff0c;该怎么看 了解牧场的管理和环境&#xff1a;好的牧场应该有规范的管理制度&#xff0c;环境整洁&#xff0c;草场茂盛&#xff0c;为奶羊提供了充足的食物和良好的生活环境。在这样的牧场中&#xff0c;奶羊能够得到…...

MySQL数据库基础(八):DML数据操作语言

文章目录 DML数据操作语言 一、DML包括哪些SQL语句 二、数据的增删改&#xff08;重点&#xff09; 1、数据的增加操作 2、数据的修改操作 3、数据的删除操作 DML数据操作语言 一、DML包括哪些SQL语句 insert插入、update更新、delete删除 二、数据的增删改&#xff08…...

(09)Hive——CTE 公共表达式

目录 1.语法 2. 使用场景 select语句 chaining CTEs 链式 union语句 insert into 语句 create table as 语句 前言 Common Table Expressions&#xff08;CTE&#xff09;&#xff1a;公共表达式是一个临时的结果集&#xff0c;该结果集是从with子句中指定的查询派生而来…...

Spring 用法学习总结(四)之 JdbcTemplate 连接数据库

&#x1f409;目录 9 JdbcTemplate 9 JdbcTemplate Spring 框架对 JDBC 进行了封装&#xff0c;使用 JdbcTemplate 方便实现对数据库操作 相关包&#xff1a; 百度网盘链接https://pan.baidu.com/s/1Gw1l6VKc-p4gdqDyD626cg?pwd6666 创建properties配置文件 &#x1f4a5;注意…...

第 385 场 LeetCode 周赛题解

A 统计前后缀下标对 I 模拟 class Solution { public:int countPrefixSuffixPairs(vector<string> &words) {int n words.size();int res 0;for (int i 0; i < n; i)for (int j i 1; j < n; j)if (words[i].size() < words[j].size()) {int li words[…...

什么是RabbitMQ?

一、引言 RabbitMQ是一个开源的消息代理软件&#xff0c;用于在分布式系统中传递消息。它实现了高级消息队列协议&#xff08;AMQP&#xff09;&#xff0c;提供了一种可靠的、强大的、灵活的消息传递机制&#xff0c;使得不同应用程序或组件之间可以轻松地进行通信。 二、概念…...

JWT登录验证前后端设计与实现笔记

设计内容 前端 配置全局前置路由守卫axios拦截器登录页面和主页 后端 JWT的封装登录接口中间件放行mysql数据库的连接 详细设计 路由设计 配置全局前置守卫&#xff0c;如果访问的是登录页面则放行&#xff0c;不是则进入判断是否有token&#xff0c;没有则拦截回到登录…...

自定义类型详解 ----结构体,位段,枚举,联合

目录 结构体 1.不完全声明 2.结构体的自引用 3.定义与初始化 4.结构体内存对齐与结构体类型的大小 结构体嵌套问题 位段 1.什么是位段&#xff1f; 2.位段的内存分配 枚举 1.枚举类型的定义 2.枚举的优点 联合&#xff08;共同体&#xff09; 1.联合体类型的声明以…...

VueCLI核心知识综合案例TodoList

目录 1 拿到一个功能模块首先需要拆分组件&#xff1a; 2 使用组件实现静态页面的效果 3 分析数据保存在哪个组件 4 实现添加数据 5 实现复选框勾选 6 实现数据的删除 7 实现底部组件中数据的统计 8 实现勾选全部的小复选框来实现大复选框的勾选 9 实现勾选大复选框来…...

关于cuda路径问题

问题&#xff1a;Could not load dynamic library ‘libcudart.so.11.0’ 原因&#xff1a;调用系统环境下的cuda但系统环境没有装cuda 解决&#xff1a; 1.在系统环境装cuda&#xff0c;但如果每权限就不好操作&#xff1b; 2.用虚拟环境装好的cuda路径丢给环境变量 暂时性&am…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...