`

DDAL技术方案选型

 
阅读更多

转:http://ywbrj042.iteye.com/blog/1923890

解决的问题

目前已经面临或者未来可能面临的问题有以下这些:

1.数据量越来越大,超出了单表或者单库的最大限制。

2.数据访问压力越来越大,超出了数据库系统能力。访问压力可能出现读压力过大或者写压力过大。

3.数据访问层运维问题。

4.数据访问层高可用方案。

5.数据访问层访问控制和管理。

暂时不解决的问题包括:

对非关系型数据存储的统一访问。

自主开发还是扩展?

为了解决上述问题,有很多可选的方案。自主开发和使用现有开源方案扩展的讨论是经常会面临的,详细讨论过程就不再赘述,直接列出讨论的结果。

结论:基于目前开源方案进行扩展和定制实现。具体原因有以下这些:

a.我们的使用场景很简单,大多数开源解决方案都可以很好地实现,而且目前有很多可选的开源方案,直接使用开源方案可行。

b.完全自主开发的周期更长、技术风险都非常大,这都是咱们无法承担的。

c.选择一个源代码开放、需求最符合、代码能够扩展和定制的开源产品可行。基于该开源产品,通过

不断深入学习使用方法,学习实现原理和源代码实现,达到可以自由扩展和定制,以改造成完全符合

自身需求的产品。

技术方案选型

可选方案分类概述

对于ddal来说,最核心的一个需求莫过于分库分表,而对于分库分表,已经有很多的开源产品出现了,比如cobar-client、hibernate shards、guzz、halo-dal、ibatis-sharding、cobar、mysql proxy、tddl等。每一个产品都有针对于不同层面进行封装而达到屏蔽上层对底层分库分表的具体细节的依赖,都是加载数据库访问客户端和服务端之间的一些中间层。

总结一下上述列出的各种解决方案可以归纳为一下几大类。

1.DAO层。该方案即通过在实现DAO层代码时候,通过硬编码的方式加入分库分表的逻辑,该层实现一般由项目组自行根据需求实现。

2.ORM 框架层。该方案的实现是通过实现一个ORM框架,该框架自带分库分表功能,如:guzz;另外一种方式是基于开源成熟的ORM框架(比如MyBaits、HIbernate)进行扩展分库分表特性,主要的开源产品有:cobar-client、hibernate shard、shalo-dal、ibatis-sharding。

3.JDBC API层。该方案通过封装JDBC API,实现分库分表逻辑,这个方法比较直接,而且有比较强的可控制性,目前有淘宝开源的tddl,但是目前不支持分库分表,只支持读写分离、主备自动切换,故障转移等特性。

4.数据访问代理层。该方案通过位于客户端和服务端中间的代理服务器实现分库分表逻辑,主要产品有mysql proxy、Cobar和amoeba等。

5.数据库分区。该方案是数据库自行实行的分库分表特性。目前主流的关系型数据库,商业数据库Oralce、SQL server和DB2早就有非常成熟的数据库分区解决方案,而主流的开源数据库MySQL和PostGre也在5.0和8.0版本也增加了数据库表分区的特性。



 

如上图所示,展示的是各种方案之间的关系,还包括了各种方案所处的层次,图中带颜色的各区块表示的是各种实现方案。

上图中的关系是越处于下方的层次越低,上层的总是依赖下层,下层不依赖上层。各种层次的实现方案都有自己的优缺点,有自己适合的场景。

可选方案对比分析

各种可选方案都能够从不能程度上实现分库分表的核心需求,每种方案都有自己的优势和适合的应用场景,同时也有它的缺点和使用上的限制,通过对各种方案的详细各种因素的综合对比分析才能选择一个最适合一种或者多种方案的组合。

产品分类 产品名称 优点 缺点 支持的特性 限制和约束 产品成熟度 开源协议 开发语言 产品主页
DAO层  无开源产品,需参考
开放方案自行实现,在DAO
层代码中实现分库分表的逻辑。
实现简单 
依赖少 
自由度大
成本高 
周期长
分库分表等 
可自行实现任何特性
自身技术能力约束      
ORM框架层 cobar-client  简单易用,无需引入代理服务层 
与ibatis框架良好集成 
与数据库无关,支持各种数据库 

对于使用的mybatis框架及版本号都 有较强的约束,而且对于使用的Spring框架也有版本约束,对于应用的侵入性较大,需要修改应用才能使用。 
  1. 可以支持垂直和水平数据切分数据库集群的访问;支持双机热备的HA解决方案,
  2. 小数据量的数据集计(Aggregation), 暂时只支持简单的数据合并.
  3. 数据库本地事务的支持, 目前采用Best Efforts 1PC模式的事务管理.
  4. 数据访问操作相关SQL的记录, 分析等
对于mybatis和Spring等框架的版本号有约束 成熟   java http://code.alibabatech.com/docs/cobarclient/zh/
JDBC API层 tddl 支持的特性较丰富。 
遵守JDBC规范,对于应用过的侵入性较小,能够很方便的应用在现有的应用中。 
支持的数据丰富,支持MySQL和Oracle,可以方便的扩展支持其它数据库。 

开源版本目前不支持分库分表, 
强依赖diamond配置中心项目, 
1.数据库主备和动态切换 
2.带权重的读写分离  
3.单线程读重试  
4.集中式数据源信息管理和动态变更  
5.剥离的稳定jboss数据源 
6.支持mysql和oracle数据库 
7.基于jdbc规范,很容易扩展支持实现jdbc规范的数据源 
8.无server,client-jar形式存在,应用直连数据库 
9.读写次数,并发度流控,动态变更 
10.可分析的日志打印,日志流控,动态变更
开源版本暂不支持分库分表 

成熟   java https://github.com/alibaba/tb_tddl
数据访问代理层 corbar     可以支持垂直和水平数据切分数据库集群的访问;
支持双机热备的HA解决方案
不支持跨库情况下的join、分页、排序、子查询操作。 
SET语句执行会被忽略,事务和字符集设置除外。 
分库情况下,insert语句必须包含拆分字段列名。 
分库情况下,update语句不能更新拆分字段的值。 
不支持SAVEPOINT操作。 
暂时只支持MySQL数据节点。 
使用JDBC时,不支持rewriteBatchedStatements=true参数设置(默认为false)。 
使用JDBC时,不支持useServerPrepStmts=true参数设置(默认为false)。 
使用JDBC时,BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法设置参数。 

暂时只支持MySQL数据库。
成熟   java http://code.alibabatech.com/wiki/display/cobar/Home

最终方案

最终结论:

通过对比分析后最终的结论如下:
基于开源的tddl+cobar集成,再通过适当的扩展和定制最终实现符合自身需求的分布式数据访问层服务。

原因如下:

1.tddl和cobar都是遵循标准协议的实现方式。使用这些方案后应用的改动都比较小,通用性较强,基本上所有的项目都能够很方便的应用这种方案。

2.tddl实现了主备切换、读写分离、动态数据源、数据访问层运维支持、访问控制等特性,而cobar垂直和水平切分、高可用等特性。两种方案的集成使用

能够解决目前数据访问层的大部分问题,功能强大。

3.都是使用Java语言编写的开源项目。能够通过不断深入学习其源代码,将其改造成完全符合自身需求的ddal。

4.都是非常成熟的产品。这两个产品都是阿里集团下的公司开源出来的产品,经过了大量的生产环境验证,质量和稳定性有保障。

Tddl(Taobao Distribute Data Layer)是整个淘宝数据库体系里面具有非常重要的一个中间件产品,在公司内部具有广泛的使用。

Cobar是关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。

  • 产品在阿里巴巴B2B公司已经稳定运行了3年以上。
  • 目前已经接管了3000+个MySQL数据库的schema,为应用提供数据服务。
  • 据最近统计cobar集群目前平均每天处理近50亿次的SQL执行请求。



 

产品的约束如何解决?
对于任何DDAL产品都有自身的一些约束和局限性,无法完全与直接访问数据库那样自由和特性强大,对于DDAL产品无法支持的特性,那么该如何解决呢?
1.适当放弃某些特性。例如分布式事务,在某些数据上可以放弃该需求。
2.增加替代方案或者补偿机制。通过增加一些替代的解决方案来解决特性的缺失,如应用自行实现某些特性等,或者通过一些补偿机制来弥补某些特性的缺失。

实施计划

最终该方案想最终应用到项目中,需要经过一个过程,具体的实施计划如下。

1.测试cobar和tddl的功能特性和性能指标。

测试这两个开源产品的功能特性是否满足要求,质量是否可靠;

引入这些产品后必然对性能产生一定影响,通过性能测试掌握其性能损耗量是否可接受。

2.在项目中小范围应用。在某些数据量大的项目中尝试使用该方案。

3.项目试运行。观察使用本方案的项目的运行效果,对于发现的问题及时解决。

4.持续研究增加新特性。通过持续研究这两个开源产品的原理及实现代码,扩展或者调整为完全符合自身需求的ddal产品。

分享到:
评论

相关推荐

    ddal-sqlparser-3.2.4-SNAPSHOT.jar

    ddal-sqlparser-3.2.4-SNAPSHOT.jar

    DDAL(Distributed Data Access Layer)是一种简单的数据库分片访问解决方案。- hellojavaer / ddal

    DDAL DDAL(Distributed Data Access Layer) is a simple solution to access database shard. License DDAL is dual licensed under LGPL V2.1 and Apache Software License, Version 2.0. Quick start add the ...

    基于matlab实现V2G系统simulink仿真图以及电动汽车充电和放电图.rar

    基于matlab实现V2G系统simulink仿真图以及电动汽车充电和放电图.rar

    共创在线考试系统(JSP+SERVLET)130223.rar

    共创在线考试系统(JSP+SERVLET)130223.rar,这是一个针对计算机专业学生的JSP源码资料包,旨在帮助学生更好地理解和掌握Java Web开发技术。该资料包包含了一个基于JSP和Servlet技术的在线考试系统,具有以下特点:功能齐全:该系统包括了在线考试、成绩查询、试题管理、用户管理等多个模块,能够满足学生进行在线考试的需求。界面友好:系统采用了简洁明了的界面设计,使得用户能够快速上手,方便地进行操作。代码规范:源码遵循Java编程规范,结构清晰,注释详细,便于学生学习和理解。可扩展性强:系统采用了模块化的设计思路,可以根据需要进行功能的扩展和修改。数据库支持:系统使用了MySQL数据库进行数据存储,可以方便地进行数据的增删改查操作。通过学习这个JSP源码资料包,学生可以掌握JSP和Servlet的基本用法,了解Java Web开发的基本流程,提高自己的编程能力。同时,该系统还可以作为学生课程设计或者毕业设计的参考项目,帮助他们完成学业任务。总之,这个共创在线考试系统(JSP+SERVLET)130223.rar资料包对于计算机专业的学生来说,是一个非常有价值的学习资

    医药集团能源集团汽车集团大型集团战略规划顶层战略设计方案PPT(4份)

    医药集团能源集团汽车集团大型集团战略规划顶层战略设计方案PPT(4份)

    基于matlab实现非常齐全的wsn定位matlaB仿真程序.rar

    基于matlab实现非常齐全的wsn定位matlaB仿真程序.rar

    matlab GPS与捷联惯导的组合导航程序,可以运行.rar

    matlab GPS与捷联惯导的组合导航程序,可以运行.rar

    3D模型009,可用于建模、GIS、BIM、CIM学习

    3D模型009,可用于建模、GIS、BIM、CIM学习

    大一C++作业,功能完善的学生成绩管理系统 支持信息的增删改补,虚拟信息生成,排序,硬盘数据的写入与读取.zip

    大一C++作业,功能完善的学生成绩管理系统 支持信息的增删改补,虚拟信息生成,排序,硬盘数据的写入与读取.zip

    毕业设计:基于SSM的mysql-软件缺陷管理系统(源码 + 数据库 + 说明文档)

    毕业设计:基于SSM的mysql_软件缺陷管理系统(源码 + 数据库 + 说明文档) 第2章 可行性分析 3 2.1技术的可行性 3 2.2经济的可行性 3 2.3操作可行性 4 2.4法律的可行性 4 第3章 需求分析 5 3.1开发工具需求 5 3.1.1开发语言和工具 5 3.1.2基于B/S结构开发 5 3.1.3 JAVA语言简介 5 3.1.4 JavaScript技术 6 3.1.5 MySQL数据库 6 3.1.7软硬件需求 6 3.2 系统需求 6 第4章 总体设计 8 4.1 系统模块总体设计 8 4.2 数据库设计 10 4.2.1 数据分析 10 4.2.2 数据库的详细设计 10 4.3 本章小结 12 第5章 详细设计与实现 13 5.1 管理员管理 13 5.1.1 管理员登录管理 13 5.1.2 欢迎页 13 5.1.3 项目经理管理 14 5.1.4 员工管理 15 5.1.5 用户登录日志管理 15 5.1.6 个人信息管理 16 5.2 项目经理管理 17 5.2.1 项目经理登录 17 5.2.2 项目管理 18 5.3 调试员端 1

    大型集团企业财务共享业财一体化应用平台建设方案.pptx

    大型集团企业财务共享业财一体化应用平台建设方案.pptx

    银行智能化数据安全分类分级实践方案.pdf

    银行智能化数据安全分类分级实践方案.pdf

    node-v6.10.1.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    知乎小程序算法.zip

    知乎小程序算法.zip

    基于嵌入式AI的人脸识别课堂签到系统.zip

    优秀源码设计,详情请查看资源源码内容

    基于matlab实现文档+程序边缘计算任务卸载与资源调度的算法,是论文的源代码,具有价值.rar

    基于matlab实现文档+程序边缘计算任务卸载与资源调度的算法,是论文的源代码,具有价值.rar

    毕业设计:基于SSM的mysql-软件学院互助答疑平台(源码 + 数据库 + 说明文档)

    毕业设计:基于SSM的mysql_软件学院互助答疑平台(源码 + 数据库 + 说明文档) 2 开发技术简介 13 2.1 基于B/S结构开发 13 2.2 JSP简介 13 2.3 MySQL数据库 13 2.4 JDBC 13 2.5 SSM框架 14 3 需求分析 14 3.1 需求分析 14 3.2 可行性分析 15 3.2.1 经济可行性 15 3.2.2 技术可行性 15 3.2.3 操作可行性 16 3.3 非功能需求分析 16 4 系统设计 17 4.1 数据库表设计 17 4.2 功能设计 18 5 系统详细设计 18 5.1 用户登录 18 5.2 问题发布 19 5.3 回答提问 20 5.4 用户资料 20 5.5 热门回答 21 5.6 最新回答 21 6 系统测试 22 6.1 调试目的 22 6.2 调试的主要内容 23 6.3 调试案例 23 6.4 测试方法 23 6.5 测试的重要性 24 6.6 不登陆测试 25 6.7 性能测试 25

    基于JSP技术的猎头公司管理软件的设计和实现-内部事务部分(源代码+论文).rar

    这个资料包名为"基于JSP技术的猎头公司管理软件的设计和实现——内部事务部分(源代码+论文).rar",是一个针对计算机专业学习者或开发者提供的实用资源。它涵盖了一个以Java Server Pages (JSP)技术为基础开发的猎头公司管理软件项目,专注于公司的内部事务处理。该软件旨在简化猎头公司的工作流程,提高工作效率,并使得管理工作更加系统化和自动化。资料包中包含了完整的源代码,这意味着用户可以直接查看、修改和部署这些代码来适应自己的需求。源代码的开放性为用户提供了学习和自定义的巨大空间,可以深入理解JSP技术在实际项目中的应用,以及如何结合数据库、前端页面设计和后端逻辑控制来构建一个完整的Web应用程序。除了源代码之外,资料包还附带了一篇论文,这篇论文详细阐述了软件的设计理念、系统架构、功能模块划分、关键技术点以及实现过程等。对于学生或研究者来说,这篇论文不仅提供了技术上的指导,还展示了如何将理论知识转化为实践操作的过程,具有一定的学术价值和参考意义。整体而言,这个资料包是计算机专业学生、软件开发者或对JSP技术感兴趣的人士宝贵的学习资源。无论是作为教学案例、课程项目,还是实际

    node-v7.10.1-linux-s390x.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    图3-7.zip

    图3-7.zip

Global site tag (gtag.js) - Google Analytics