中间件技术及双十一实践·数据篇

标签: 产品和系列专题 | 发表时间:2014-03-06 09:24 | 作者:jm
出处:http://jm-blog.aliapp.com

数据层——分布式数据存储的桥梁

综述

大型互联网架构中,数据存储会面临读写容量瓶颈问题,像淘宝双十一活动,核心数据存储集群读写日访问量可以达到100亿以上,在这种场景下,单机数据库方式必定面临极大挑战,类似的场景也在一些传统使用IOE的企业中成为一种制约业务发展的致命要素。而在阿里集团内,TDDL体系就是解决此种场景的利器, 这个体系是基于廉价pc和开源mysql、以客户端依赖方式、分库分表为主要手段、集中化数据库配置等几个关键要素构建起来, 成为阿里集团接入mysql的标准,提供整个集团上千个应用的数据库访问。

5.1 TDDL

TDDL体系核心作用在于两个方面,1.直接提供分库分表,读写分离等解决数据库Scale Out问题的功能. 2.基于配置模型构建的包括数据库在线扩容、准实时数据同步服务、运维平台等支撑系统,接下来简单介绍下几个重要feature。

分库分表
TDDL主要部署在ibatis或者其他ORM框架之下,JDBC Driver之上,整个中间件实现了JDBC规范, 所以可以将其当作与普通数据源实例化并且注入到各种ORM框架中使用。

TDDL现时架构分为了3层,最上层的TDataSource负责分库分表路由,中间层TGroupDataSource 负责主备切换和读写分离,最下层TAtomDataSource一对一对应数据库连接池,进行动态的数据库配置信息变更等。3层数据源都可以单独使用,应对不同的应用场景,如图5-1所示。

图5-1-TDDL体系结构
图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总体流程图
图5-2-TDDL总体流程图

简单描述了下整个分库分表的执行逻辑,这套逻辑经过多年的沉淀,相对比较成熟。但是在这些成熟逻辑的背后,一系列数据库运维支撑系统在保障数据库的正常有序运转,可以想象,如果数据库机器有成千上万台,每天坏个几台,上千个应用,隔三差五说数据库容量不够,种种挑战扑向你的时候,没有相对自动化的运维平台,那肯定是相当苦逼的。

在线数据库扩容
TDDL体系中数据库在线扩容和数据准实时同步是两个重要的组成部分,这边简单介绍下前者。在线数据库扩容,重点在于在线,也就是不影响业务正常的写入,因为数据库扩容涉及到的数据迁移需要时间,未采取其他措施的情况下,显然无法实现不影响业务。那么我们的方案将这个扩容分为几个阶段,包括全量迁移,增量同步,切换数据库。全量迁移阶段,我们将数据库数据扫描出来复制到目标,完成后,从事先记录的增量位点开始追赶,直到赶上当前的进度。 这种动态平衡的过程可以维持一段时间,应用安排某一天业务低谷期,直接切换到新的数据库即可。

数据准实时同步
如同流动的金钱才能发挥作用一样,流动的数据也能够创造出大价值。每天,淘宝的交易订单,商品,用户等核心数据通过团队的数据同步管道进行了流转,流向搜索,流向广告,流向大数据等等目的地。这套系统的实现原理基于增量日志的传输与重现,如mysql的binlog,oracle的redo log,hbase的HLog, 系统将这些源系统生成的对应日志拉到独立机器进行解析和必要变换,通过有序消息中间件传递给多方消费者使用。原理十分简单,但是在这套系统上面也沉淀了很多的经验。

5.2、TDDL双11准备与优化

  • 数据库扩容双十一的数据库访问量大过平时访问量的好几倍,所以我们必须将数据库进行大幅度的扩容,阿里的数据库部署结构主要是单机器多实例方式,在双十一之前,一些容量不足的数据库集群必须将原本在一台机器上的实例拆分到不同机器上,通过动态推送配置不影响正常的业务访问,而原本拆分数量不够的数据库通过在线数据库扩容系统在短时间之内resharding,达到双十一的容量需求。
  • 数据准实时同步的扩容双十一之前, 整个集团有大量的核心应用使用数据准实时同步系统进行多维度的数据同步,而双十一的写入量导致该系统的容量需要进一步扩展,而最终这个系统达到了近500台机器的规模,保证双十一写入高峰同步延迟达到期望。
  • 前端的链接数调整和mysql并发控制patch的使用双十一之前,应用机器进行了大幅度扩容,而其连接池模型导致单机mysql总链接数达到了一个峰值,有可能在零点高峰导致mysql活动链接过多而hang住。那么dba同学通过tddl的动态配置将压力最大的几个核心应用单台机器最大连接池保持在3个以下。另外将这几个可能出现压力过大的mysql 集群打上并发控制patch,在流量超过阀值的时候,对访问数据库的链接进行排队处理。
    这个解决方案保证了数据库在双十一不至于hang住从而产生雪崩效应。

小结

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篇

转发:中间件技术及双十一实践·消息中间件篇

相关 [中间件 技术 双十一] 推荐:

中间件技术及双十一实践·中间件总体介绍

- - 阿里中间件团队博客
本文发表在《程序员》2014年1月刊:11.11背后的技术 http://www.csdn.net/article/2013-12-23/2817882. 阿里巴巴中间件与稳定性平台团队,是一个给业务应用团队以提供低成本,高可用,可扩展的弹性互联网系统解决方案为己任的技术团队,前身是成立于7年之前的淘宝平台架构部,而后随着业务领域,尤其是针对性能和稳定性技术领域的成功探索与突破,目前已经发展为一个涵盖消息通信,数据处理,性能优化和稳定性等各类技术的互联网架构服务平台.

中间件技术及双十一实践·消息中间件篇

- - 阿里中间件团队博客
消息中间件——分布式消息的广播员. 消息中间件是一种由消息传送机制或消息队列模式组成的最典型的中间件技术. 通过消息中间件,应用程序或组件之间可以进行可靠的异步通讯来降低系统之间的耦合度,从而提高整个系统的可扩展性和可用性. Notify是淘宝自主研发的一套消息服务引擎,是支撑双11最为核心的系统之一,在淘宝和支付宝的核心交易场景中都有大量使用.

中间件技术及双十一实践·数据篇

- - 阿里中间件团队博客
数据层——分布式数据存储的桥梁. 大型互联网架构中,数据存储会面临读写容量瓶颈问题,像淘宝双十一活动,核心数据存储集群读写日访问量可以达到100亿以上,在这种场景下,单机数据库方式必定面临极大挑战,类似的场景也在一些传统使用IOE的企业中成为一种制约业务发展的致命要素. 而在阿里集团内,TDDL体系就是解决此种场景的利器, 这个体系是基于廉价pc和开源mysql、以客户端依赖方式、分库分表为主要手段、集中化数据库配置等几个关键要素构建起来, 成为阿里集团接入mysql的标准,提供整个集团上千个应用的数据库访问.

中间件技术及双十一实践·稳定性平台篇

- - 阿里中间件团队博客
稳定性平台——系统稳定运行的保障者. 大多数互联网公司都会根据业务对自身系统做一些拆分,大变小,1变n,系统的复杂度也n倍上升. 当面对几十甚至几百个应用的时候,再熟悉系统的架构师也显得无能为力. 稳定性平台从2011年就开始了依赖治理方面的探索,目前实现了应用级别和接口级别的依赖自动化治理. 在2013的双11稳定性准备中,为共享交易链路的依赖验证和天猫破坏性测试都提供了支持,大幅度减小了依赖治理的成本和时间.

中间件技术及双十一实践·应用服务器篇

- - 阿里中间件团队博客
应用服务器——系统运行的托管员. 阿里巴巴集团有国内最大规模的Java系统,几万台的应用服务器规模也空前庞大,目前主要使用的应用服务器有Tomcat,JBoss和Jetty三种. 阿里巴巴自从2004年开始转向Java技术平台后,先后经历了从WebLogic到Jboss和Tomcat迁移. 到了2008年,随着更为轻量级的Tomcat和Jetty容器的迅速发展,越来越多的应用系统开始尝试使用Tomcat或Jetty作为底层应用服务器.

阿里双十一数据库技术

- - Hello Database
真的很抱歉,我的博客已经很久没有更新了,因为花了太多的时间在微博和微信上,当然最主要的原因还是工作实在太忙了,仅剩的那点业余时间都用来陪娃了. 从2012年开始,工作重心转移到了淘宝和天猫,我的技术方向也发生了改变,2012年和2013年,经历了两次双十一,在这个过程中学到了很多东西. 尤其是2013年的双十一,系统准备的非常充分,技术上有很多创新,团队也得到了成长.

女人们,这些技术男真的被“双十一”逼“疯”了!

- - 博客园_新闻
每到“双十一”都是女人购物狂欢日,你家女人是不是都守到电脑前、手机上抢到手抖. 可是你有没有想过,这里面支撑这么多人疯狂购物的技术系统码农们都是怎么过的. 前些日子遇到了淘宝的一个技术小二庄卓然(南天),听他嘚啵嘚啵他那些被“双十一”逼疯的事,很有感触起来. 他和他的技术小二团队,是马云主动求合照的怪咖;是在辣妹热舞面前,也要忙着秒单的“死技术男”;婚礼当晚不是洞房,是赶回杭州加班“双十一”;在“双十一”让老婆怀上了孩子,还抽烟、喝红牛⋯⋯;因为一个系统错误,差点被逼得跳下 23 楼.

消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ

- - haohtml's blog
RabbitMQ、ActiveMQ和ZeroMQ都是极好的消息中间件,但是我们在项目中该选择哪个更适合呢. 下面我会对这三个消息中间件做一个比较,看了后你们就心中有数了. RabbitMQ是AMQP协议领先的一个实现,它实现了代理(Broker)架构,意味着消息在发送到客户端之前可以在中央节点上排队.

Java 技术栈中间件优雅停机方案设计与实现全景图

- - IT瘾-dev
本系列 Netty 源码解析文章基于   4.1.56.Final版本. 在上篇文章 我为 Netty 贡献源码 | 且看 Netty 如何应对 TCP 连接的正常关闭,异常关闭,半关闭场景中笔者为大家详细介绍了 Netty 在处理连接关闭时的完整过程,并详细介绍了 Netty 如何应对 TCP 连接在关闭时会遇到的各种场景.

mycat 数据库中间件

- - Oracle - 数据库 - ITeye博客
出处:http://blog.csdn.net/nxw_tsp/article/details/56277430. 实习的时候,在一个项目当中,项目经理要求把原先的MySQL数据连接基于mycat来进行改造. 当时就在想MyCat是什么东西. MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里.