什么需要数据库中间件
传统的架构模式就是应用连接数据库直接对数据进行访问,这种架构特点就是简单方便。
但是随着目前数据量不断的增大我们就遇到了问题:
- 单个表数据量太大
- 单个库数据量太大
- 单台数据量服务器压力很大
- 读写速度遇到瓶颈
当面临以上问题时,我们会想到的第一种解决方式就是 向上扩展(scale up) 简单来说就是不断增加硬件性能。这种方式只能暂时解决问题,当业务量不断增长时还是解决不了问题。特别是淘宝,facebook,youtube这种业务成线性,甚至指数级上升的情况。
此时我们不得不依赖于第二种方式: 水平扩展 ,除了增加应用服务器外,还会涉及到数据库的垂直以及分库分表,数据库读写分离等,这个时候就需要用到数据库中间件。
数据库中间件的功能
1.通用的数据库中间件会支持多种数据库的协议。
连接数据库中间件用的是标准的数据库协议如jdbc,而数据库中间件在与各种数据库通讯时用的是各数据库的协议。这样在应用程序中就可以透明化的使用数据库,减少开发成本,与适配数据库所带来开发成本,如图:
2.读写分离:读、写分离的原理是将事务型操作(增、删、改)与非事务弄操作(读)分发到不同数据库实例上去执行。数据库实例之间要进行数据的主、从同步,往往写数据库实例为主数据库;读数据库实例为从数据库。如下图所示:
上面的图可以看出,黄线代表写请求,绿线代表读请求,蓝色数据同步,这就是一个简单的读写分离。
3. 分库分表:分库、分表是为了将不同的业务数据存储于不同数据库实例上,从而达到减少数据库实例表的基础数据量和业务的分布式处理。
上面这幅图就可以看出数据库中间件作用,比如下面的这个SQL:
selectfromtable_namewhereid=1
按照中间件分库分表算法,此SQL将发送到DB1节点,由DB1这个MySQL负责解析和获取id=1的数据,并通过中间件返回给客户端。
MySQL主流中间件:Atlas,cobar,TDDL等
目前市面上中间件种类很多种 :
Cobar:
阿里巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。 在阿里经受住了考验,后面由于作者的走开的原因cobar没有人维护 了,阿里也开发了tddl替代cobar。
MyCAT:
社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活 跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比 较高,也会一直维护下去,
Atlas:
360团队基于mysql proxy 把lua用C改写。原有版本是支持分表, 目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并 发下会经常挂掉,如果大家要使用需要提前做好测试。
淘宝TDDL
淘宝根据自己的业务特点开发了TDDL(Taobao Distributed Data Layer 框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,具有主备,读写分离,动态数据库配置等功能。
TDDL所处的位置(tddl通用数据访问层,部署在客户端的jar包,用于将用户的SQL路由到指定的数据库中):
淘宝很早就对数据进行过分库的处理, 上层系统连接多个数据库,中间有一个叫做DBRoute的路由来对数据进行统一访问。DBRoute对数据进行多库的操作、数据的整合,让上层系统像操作一个数据库一样操作多个库。
下图展示了一个简单的分库分表数据查询策略:
主要优点:
1.数据库主备和动态切换
2.带权重的读写分离
3.单线程读重试
4.集中式数据源信息管理和动态变更
5.剥离的稳定jboss数据源
6.支持mysql和oracle数据库
7.基于jdbc规范,很容易扩展支持实现jdbc规范的数据源
8.无server,client-jar形式存在,应用直连数据库
9.读写次数,并发度流程控制,动态变更
10.可分析的日志打印,日志流控,动态变更
转载请注明:IT运维空间 » 运维技术 » 阿里P8架构师谈:数据库中间件的功能、适用场景、淘宝TDDL详解
发表评论