作业帮 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,可以自动进行降级处理,避免将集群资源耗尽,集群雪崩。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS概述 | CSS的引入方式 | 选择器

文章目录 1.CSS概述2.CSS的引入方式2.1.内部样式表2.2.行内样式表2.3.外部样式表 3.选择器 1.CSS概述 CSS,全称Cascading Style Sheets(层叠样式表),是一种用来设置HTML(或XML等)文档样式的语言。CSS的主要…

AI专题:5G-A扬帆风正劲,踏AI增长新浪潮

今天分享的是AI系列深度研究报告:《AI专题:5G-A扬帆风正劲,踏AI增长新浪潮》。 (报告出品方:开源证券) 报告共计:22页 足立连接,拓展算力,双曲线稳步发力 中兴通讯拥…

Rocky Linux 下载安装

一、VMware Workstation下载安装 1、安装教程 VMware Workstation下载安装(含密钥) 二、VMware Workstation 创建虚拟机 1、创建教程 VMware Workstation 创建虚拟机 三、Rocky Linux 下载 1、下载官网 RockyLinux.org 2、选择X86架构_64位系统_DVD镜…

Redis面试题整理(持续更新)

1. 缓存穿透? 缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致DB挂掉,这种情况大概率是遭到了攻击。 解决方案: …

【开源】SpringBoot框架开发创意工坊双创管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、系统展示四、核心代码4.1 查询项目4.2 移动端新增团队4.3 查询讲座4.4 讲座收藏4.5 小程序登录 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的创意工坊双创管理…

TiDB in 2023, 一次简单的回顾丨PingCAP 唐刘

2023 年已经过去,TiDB 经过了一年的迭代,又往前进步了一点点,我们非常自豪的看到,TiDB 正在不断地帮助我们的客户成功,包括但不限于: ○ 首个云原生、分布式、全栈国产化银行核心业务系统投产上线丨TiDB …

Apache POI | Java操作Excel文件

目录 1、介绍 2、代码示例 2.1、将数据写入Excel文件 2.2、读取Excel文件中的数据 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步…

【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床

准备工作: 首先电脑得提前完成安装如下: 1. nodejs环境(node ,npm):【安装指南】nodejs下载、安装与配置详细教程 2. Picgo:【安装指南】图床神器之Picgo下载、安装与配置详细教程 3. Typora:【安装指南】markdown神器之Typora下载、安装与无限使用详细教…

LeetCode---384周赛

题目列表 3033. 修改矩阵 3034. 匹配模式数组的子数组数目 I 3035. 回文字符串的最大数量 3036. 匹配模式数组的子数组数目 II 一、修改矩阵 简单模拟即可&#xff0c;代码如下 class Solution { public:vector<vector<int>> modifiedMatrix(vector<vecto…

Stable Diffusion教程——常用插件安装与测试(一)

前言 随着Stable Diffusion不断演进&#xff0c;越来越多的开发者开始涉足插件开发。尽管网络上存在大量教程&#xff0c;但它们通常零散分布&#xff0c;逐个学习和查找非常耗时&#xff0c;使人感觉每天都在劳累思考。这里总结了Stable Diffusion常用的插件安装与测试方法。…

[Angular 基础] - 视图封装 局部引用 父子组件中内容传递

[Angular 基础] - 视图封装 & 局部引用 & 父子组件中内容传递 之前的笔记&#xff1a; [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 以上为静态页面&#xff0c;即不涉及到跨组…

记一次有趣的逻辑漏洞挖洞经历

前言 前几天在网上冲浪的时候无意间看到了一个Edu的站点&#xff0c;是一个很常见的类似MOOC的那种在线学习系统&#xff0c;对外开放&#xff0c;同时有注册和登录功能。对于我这种常年低危的菜鸡来说&#xff0c;这是最愿意看到的&#xff0c;因为一个Web网站有了登录功能&a…

第2讲springsecurity+vue通用权限系统

阿里云 maven阿里云镜像 <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for addition…

数据记笔记:USGS 查看上世纪卫星图

1 先到USGS EarthExplorer 界面&#xff0c;在address 处选择需要的城市/也可以在底下polygon处手动标出需要研究的区域 2&#xff0c;点击show&#xff0c;就会出找到的对应的区域&#xff0c;点击这个区域&#xff0c;polygon处就会有响应了。然后选择date range 3 点击下方的…

AMD FPGA设计优化宝典笔记(4)复位桥

高亚军老师的这本书《AMD FPGA设计优化宝典》&#xff0c;他主要讲了两个东西&#xff1a; 第一个东西是代码的良好风格&#xff1b; 第二个是设计收敛等的本质。 这个书的结构是一个总论&#xff0c;加上另外的9个优化&#xff0c;包含的有&#xff1a;时钟网络、组合逻辑、触…

VS中设置#define _CRT_SECURE_NO_WARNINGS的原因和设置方式

原因&#xff1a; 在编译老的用C语言的开源项目的时候&#xff0c;可能因为一些老的.c文件使用了strcpy,scanf等不安全的函数&#xff0c;而报警告和错误&#xff0c;而导致无法编译通过。 解决方案&#xff1a; 我们有两种解决方案&#xff1a; 1、在指定的源文件的开头定…

跟着pink老师前端入门教程(JavaScript)-day02

三、变量 &#xff08;一&#xff09;变量概述 1、什么是变量 白话&#xff1a;变量就是一个装东西的盒子 通俗&#xff1a;变量是用于存放数据的容器&#xff0c;通过变量名获取数据&#xff0c;甚至数据可以修改 2、变量在内存中的存储 本质&#xff1a;变量是程序在内存…

你的电脑关机吗

目录 程序员为什么不喜欢关电脑&#xff1f; 电脑长时间不关机会怎样? 电脑卡顿 中度风险 硬件损耗 能源浪费 散热问题 软件问题 网络安全问题 程序员为什么不喜欢关电脑&#xff1f; 大部分人都会选择将电脑进行关机操作。其实这不难理解&#xff0c;毕竟人类都需要…

Linux_线程

线程与进程 多级页表 线程控制 线程互斥 线程同步 生产者消费者模型 常见概念 下面选取32位系统举例。 一.线程与进程 上图是曾经我们认为进程所占用的资源的集合。 1.1 线程概念 线程是一个执行分支&#xff0c;执行粒度比进程细&#xff0c;调度成本比进程低线程是cpu…

vue-ESlint (六)

代码规范 代码规范&#xff1a;一套写代码的约定规则。例如&#xff1a;"赋值符号的左右是否需要空格" "一句结束是否是要加;" . 老话说&#xff1a;"没有规矩不成方圆" → 正规的团队 需要 统一的编码风格 JavaScript Standard Style 规范说…