大型互联网架构中,数据存储会面临读写容量瓶颈问题,像淘宝双十一活动,核心数据存储集群读写日访问量可以达到100亿以上,在这种场景下,单机数据库方式必定面临极大挑战,类似的场景也在一些传统使用IOE的企业中成为一种制约业务发展的致命要素。而在阿里集团内,TDDL体系就是解决此种场景的利器, 这个体系是基于廉价pc和开源mysql、以客户端依赖方式、分库分表为主要手段、集中化数据库配置等几个关键要素构建起来, 成为阿里集团接入mysql的标准,提供整个集团上千个应用的数据库访问。
TDDL体系核心作用在于两个方面,1.直接提供分库分表,读写分离等解决数据库Scale Out问题的功能. 2.基于配置模型构建的包括数据库在线扩容、准实时数据同步服务、运维平台等支撑系统,接下来简单介绍下几个重要feature。
分库分表
TDDL主要部署在ibatis或者其他ORM框架之下,JDBC Driver之上,整个中间件实现了JDBC规范, 所以可以将其当作与普通数据源实例化并且注入到各种ORM框架中使用。
TDDL现时架构分为了3层,最上层的TDataSource负责分库分表路由,中间层TGroupDataSource 负责主备切换和读写分离,最下层TAtomDataSource一对一对应数据库连接池,进行动态的数据库配置信息变更等。3层数据源都可以单独使用,应对不同的应用场景,如图5-1所示。
图5-1-TDDL体系结构
作为分布式数据库,首要工作是解决单机的访问瓶颈同时尽可能完整保留单机的特性,这也就意味着对于用户的一个操作,可能分拆到多个数据节点进行数据处理,然后等待节点数据返回再按照sql语义进行合并。
一般分库分表的具体执行方式可以分为几个步骤,包括sql解析,规则计算,表名替换,执行,结果合并。sql解析主要将sql进行词法解析和语法解析,将其变成程序可识别的语法树,然后遍历整棵sql语法树取出我们所关心的内容,这些内容包括分库的字段是什么,对应的值是什么,是否有limit,order by, max,min等关键字,其中前者主要为了提供相关数据提供给规则进行计算,后者主要是在该sql跨多个表或者库的时候,在sql返回结果后按照这些关键字的语义进行合并。规则计算中,我们将解析得到的字段和值作为参数传递给规则引擎,这些规则引擎会进行类似简单数字取模, 日期计算,组合计算等操作。规则计算完毕后,我们能够得到真实的表和数据库,那么接下来要做的事情其实是,如果有分表,那么得把传入的sql中实际不存在的表替换成真实的表,并且必要情况下对sql做一些改变,这个阶段我们称之为表名替换。执行阶段就是将sql发送到数据库服务端,这里有串行和并行两种模式。如果单个sql最终需要通过多个子sql的形式在节点上执行,返回的结果可能不能直接返回给用户的,因为还需要根据原始sql的含义进行合并,这些合并一般遵循逐条流式进行,不能进行这种方式合并的sql一般放弃支持,因为强行合并,会有极大的内存溢出风险。
图5-2-TDDL总体流程图
简单描述了下整个分库分表的执行逻辑,这套逻辑经过多年的沉淀,相对比较成熟。但是在这些成熟逻辑的背后,一系列数据库运维支撑系统在保障数据库的正常有序运转,可以想象,如果数据库机器有成千上万台,每天坏个几台,上千个应用,隔三差五说数据库容量不够,种种挑战扑向你的时候,没有相对自动化的运维平台,那肯定是相当苦逼的。
在线数据库扩容
TDDL体系中数据库在线扩容和数据准实时同步是两个重要的组成部分,这边简单介绍下前者。在线数据库扩容,重点在于在线,也就是不影响业务正常的写入,因为数据库扩容涉及到的数据迁移需要时间,未采取其他措施的情况下,显然无法实现不影响业务。那么我们的方案将这个扩容分为几个阶段,包括全量迁移,增量同步,切换数据库。全量迁移阶段,我们将数据库数据扫描出来复制到目标,完成后,从事先记录的增量位点开始追赶,直到赶上当前的进度。 这种动态平衡的过程可以维持一段时间,应用安排某一天业务低谷期,直接切换到新的数据库即可。
数据准实时同步
如同流动的金钱才能发挥作用一样,流动的数据也能够创造出大价值。每天,淘宝的交易订单,商品,用户等核心数据通过团队的数据同步管道进行了流转,流向搜索,流向广告,流向大数据等等目的地。这套系统的实现原理基于增量日志的传输与重现,如mysql的binlog,oracle的redo log,hbase的HLog, 系统将这些源系统生成的对应日志拉到独立机器进行解析和必要变换,通过有序消息中间件传递给多方消费者使用。原理十分简单,但是在这套系统上面也沉淀了很多的经验。
TDDL其实并不是一个产品,它是一个完整的生态系统,这个生态系统以tddl产品为核心,构建出应用接入层,运维平台,数据支撑等组件。双十一中,TDDL整个产品体系支撑着整个业务系统的巨大流量,稳定高效,最高一个数据库集群峰值40w/s的写入,系统也是十分淡定。而未来,TDDL团队将继续本着创新务实的心态挖掘分布式数据库领域更多有价值的内容。
系列文章:
《 中间件技术及双十一实践之中间件总体介绍》 http://jm-blog.aliapp.com/?p=3359
《 中间件技术及双十一实践之软负载篇》 http://jm-blog.aliapp.com/?p=3450
《 中间件技术及双十一实践·服务框架篇》 http://jm-blog.aliapp.com/?p=3462
《 中间件技术及双十一实践·EagleEye篇》 http://jm-blog.aliapp.com/?p=3465
《中间件技术及双十一实践·消息中间件篇》http://jm-blog.aliapp.com/?p=3483
《中间件技术及双十一实践·数据篇》http://jm-blog.aliapp.com/?p=3490
如果觉得内容还行,请分享给更多的人…
转发:中间件技术及双十一实践之中间件总体介绍
转发:中间件技术及双十一实践之软负载篇
转发:中间件技术及双十一实践·服务框架篇
转发:中间件技术及双十一实践·EagleEye篇
转发:中间件技术及双十一实践·消息中间件篇