阿里巴巴数据库分库分表的实践(1)

简介: 阿里巴巴数据库分库分表的实践(1)

1.阿里巴巴分布式数据层平台发展和演变


业务数据从原来的单库单表模式变成了数据被拆分到多个数据库,甚至多个表中,如果在数据访问层做一下功能的封装和管控,所有分库分表的逻辑和数据的跨库操作都交给应用的开发人员来实现,则对开发人员的要求变得相对高一点,稍有不慎,可能会对平台的业务包括数据带来较大的影响。


2006年阿里巴巴B2B团队以开源方式研发了Cobar这一关系型数据的分布式处理系统。该系统在很大程度上解决了最初使用Oracle数据库因为存储数据变得越来越大带来的扩展性问题,并且为开发人员提供了一个使用相对简单的用户体验,在当时Cobar平均每天处理近50亿次的SQL操作。但随着阿里巴巴业务场景越来越复杂,Cobar平台功能上的约束对满足某些业务场景显得力不从心,例如:


1)不支持跨库情况下的连接、分页、排序、子查询操作。


2SET语句执行会被忽略,处理事务和字符集设置除外。


3)分库情况下,insert语句必须包含拆分字段列名。


4)分库情况下,update语句不能更新拆分字段的值。


5)不支持SAVEPOINT操作。


6)使用JDBC时,不支持rewriteBatchedStatements=true参数设置(默认为false)。


7)使用JDBC时,不支持useServerPrepStmts=true参数设置(默认为false)。


8)使用JDBC时,BLOBBINARYVARBINARY字段不能使用setBlob()setBinaryStream()方法设置参数。


2008年阿里巴巴内部基于淘宝业务发展的需要,在Cobar的基础上重新研发了分布式数据层框架TDDLTaobao Distributed Data Layer,外号:头都大了),针对分库分表场景,提供了对各种业务场景的支持更加完善,开发人员体验更加友好,管控能力大幅提升。


目前TDDL已经成为阿里巴巴集团内部业务默认使用的分布式数据层中间件,支撑着今天阿里巴巴上千个应用,平均每天SQL调用超千亿次。从架构角度(如图5-3所示),TDDL沿袭了Cobar之前在应用和后端数据库之间的定位,通过增加对SQL的解析实现了更为精准的路由控制,以及对跨库join、统计等计算的支持,弥补了之前Cobar在功能上的约束和限制,成为一个完整支持SQL语法兼容的平台。


image.png


5-3TDDL架构示意图


三层数据源每层都按JDBC规范实现,使得对前端应用没有任何代码侵入。


Matrix层(TDataSource)实现分库分表逻辑,底下持有多个GroupDs


实例。


Group层(TGroupDataSource)实现数据库的主备/读写分离逻辑,底下持有多个AtomDs实例。


Atom层(TAtomDataSource)实现数据库连接(ipportpasswordconnec-

tionProperties)等信息的动态推送,持有原子的数据源。


通过TDDL实现一次来自应用的SQL请求,完整的交互流程(如图5-4所示)中体现了各个服务组件所起到的作用。


image.png


5-4TDDL针对一次SQL请求完整处理流程


正是有了这样的架构和设计,特别是增加了对SQL语义的解析,使得TDDL相比之前的Cobar在功能上提升了一个新的层级,对于Cobar不支持的跨库数据聚合、子查询、group byorder by等特性都有了很好的支持,从而成为在分库分表技术业界被很多技术同仁认可的一套分布式数据层框架,总结来说,TDDL提供了以下优点:


  • 数据库主备和动态切换。
  • 带权重的读写分离。
  • 单线程读重试。
  • 集中式数据源信息管理和动态变更。
  • 支持MySQLOracle数据库。
  • 基于JDBC规范,很容易扩展支持实现JDBC规范的数据源。
  • Serverclient-jar形式存在,应用直连数据库。
  • 读写次数,并发度流程控制,动态变更。
  • 可分析的日志打印,日志流控,动态变更。


随着阿里巴巴集团业务的多元化,特别是对于除电商领域以外业务的不断扩展和并购,TDDL这种无Server的模式对于故障的定位和对运行环境的要求(必须是阿里巴巴内部服务环境),支持这些新兴业务有了不少困难,所以在2014年,阿里巴巴已经研发出新一代分布式数据库产品DRDSDistributed Relational Database Service),该产品相比TDDL在业务场景的支持、故障的定位、运维管控等方面又有了一个全面的提升,今天DRDS已经成为阿里云上用于解决关系型数据库线性扩展问题的标准云产品,服务了几百家阿里巴巴集团外部的客户。


2.数据尽可能平均拆分


不管是采用何种分库分表框架或平台,其核心的思路都是将原本保存在单表中太大的数据进行拆分,将这些数据分散保存到多个数据库的多个表中,避免因为单表数据太大给数据的访问带来读写性能的问题。所以在分库分表场景下,最重要的一个原则就是被拆分的数据尽可能的平均拆分到后端的数据库中,如果拆分得不均匀,还会产生数据访问热点,同样存在热点数据因为增长过快而又面临数据单表数据过大的问题。


而对于数据以什么样的维度进行拆分,大家看到很多场景中都是对业务数据的ID(大部分场景此ID是以自增的方式)进行哈希取模的方式将数据进行平均拆分,这个简单的方式确实在很多场景下都是非常合适的拆分方法,但并不是在所有的场景中这样拆分的方式都是最优选择。也就是说数据如何拆分并没有所谓的金科玉律,更多的是需要结合业务数据的结构和业务场景来决定。


下面以大家最熟悉的电商订单数据拆分为例,订单是任何一个电商平台中都会有的业务数据,每个淘宝或天猫用户在平台上提交订单后都会在平台后端生成订单相关的数据,一般记录一条订单数据的数据库表结构如图5-5所示。



相关文章
|
4月前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
11月前
|
人工智能 前端开发 JavaScript
代码采纳率从 22% 到 33%,通义灵码辅助数据库智能编码实践
通义灵码本质上是一个AI agent,它已经进行了大量的优化。然而,为了更完美或有效地调用模型的潜在能力,我们在使用时仍需掌握一些技巧。通常,大多数人在使用通义灵码时会直接上手,这是 AI agent 的一个优势,即 zero shot 使用,无需任何上下文即可直接使用通义灵码的能力。
|
5月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
271 8
|
7月前
|
人工智能 运维 数据挖掘
瑶池数据库Data+AI驱动的全栈智能实践开放日回顾
阿里云瑶池数据库重磅推出“Data+AI能力家族”,包括DTS AI数据准备、Data Agent系列智能体及DMS MCP统一数据访问服务,重构数据与AI协同边界。通过智能化工具链,覆盖数据全生命周期,提升企业数据开发、分析、治理与运维效率,降低技术门槛,激活数据资产价值,助力企业迈向全栈智能新时代。
|
8月前
|
人工智能 运维 数据挖掘
瑶池数据库开放日:全新发布Data+AI能力家族,赋能企业全栈智能实践
近日,阿里云瑶池数据库生态工具产品重磅升级,推出“Data+AI能力家族”,并举办了为期3天的全栈智能实践开放日活动。发布会上首次公开了 “Data Agent for Analytics、Data Agent for Meta、DAS Agent”等瑶池数据库Data Agent系列能力,以工具智能化 × 智能化工具的双引擎重构数据与AI的协同边界,揭秘AI时代数据价值释放的全新路径。
|
11月前
|
数据库
|
5月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
444 158
|
5月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1040 152