阿里巴巴数据库分库分表的实践(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所示。



相关文章
|
2月前
|
存储 监控 安全
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
为了提供更好的日志数据服务,360 企业安全浏览器设计了统一运维管理平台,并引入 Apache Doris 替代了 Elasticsearch,实现日志检索与报表分析架构的统一,同时依赖 Doris 优异性能,聚合分析效率呈数量级提升、存储成本下降 60%....为日志数据的可视化和价值发挥提供了坚实的基础。
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
|
2月前
|
安全 Java 数据库
后端进阶之路——万字总结Spring Security与数据库集成实践(五)
后端进阶之路——万字总结Spring Security与数据库集成实践(五)
|
3月前
|
存储 SQL Cloud Native
深入了解云原生数据库CockroachDB的概念与实践
作为一种全球领先的分布式SQL数据库,CockroachDB以其高可用性、强一致性和灵活性等特点备受关注。本文将深入探讨CockroachDB的概念、设计思想以及实践应用,并结合实例演示其在云原生环境下的优越表现。
|
3月前
|
Cloud Native 关系型数据库 大数据
CockroachDB:云原生数据库的新概念与实践
本文将介绍CockroachDB,一种先进的云原生数据库,它具备分布式、强一致性和高可用性等特点。我们将探讨CockroachDB的基本原理、架构设计以及在实际应用中的种种优势和挑战。
|
4月前
|
中间件 关系型数据库 Java
MySQL数据库分库分表方案
MySQL数据库分库分表方案
134 0
MySQL数据库分库分表方案
|
6天前
|
SQL 监控 数据库
数据库管理与电脑监控软件:SQL代码优化与实践
本文探讨了如何优化数据库管理和使用电脑监控软件以提升效率。通过SQL代码优化,如使用索引和调整查询语句,能有效提高数据库性能。同时,合理设计数据库结构,如数据表划分和规范化,也能增强管理效率。此外,利用Python脚本自动化收集系统性能数据,并实时提交至网站,可实现对电脑监控的实时性和有效性。这些方法能提升信息系统稳定性和可靠性,满足用户需求。
25 0
|
2月前
|
缓存 监控 关系型数据库
构建高效的数据库应用:Python 实践
在当今数据驱动的世界中,构建高效的数据库应用程序对于企业和个人来说至关重要。Python 作为一种强大的编程语言,提供了丰富的数据库工具和库,使得开发人员能够轻松地构建高效、可靠的数据库应用程序。在本文中,我们将探讨一些关键的技术和最佳实践,以帮助你构建高效的数据库应用程序。
|
2月前
|
敏捷开发 弹性计算 架构师
浅谈微服务架构下的数据库设计与实践
在当今快速发展的软件工程领域,微服务架构因其高度的模块化和灵活性而受到广泛欢迎。然而,随之而来的是对数据库设计和管理提出了新的挑战。本文将探讨在微服务架构下,如何有效地设计和实践数据库以支持服务的独立性、数据的一致性和系统的扩展性。我们将从微服务的数据库隔离策略谈起,深入分析数据库的分库分表、事务管理、数据一致性解决方案等关键技术,并通过实例说明如何在实际项目中应用这些原则和技术。本文旨在为软件开发者和架构师提供一份指南,帮助他们在微服务架构的环境下,更好地进行数据库设计和管理。
204 1
|
3月前
|
SQL 监控 关系型数据库
解密SQL性能异常事件及阿里云数据库的性能调优实践
作为开发者想必都知道数据库是现代应用的核心组件之一,而且在当今互联网时代之下,SQL查询的性能直接影响系统的整体性能,它的性能对于系统的稳定性和响应速度至关重要。那么本文就来讨论一下SQL性能异常的排查和优化方法,包括我个人印象深刻的SQL性能异常事件,以及分享一下使用阿里云数据库产品/工具进行SQL性能调优的经验和心得体会。
84 1
解密SQL性能异常事件及阿里云数据库的性能调优实践
|
3月前
|
SQL 存储 监控
公司内部电脑监控软件的数据库管理:SQL代码实践
随着科技的飞速发展,公司内部电脑监控软件在保障信息安全和提高员工生产效率方面发挥着重要作用。本文将深入探讨监控软件的数据库管理,并通过SQL代码实践展示其操作和优化方法。
300 0