作业帮:探索多云架构下的数据库集群解决方案

news2025/1/12 10:10:09

导语:面对业务多元、数据海量、数据库种类多样、多云架构复杂等痛点,该如何制定既能解决问题又能降本增效的数据库升级方案?作业帮作为实践者,从四方面分享其数据库选型过程与思考。以下为作业帮DBA刘强在DTCC大会中的讲述。

嘉宾介绍:刘强,作业帮高级DBA。多年数据库运维经验,要负责MySQL、Redis、TiDB和 OceanBase 等不同数据库的使用与探索,数据库管理平台的开发工作。重点工作方向是分布式数据库在公司内部的推广和使用;配合业务部门进行需求测试以及方案落地。

 

作业帮数据库生态痛点及选型诉求

 

今天主要和大家分享作业帮在升级数据库方案时的选型思考,以及对 OceanBase 的尝试初体验。

大家都知道,作业帮作为在线教育的领军品牌之一,旗下有多款教育软件产品与硬件产品,而且每个产品背后的业务都有不同的特性和诉求。在这个背景下,我们的数据库状态呈现出五个特点。

 

Image

 

数据库种类多样

 

为了更好地承接各类业务需求,作业帮使用不同的数据库产品来支撑不同的业务。目前使用的数据库主要有MySQL+Orch、Redis-Cluster、MongoDB、Elasticsearch、TiDB和 OceanBase。

 

业务需求多元

 

经过几年的沉淀,目前我们公司的在线教育相关软硬件业务线较多, 数据库的使用场景也越来越细分化,对数据处理的灵活性和高效性都提出了更多的要求。比如 MongoDB的Schema Design特性,对第三方信息的获取、Json格式文档存储提供了非常灵活高效的存取方式,再比如Elasticsearch在业务日志的存储分析、在大数据的快速聚合分析、基础运维指标的采集监控等场景都有明显优势。

 

多云架构复杂

 

作业帮是一个多云架构,在云原生的大背景下,作业帮使用阿里云、腾讯云、百度云三云架构。业务流量主要分布在腾讯云上,其次是阿里云和百度云。

我们选择多云的主要原因是保证业务的连续性,避免因云厂商的设施故障导致在线业务的中断;另外一个比较重要的原因是可以结合每个云厂商特有的优势,更好的为业务赋能。

同时这种多云环境对数据库的高可用架构提出了更高要求。

 

海量数据存储

 

相信很多MySQL用户都会遇到单机存储瓶颈带来的困扰,通常,解决办法要么是定期清理数据,要么分库分表,这都会给业务人员和DBA人员增加额外的工作。作业帮也不例外,解决单机存储问题是我们使用分布式数据库最基本的需求。

 

运维管理智能

 

很多公司会针对不同数据库来开发自己的运维管理平台,以提升对数据库管理的敏捷性和可靠性。而完善的运维管理平台对DBA人员来说,意味着一项复杂且周期较长的工作。

总结来说,业务场景的技术需求和企业降本增效的诉求驱动我们进行数据库方案的替换和升级,我们把目标瞄准在分布式数据库领域。

  • 业务场景的技术需求:
  1. 作业帮有很多业务不需要分库分表的设计模式,这样可以减少对业务代码的侵入,也可以减轻DBA的压力。

  2. 承接复杂的查询操作,有时业务会查询一些扫描量较大的数据,也会经常去执行轻量级的OLAP类型的 SQL,而使用MySQL时总会出现响应不及时、跑不出数据的情况。

  3. 探索多云架构下数据库集群的解决方案。

  4. 对历史数据的归档。

  • 降本增效的诉求:从数据存储的角度进行压缩,或对主机的CPU和内存进行更高效的利用。

 

Image

 

OceanBase与TiDB的测试对比

 

在很早之前,我们就对 OceanBase 有所耳闻,但仅停留在“一款完全自主研发的优秀的数据库”这样的印象中。在 OceanBase 开源后,我们开始关注它并对它进行深入了解。

就在11月3日,OceanBase 社区版 4.0 发布,我们立即对 OceanBase 4.0做了进一步的调研和测试。结果,我们发现 OceanBase 主要有以下几个特点:

 

  • 弹性扩缩容:能够很好地解决作业帮最基本的单机存储瓶颈问题。

  • 数据压缩比、多租户模式:这两个特性能够帮助作业帮真正做到降本增效,尤其是OceanBase 4.0支持对CPU进行超卖分配,可以使我们更充分地利用硬件资源。

  • OLTP 性能高:我们只进行了最基本的sysbench压测,性能超出了我们的意料,在高并发情况下,SQL的响应耗时依然维持较低的水平。

 

Image

 

  • 业务兼容性:如果想从MySQL切换至 OceanBase,与 MySQL 5.7.24兼容性的对比是很重要的一点,我们测试了 OceanBase 4.0后,发现兼容性很高。

  • 管理易用性:我们使用的数据库如MySQL、Redis等,都需要自己开发管理平台。OceanBase 的 OCP管理平台由于其功能完善,且使用方便,对我们DBA人员来说能解放很大一部分生产力,因此有较大的吸引力。

由于我们的部分业务使用TiDB作支撑,因此,在测试 OceanBase 的过程中,我们也对二者进行了横向对比,数据如下。

 

Image

 

我们在数据写入后对比发现:

  • OceanBase 在存储效率方面相较于TiDB节省了35%以上的磁盘空间。

  • 在兼容性上,TiDB与 OceanBase 的表现都很好,相较而言,TiDB涉及的业务改造较少,但主键操作受限,OceanBase 则可能涉及将表改成分区表的成本投入。

  • 在运维管理方面,TiDB的监控比较完善,OceanBase 的优势在于其运维管理平台(OCP)易于使用,可以极大地减少DBA的开发管理工作。

  • 关于数据同步组件,TiDB的DM相对来说比较完善,在我们的业务中使用较多,OceanBase的OMS在我们的测试中表现也比较亮眼,但对于我们的业务场景来说,还有一些功能需要进一步完善。

  • 我们也关注到TiDB不支持多租户模式和多副本类型,而 OceanBase 对多租户模式的支持可以帮助我们高效利用资源,而且,OceanBase 还支持只读副本和日志副本。

  • 另外,我们也很看重DDL的响应,OceanBase 和TiDB在加字段方面都是秒级响应,在加索引或修改一些字段类型的情况下,可能会涉及数据的拷贝,但并不阻塞读写。

 

OceanBase 方案实现资源隔离与快速响应

 

基于以上的调研和测试结果,我们选择使用 OceanBase 承接一些离线数据查询需求。

作业帮的业务人员经常需要连接MySQL来查询线上数据,时常会有一些慢SQL导致线上存库所在的主机性能抖动,影响线上业务。我们将MySQL通过工具同步到 OceanBase 后,将业务查询平台的入口数据源改成 OceanBase,同时对同步工具进行监控。如果发现了中断,或者有比较大的延迟,我们也会将这个查询的入口切换回 MySQL。

下图是使用 OceanBase 后的架构,该架构实现了资源隔离,极大地减少了对线上数据库不必要的影响。同时,在使用MySQL时一些耗时较长或对线上影响较大的SQL,在 OceanBase 中都能快速响应。后续,我们会将作业帮内部对统计分析类业务逐渐迁移到 OceanBase 中。

 

Image

 

期待 OceanBase 解决作业帮多云环境的四个问题

我在文章开头提到,作业帮采用的是多云环境,如下图所示,三个机房之间有机房专线,业务流量分布不均匀,主要的业务流量都在腾讯云,阿里云和百度云会分布层级节点。作业帮的业务部署流量是实现单元闭环,每个机房都部署业务,这个业务只访问本机房内部的数据库入口节点(业务访问路径是App -> Proxy->MySQL)。

 

Image

 

这个多云架构存在四个问题。

第一个问题, 在专线抖动的情况下,当阿里云的业务节点需要向master进行写数据的时候,会出现写入失败的情况。我们的基本诉求是业务节点在阿里云内能够实现只读,这样可以尽可能地减少对业务的影响。

第二个问题, 专线故障。当腾讯云和阿里云之间出现了专线故障且长时间不可恢复,此时在保证高可用不会误切主的前提下,通知业务将阿里云的业务流量调度到腾讯云, 等专线恢复后再将架构复原。

第三个问题, 机房级别的故障。机房级别的故障分为主机房不可用和主机房可用两种情况,如果主机房可用,而主机房和其他两个机房都实现了网络隔离,我们会优先将业务流量切换到腾讯云,这样能保证绝大部分流量不用进行切换处理。

第四个问题, 基础机房不可用,导致腾讯云整个系统故障。此时我们会进行数据库层面的切换,将主节点切换到阿里云或百度云,再将腾讯云的业务流量切换到新的集群主节点中。

基于我们的业务流量分布特点和架构情况,当前高可用架构的主要痛点在于如何保证其稳定性并在极端网络情况下不发生脑裂。同时,基于MySQL的双活架构,实现难度也较大。

那么,OceanBase 是否能给我们带来更好的解决方案?

OceanBase 不需要额外的高可用管理组件,使用Paxos协议能更好地保证高可用架构的稳定性,且避免了脑裂的情况。

在我们同城三机房的背景下,我们使用三zone五副本的方式部署一套集群,能够满足绝大部分业务需求。同时,在单云化改造方面提供了较为完善的解决方案。

 

Image

 

假如我们按照用户的某个维度进行数据分片,一个机房一个分片表,通过leader的调度功能将leader副本调度到本机房内,每个机房的业务单云在本机房实现流量闭环读写。

除此之外,据 OceanBase 的工程师透露,OceanBase 的主备集群的的功能将会在 OceanBase 开源4.1版本中发布,这让我们非常期待。因为该架构的主要优势在于可以进行异地机房的数据容灾,且备集群只需要单个副本,架构易于管理且成本低。

 

Image

 

写在最后

 

基于 OceanBase 的种种优势,比如高效的资源利用、灵活地副本调度、稳定地高可用架构等,我们将陆续在公司内部进行推广,并连同业务尝试单元化方案的改造和落地。

另外,OceanBase 企业版的一些优秀特性如透明加密,我们也会持续关注并在适当的时机推进商业化服务的合作。

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

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

相关文章

移动端自动化python使用appium包登录qq

听标题挺高大上的,其实内容还是脚本小子的高度。。。 为了写个月报一下午抓紧学点东西,好凑点字数,汗。。。 为啥学这个内容,因为找内容的时候翻csdn翻到一个自动抢红包的,就是用的这个技术,前面实验挺好&a…

React Native 三端同构在雪球的实践

随着移动互联网的迅猛发展,目前市面上「端」的形态多种多样,iOS、Android 、H5、微信小程序等各种端大行其道,同一个业务需求往往又需要在多端上去实现,针对不同端去编写多套代码的成本显然非常高。雪球大前端团队将今年在跨端能力…

提取DC综合report_constrain all violator中big neg slack

问题描述 在综合前几版中&#xff0c;通过report_constrain -all_violator命令到得到的违反数量非常多&#xff0c;但暂时只关注比较大的setup/hold违例。 &#xff08;1&#xff09;我们希望提取 < -1.0的违例 &#xff08;2&#xff09;需要把多行合并到一行。 &#xf…

学习python,我使用代码悄悄集齐了五福~哎嘿嘿

啊哈哈哈哈&#xff0c;我又又又来啦 这不是快春节了吗&#xff0c;支付宝等一些集五福活动又又又又一次的到来 今天呢&#xff0c;写一个啥呀我也不晓得&#xff0c;啊哈哈哈哈哈 今天写一个%90会出敬业福哦&#xff0c;啊哈哈哈哈 1.制作文字福 这个其实挺“简单”的&…

如何计算单元测试的覆盖率

一、概念 单元测试的覆盖率有&#xff1a;语句覆盖率&#xff08;即行覆盖率&#xff09;、分支覆盖率、条件覆盖率、分支条件覆盖率、路径覆盖率等。 语句覆盖率 所谓语句就是那些非分支、非判断的语句。 计算公式&#xff1a;程序执行到的语句总数 / 全部语句的总数 分支覆…

C语言程序设计易混、易错知识点(中篇)

注&#xff1a;个别题目未给ABCD&#xff0c;只需要了解知识点即可&#xff1b;另外排版可能有点乱&#xff0c;望知悉 在printf中的%作为转义符&#xff0c;两个%才相当于1个% free掉一个指针后&#xff0c;指针的值是不会自动置为NULL的&#xff0c;当然其指向的内存已经被释…

C语言从入门到放弃——字符串和内存操作函数

字符串&#xff0c;是一种由双引号引起的一整串字符&#xff0c;在C语言中&#xff0c;字符串是没有类型的&#xff0c;通常我们将字符串放在字符数组当中&#xff0c;同时&#xff0c;我们对于字符串的操作是很频繁的&#xff0c;因为对于字符串的操作频繁&#xff0c;所以C语…

为什么需要预选器?

无论是采用模拟IF处理的传统频谱仪&#xff0c;还是采用数字IF处理的现代频谱仪&#xff0c;都是扫频式架构&#xff0c;通过第一级本振(LO)的调谐实现射频的扫频测试。熟悉频谱仪架构的朋友都了解&#xff0c;在第一级混频器之前都会存在一个预选器&#xff0c;如图1所示&…

点成分享|器官芯片——小白鼠的拯救者?

在新药研发的漫长过程中&#xff0c;实验动物模型是药物从临床前试验阶段进入到临床试验阶段的金标准。实验动物模型有助于人们了解疾病的起源、病理生理特征、疾病机制、识别药物靶标、评估新药物的疗效和人体毒性以及进行药代动力学评价等。常用的实验动物模型包括小鼠、大鼠…

黑马学ElasticSearch(七)

目录&#xff1a; &#xff08;1&#xff09;RestClient查询文档-快速入门 &#xff08;2&#xff09;RestClient查询文档-match、term、range、bool查询 &#xff08;3&#xff09;RestClient查询文档-排序和分页 &#xff08;4&#xff09;RestClient查询文档-高亮显示 &…

git版本回退(git reset、git revert、git stash)

文章目录回退的两种情况1.已 commit&#xff0c;未push到远程仓库。git reset --soft &#xff08;撤销commit&#xff09;git commit --amend&#xff08;修改commit 提交的内容&#xff09;git reset --mixed&#xff08;撤销 commit 和 add 两个动作&#xff09;2.已 commit…

联合证券|左手消费,右手TMT!超270只股票新年获“买入”“推荐”

2023年开年A股商场交投继续火热&#xff0c;出资组织在活跃呼吁出资者布局的一起&#xff0c;自己又更加看好哪些标的和赛道&#xff1f; Wind数据显现&#xff0c;2023年头&#xff0c;券商关于大消费、TMT等方向装备价值更为喜爱&#xff0c;到1月10日&#xff0c;给予“买入…

LOAM、LEGO-LOAM与LIO-SAM的知识总结

文章目录LOAM、LEGO-LOAM与LIO-SAM的知识总结1.概要2.传感器信息读取3.数据的预处理4.激光雷达里程计4.1特征点提取4.2特征点关联匹配4.2.1 标签匹配4.2.2 两步LM优化4.2.3 LIO-SAM优化4.2.3.1 IMU预积分4.2.3.2 关键帧的引入4.2.3.3 因子图4.2.3.4 GPS因子4.2.3.5 回环因子5. …

代码随想录算法训练营第十五天字符串 java : 层序遍历 226.翻转二叉树 101. 对称二叉树

文章目录前言Leetcode 102 二叉树的层序遍历题目讲解Leetcode 226.翻转二叉树题目讲解Leetcode 101. 对称二叉树题目讲解递归法总结前言 递归三定律 确定参数和返回值确认终止条件确认单层递归的逻辑 Leetcode 102 二叉树的层序遍历 题目讲解 /*** Definition for a binar…

大批量数据需要导出导入时,使用mysql 快速导出和导入 csv

使用MYSQL命令行模式 导出into outfile 导入load data导出 into outfile&#xff1a;mysql> select * from cdkeyduihuan into outfile d:/cdk.csv FIELDS TERMINATED BY ,;Query OK, 1049990 rows affected (1.16 sec)d:/cdk.csv 导出数据保持的文件目录。FIELDS TERMINATE…

windows ngnix 配置https

因为客户需求&#xff0c;需要把原来的http换成https&#xff0c;还不能影像原来http的访问。 看了许多网上的资料&#xff0c;经过实践。我总结下相关步骤及怎么配置的。 第一步&#xff0c;把http换成https这里需要ssl证书 ssl证书生成&#xff0c;我接触的有2种免费方式。…

Kettle的安装以及简单使用

Kettle是一款开源免费的ETL工具&#xff0c;ETL全称 Extract - Transform - Load 意味着数据抽取&#xff0c;转换&#xff0c;装载的过程。 ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程&#xff0c;目的是将企业中的分散、零乱、标准不统一的数据整合到…

二叉树19:最大二叉树

主要是我自己刷题的一些记录过程。如果有错可以指出哦&#xff0c;大家一起进步。 转载代码随想录 原文链接&#xff1a; 代码随想录 leetcode链接&#xff1a;654. 最大二叉树 题目&#xff1a; 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地…

【ElementUI】一.axios拦截器;二.ElementUI

目录 一.axios拦截器 1.axios模块的作用&#xff1a;是对基于http请求的封装。在浏览器端对异步请求对象XMLHttpRequest进行封装 2.拦截器&#xff1a; &#xff08;1&#xff09;请求拦截器&#xff1a;对客户端发起的请求进行统一的前期处理&#xff08;token、时间戳、co…

分支与循环语句 - 练习题

目录 一、分支语句 1. 判断一个数是否为奇数 2. 输出1-100之间的奇数 法1&#xff1a;遍历1-100所有的数字&#xff0c;判断是否为奇数&#xff0c;再输出 法2&#xff1a;奇数从1开始&#xff0c;等差为2&#xff0c;所以循环2 二、循环语句 1. 计算 n的阶乘。 2. 计算…