首页 > 其他分享 >分库分表还是分布式?如何用 OceanBase的单机分布式一体化从根本上解决问题

分库分表还是分布式?如何用 OceanBase的单机分布式一体化从根本上解决问题

时间:2024-09-27 19:23:19浏览次数:9  
标签:分库 OceanBase 数据库 业务 分表 分布式

随着企业业务规模的不断增长,单机集中式的数据库系统逐渐难以承载企业日益增长的数据存储与处理需求。因此,MySQL 的分库分表方案成为了众多企业应对数据存储量激增及数据处理能力需求扩张的“止痛药”。尽管这一方案短期内有效缓解了企业面临的大规模数据处理压力,但同时也引发了一系列棘手的问题。

01  分库分表:业务需求扩张的短时止痛药

数据库经过了数十年演进,在分布式技术飞速发展的今天,即使大家对分库分表的缺陷已经有了一定认知,关于“分库分表还是分布式”的争论依然屡见不鲜,分布式系统似乎仍然没有完全取代分库分表方案。许多企业认为,分库分表在原有的 MySQL 技术栈上进行改造,可以充分利用成熟的技术经验,在短期内足以解决业务增长带来的问题。而在分库分表可以应对当前业务规模的情况下,还有必要进行分布式升级吗?

程序员界有一条“真理”——“过早优化是万恶之源”。这是由计算机科学先驱 Donald Knuth 在《计算机程序设计艺术》中提出的一项优化原则,他认为在为时尚早的时候过度关注效率提升和软件性能优化,往往会适得其反,带来大量的资源浪费,提醒人们在进行程序设计时需要优先考虑业务的真实需求,减少不必要的优化投入。分库分表似乎是对这一原则的践行:面对业务需求扩张时,采用最自然的思路,在已有系统的基础上进行过渡式改造,避免根本性的替换。

同样地,在通过分库分表就可以解决眼下问题时,似乎没有进行分布式升级的必要。

然而事实却与期望背道而驰。回顾分库分表的出现,表面是因为企业在业务体量扩大时需要有效处理大规模数据的分布式方案,其本质却是随着企业发展,业务的快速变化带来的需求变更,强调的是底层资源应当具备灵活支撑上层业务发展迭代的能力。

分库分表因为业务快速发展的需求而生,却恰恰无法灵活地支撑上层业务变化迭代:

  • 分库分表对业务侵入性强,在底层数据库发生扩展、变更时,上层业务也需要进行相应的改造,将数据库本身的压力转嫁到业务层,无法满足企业忽略底层设计、专注上层业务开发、快速迭代的需求。

  • 分库分表系统架构复杂,不仅增加运维负担,当业务需求发生变化时,还需要重新设计合理的分库分表方案以保障系统性能。而企业在各个阶段遇到的业务需求不同,不可能在分库分表的基础上不断缝缝补补来支撑全生命周期的发展。

在企业的初始阶段,业务量比较小,一台小规格 MySQL 即可承载数据库业务;随着业务体量增大,企业可以选择提升机器规格,或者进行分库分表。但随着业务继续扩张,需要更高扩展性时怎么办?核心业务可用性需求提升,要求主备容灾时怎么办?业务缩水或出现变化,系统需要瘦身时怎么办?随着每一个阶段业务需求的变化,每次系统改造都会带来翻天覆地的变化。因此,分库分表只是对企业规模扩张短时间内有效的“止痛药”,既无法根治企业追求分布式事务性能的“标”,也无法解决企业在不同发展阶段业务需求持续变化、需要数据库系统灵活应对的“本”。

《汇编语言的编程艺术》的作者、资深软件专家 Randall Hyde 在一篇博客中分享道,“不要过早优化”并不等同于“不要优化”,其原意是指在拘泥于微观优化之前,更应当关注会影响全局性能的系统性问题。他还提到,“设计软件时,应该从一开始就考虑性能问题。一个好的软件开发人员会自动做到这一点,他们大概知道性能问题会在哪里出现。没有经验的开发人员不会关注这个点,错误地认为在后期进行一些微调可以解决任何性能问题”。

那么,在系统设计的一开始,从根源真正解决分库分表难题,需要怎样的一款数据库解决方案?

OceanBase 给出的答案是:通过原生分布式 + 单机分布式一体化架构。不仅要将所有的分布式工作封装在数据库内实现,使业务无需关心底层架构即可实现快速迭代,还要关注企业在各个发展阶段会面临的不同业务需求,帮助企业摆脱频繁的系统改造,集中于上层业务拓展,打造伴随企业全生命周期的发展的数据库解决方案。

02   治“标”:原生分布式屏蔽底层复杂性
       灵活扩展,助力业务快速迭代

回顾分库分表方案的缺陷,首先,在分库分表系统中跨库跨表的事务处理难度高,难以保障数据的完整性和一致性。其次,分库分表的数据库性能强依赖于分区策略的设计,导致架构复杂性增加与运维难度增加,如果没有合理的设计、某些表集中了大量的读写操作,则会引发严重影响性能的热点问题。

同时,跨库跨表查询、数据聚合和报表生成等操作复杂度高,性能受制于多种因素,往往需要额外的优化技术和中间件支持。在容量规划、扩展、迁移时,都需要重新进行规划设计,对系统稳定性和数据完整性带来巨大考验。另外,分库分表方案要求业务代码需要直接或者间接感知到分库分表的逻辑,增加了业务代码与数据库之间的耦合度,导致了维护和扩展困难。

这些缺陷都是由于分库分表使用中间件在集中式数据库的基础上构建分布式系统,其内核仍然是集中式设计,并非为处理分布式事务而生,难以适配分布式架构的需求。

OceanBase 原生分布式摒弃了分库分表方案利用中间件处理分布式事务的思路,在系统架构设计和分布式事务实现等层面原生融入分布式基因,打造真正为分布式而生的数据库

在系统架构设计方面, OceanBase 采用分区表(Partition Table)的设计思想,实现了在原生分布式架构下的水平扩展和数据管理,从根源上解决了传统分库分表强依赖于中间件和分区策略设计带来的复杂问题。OceanBase 的底层架构支持数据在多个计算节点(OBServer)之间进行水平扩展。分区的多个副本可以分布在不同的 Zone(可用区)中,通过 Paxos 协议保障副本间跨节点的数据一致性,并确保分布式事务的 ACID 特性,同时支持多副本和跨数据中心容灾,提供金融级别的高可用保障。此外, OceanBase 直接通过数据库内部的分区机制进行水平扩展和灵活调整,无需用户自行设计和维护复杂的分库分表策略,减轻了分布式数据库设计和运维的复杂度。

OceanBase 引入路由机制,帮助上层业务屏蔽底层逻辑,应用程序无需关注数据具体分布在哪一台服务器上,能够像操作单体数据库一样处理分布式数据。当客户端发起 SQL 查询时,OBProxy 会根据分区键的值确定数据所在的分区,并将请求路由到合适的 OBServer 上执行。OceanBase 在底层对 SQL 的分布式执行和分布式事务进行了封装,这种透明路由机制使得应用程序无需关心具体的分库分表细节,对上层业务完全透明。系统支持在线扩容、缩容和迁移,从而支撑上层业务的灵活变化与迭代。

图片

图 1: 分库分表与 OceanBase 原生分布式架构对比

此外,OceanBase 原生分布式还通过多种架构设计,相比分库分表做到了成本的降低和性能的提升。一方面, OceanBase 基于无共享架构,使用普通 PC 服务器构建集群,对比传统分库分表所需的高端存储设备和 License 费用,大幅降低了硬件和软件成本,提高资源利用率。另一方面,OceanBase 的分布式查询优化器在分布式环境下智能调度执行计划,减少跨节点数据传输和处理,保障高查询性能,同时通过分区表和本地索引等功能有效地处理分布式查询,降低操作延迟。

03 治“本”:单机分布式一体化支撑企业全生命周期发展

以一个典型的企业发展历程为例,随着业务规模的增长,传统数据库选型路径会经历从支撑小型业务的小规格 MySQL,到支撑中型业务的高规格的 Oracle,再到大型业务使用 Oracle RAC 解决基础的扩展性问题,后续可能还要升级到小型机+DB2 的方案承载核心业务。

图片

图 2: 企业业务规模与数据库选型策略示意图

这一传统路径存在几大缺陷。首先,扩展性存在天花板,无法做到随业务体量无限灵活扩展。其次,每次升级改造都涉及大量软硬件的替换,带来无法估计的成本。最后,这条升级路线是“单行道”,面对现实场景中更曲折的业务变化难以“回头”,无法规避超额的成本投入。

2022 年,OceanBase 发布 4.0 版本,随着“单机分布式一体化”概念的提出,OceanBase 开始探索用一套解决方案,应对企业在不同发展阶段、不同业务体量带来的不同挑战,让数据库伴随业务成长,满足企业“一次选择支撑全生命周期业务发展”的需求

OceanBase 的“单机分布式一体化”架构在部署形态方面有两层含义。第一层含义是指同一个 OBServer 既可以单机部署,也可以分布式部署。第二层含义是在 OceanBase 分布式集群中,可以存在单机形态的租户。并且,无论在租户层面还是集群层面,单机和分布式的形态可以灵活调整切换。

图片

图 3: OceanBase 单机分布式一体化产品形态示意图

如上图所示,OceanBase 的单机分布式一体化允许企业在业务发展各阶段灵活调整数据库架构,选择最适合当前需求的部署模式。

在初始阶段,企业可以使用小规格机器部署单机 OceanBase。随着数据规模的增长,可以选择替换更大规格的单机进行垂直扩展,同时主备库、三副本等部署模式支持企业的容灾和高可用需求。当数据规模进一步扩展时,企业可以选择水平扩展,扩大集群规模,支撑大型业务。

“单机分布式一体化”听起来并不复杂,当一个数据库可以解决复杂的分布式事务时,似乎单机部署也并不是一件难事。然而事实并非如此。在分布式架构方面,OceanBase 多年来在分布式 TP 领域的丰富经验,以及打破 TPC-C 世界纪录的成绩已经证明了其处理分布式事务的能力。因此在面对“单机分布式一体化”命题时,挑战主要存在于“单机”和“一体化”两方面:

第一,如何提升数据库在小规模和单机模式下的性能,使其与单机数据库相当?

分布式系统为了实现分布式事务的原子性和持久性,其日志流设计相比单机数据库会产生更大的开销,支撑单机事务和小规格分布式事务的性能表现显著低于单机集中式数据库。对一些企业来说,采用分布式系统反而会导致数据库性能下降,因此宁愿选择用更高成本对现有数据库进行机器规格上的垂直升级。

具体而言,日志流是数据库实现事务原子性和持久性的保障。基于日志流,分布式数据库为了保证原子性而引入了两阶段提交等分布式事务协议;为了保障持久性,又引入了 Paxos 等选举协议。这些相比单机数据库额外增加的操作也带来了更大的开销。另一方面,分布式的写入是多点的,因此会产生多条日志流。日志流的数量会影响参与两阶段提交和参与 Paoxs 选举的组的数量,从而影响分布式事务的开销。

在常见的分布式系统中,日志流的数量对应数据分片的数量,数据量越大,分区的数量越大,分布式事务的开销就越大、性能受到的影响越明显。想要让分布式数据库的单机性能和单机数据库性能相媲美,就需要降低日志流的数量。

面对这一问题, OceanBase 的做法是将日志流的数量降到和节点数相关。单机部署模式下的 OceanBase,从架构上来说和传统的单机数据库没有区别,只有一条日志流,在进行分布式扩展时,日志流数量仅与节点数相关,分布式代价的增长显著降低。

通过对日志流的改造,OceanBase 实现了在单机模式和小规模分布式部署模式下,性能与单机数据库相当。

图片

图 4: 4C16G 规格 Sysbench 性能测试对比

OceanBase 社区版 4.0 v.s RDS for MySQL 8.0

如上图所示,在 4C16G 的小规格场景下,Sysbench 测试结果显示,OceanBase 4.0 的 insert 和 update 性能可以达到 MySQL 8.0 的两倍,其他几项性能也能做到与 MySQL 8.0 相当。同时,单机部署模式下,OceanBase 的存储成本更低。经测试,在 TPC-H 100G 场景下 OceanBase 4.0 的存储成本仅有 MySQL 的 1/4。

第二,如何在不牺牲性能的情况下,实现单机模式和分布式的灵活调整切换?

解决了单机和分布式部署模式下的性能问题,如何在不牺牲性能的情况下保障水平方向的灵活扩展成为了单机分布式一体化架构需要解决的另一个问题。

除了前文提到的,通过对日志流的改造,在进行水平扩展时,日志流数量随节点数增加,从而减少开销之外,OceanBase 还引入了多种方法,支持用户通过手动或自动的方式提升扩展性能。

作为分布式数据库,为了满足扩展性和多点写入等需求,OceanBase 数据库支持分区功能,即将一个表的数据分成多个分区来存储,将分区方式相同的表聚集到一起就形成了表组。在系统进行负载均衡时,表组可以帮助用户将具有关联关系的数据聚集在同一台机器上,即同一个表组的表会被绑定在同一个日志流中。通过设置表组,用户可以避免大量的跨机器操作,从而有效降低连接场景下的数据传输的开销,提升性能。极端情况下,如果一个事务涉及的表在一个表组内,那么它即为一个单机事务,不会存在分布式开销。

OceanBase 也提供了自动化的调度,帮助提升扩展性能。例如 OceanBase 支持自动对 RPC 进行聚合,还支持通过自动负载均衡将分布式事务的分区调度在一起,减少分布式开销。

图片

图 5: TPC-C 性能测试 OceanBase 在不同节点数规模下 tpmC 值变化情况

上图展示了 TPC-C 测试 OceanBase 集群节点数从 3 台机器扩展到 1500 台机器的过程中,tpmC 的数值变化。测试结果表明,即使在包含 10%分布式事务的情况下,OceanBase 集群性能仍能随集群规模扩展实现线性提升。

04 原生分布式 + 单机分布式一体化
     助力现代化数据架构升级

OceanBase 原生分布式+单机分布式一体化能力已经被应用在多种场景中,替代分库分表方案,助力企业实现现代化数据架构升级。

标签:分库,OceanBase,数据库,业务,分表,分布式
From: https://blog.csdn.net/OceanBaseGFBK/article/details/142554835

相关文章

  • 分布式数据库在老乡鸡餐饮中的技术实践
    业务背景:MySQL带来的三个技术瓶颈老乡鸡隶属于安徽老乡鸡餐饮股份有限公司旗下品牌,是以中式快餐为特色的连锁餐饮品牌,在全国有1000多家快餐店,从养土鸡起家,实现了从养殖到餐桌的全产业链模式。目前,北京、上海、深圳、杭州等一线城市都有门店,并以每年新增300家的速度发展。鸡类菜品......
  • 淘客导购系统的分布式存储与管理
    淘客导购系统的分布式存储与管理大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来深入探讨一下淘客导购系统中的分布式存储与管理。随着用户量的增大和数据规模的扩展,单一数据库和存储方案已经无法满足高并发和大规模数据处理的需求。......
  • 鄂尔多斯市鄂托克旗巴音乌苏六保煤矿5MW分布式光伏项目案例分析
    摘要:分布式光伏发电利用太阳能光伏板,分散布置在各区域,通过小规模、模块化并网或独立使用。其特点为就近发电、并网、转换和使用。技术进步和政策支持降低了光伏组件成本,推动了分布式光伏监控系统在多个领域的广泛应用。在全球能源转型的背景下,提升能源利用效率和优化管理流程......
  • 2 Redis实现分布式锁
    用Redis实现分布式锁的原理主要基于Redis提供的原子操作命令(如SETNX、EXPIRE等)和一些高级特性(如Lua脚本、RedLock算法等),来确保在分布式环境中对共享资源的互斥访问。以下是用Redis实现分布式锁的具体原理:一、分布式锁的基本步骤分布式锁的基本原理可以分为以下几个步骤:请求锁......
  • Java单体服务和集群分布式SpringCloud微服务的理解
    单体应用存在的问题1.随着业务的发展开发变得越来越复杂。2.修改或者新增,需要对整个系统进行测试、重新部署。3.一个模块出现问题,很可能导致整个系统崩溃。4.多个开发团队同时对数据进行管理,容易产生安全漏洞。5.各个模块使用同一种技术进行开发,各个模块很难根据实际情况......
  • HBase2.1分布式部署
    一、部署环境及Hbase各组件简介Hbase组件简介1.ClientClient包含了访问Hbase的接口,另外Client还维护了对应的cache来加速Hbase的访问,比如cache的.META.元数据的信息。2.ZookeeperHBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作......
  • Redisson与分布式锁
    一.Redis的常用客户端:Jedis:和命令最相似,API全面。缺点:多线程不安全(多线程可以使用连接池,安全使用Jedis)SpringData:线程安全的,底层基于Netty(异步的支持)Redisson:线程安全的,底层基于Netty,提供很多的分布式服务(分布式锁,分布式集合,分布式下的JUC的封装,延时队列)二.Redis实现......
  • 学习《分布式》必须清楚的《CAP理论》
    分布式的理论基础CAP理论当学习分布式的redis、mq等中间件时,都会看到有提到CAP。CAP理论是学习分布式必备的一个概念知识点。CAP理论由三个特性组成,分别是一致性(Consistency)、可用性(Availability)、分区容错性(PartitionTolerance)。注意:一般的分布式的系统服务或中间件,......
  • DDL 超时,应该如何解决 | OceanBase 用户问题集萃
    问题背景在OceanBase的社区问答里常看到有用户发帖提出DDL超时的问题, 如“执行DDL超时,为何调大超时时间不生效?”。但很多帖子的回答都没有完美解决。因此,这里把相关的解决思路在这里分享给大家。帖子里对这类问题的描述都很简单:就是执行了一条DDL,然后超时了,再然后把ob_......
  • 这10种分布式ID,太绝了!
    这10种分布式ID,太绝了! 前言分布式ID,在我们日常的开发中,其实使用的挺多的。有很多业务场景在用,比如:分布式链路系统的trace_id单表中的主键Redis中分布式锁的key分库分表后表的id今天跟大家一起聊聊分布式ID的一些常见方案,希望对你会有所帮助。1UUIDUUID(Univers......