为什么需要数据库中间件传统的架构模型是应用连接数据库,直接访问数据。这种架构的特点是简单方便。但是随着当前数据量的不断增加,我们遇到了问题:单表数据量过大,单库数据量过大,服务器压力大,读写困难速度遇到瓶颈。面对以上问题,我们第一个想到的解决方案就是scaleup,简单来说就是不断提升硬件性能。这种方法只能暂时解决问题,当业务量继续增长时,仍然不能解决问题。尤其是淘宝、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代理用C语言重写了lua。原版支持分表,分库分表版本已经发布。经常在网上看到一些朋友说高并发下会经常挂掉。如果你想使用它,你需要提前做一个测试。淘宝TDDL淘宝根据自身业务特点开发了TDDL(淘宝分布式数据层框架),主要解决分库分表应用的透明化和异构数据库之间的数据复制。是基于集中配置实现的jdbc数据源,具有主备、读写分离、动态数据库配置等功能。TDDL(tddl通用数据访问层,部署在客户端的jar包,用于routeuserSQLtothespecifieddatabase):淘宝数据很早就做了分库处理。上层系统连接多个数据库,中间有一个叫做DBRoute的路由统一访问数据。DBRoute进行多库操作和数据整合,使上层系统像一库操作多库一样操作。下图是一个简单的分库分表数据查询策略:主要优点:1.数据库主备和动态切换2.加权读写分离3.单线程读重试4.集中数据源信息管理和动态变化5.剥离稳定的jboss数据源6.支持mysql和oracle数据库7.基于jdbc规范,方便扩展支持jdbc规范的数据源8.无服务器,client-jar形式存在,应用直连数据库9.读写数,并发过程控制,动态变化10.可分析日志打印,日志流控,动态变化
