构建分库分表中间件Zdal

来源:互联网 发布:mysql获取当前日期 编辑:程序博客网 时间:2024/06/05 21:10

转载 : http://yuanwhy.com/2017/03/01/build-zdal/

之前有一篇文章简单介绍过支付宝开源的分库分表中间件Zdal,这个开源产品在阿里系中好像是最低调的一个,很少有公开场合讲到过,同时也是做的最不完善的一个开源项目,文档也很少维护,在Github的地址是https://github.com/zhanglei/zdal ,在README中有一段很简单却很有力的介绍

Zdal是支付宝自主研发的数据中间件产品,采用标准的JDBC规范,可以在分布式环境下看上去像传统数据库一样提供海量数据服务,是一种通用的分库分表数据库访问框架,解决单库单表数据库访问压力,Zdal主要提供分库分表,结果集合并,sql解析,数据库failover动态切换等功能,提供互联网金融行业的数据访问层统一解决方案,目前已经在支付宝的交易,支付,会员,金融等大部分关键应用上使用,并且在2013年双11大促中运行稳定。

Zdal在2013年双11中表现出彩,但是到了2016年的双11,已经被新一代的分布式数据库OceanBase所替代,以下是支付宝官方的说法:

OceanBase

然而OceanBase并不开源,目前开源的重量级的分布式数据库TiDB( https://github.com/pingcap/tidb )倒是可以与之抗衡,但是对于目前大部分互联网应用来说,很多还是基于MySQL开发,为了解决数据存储和扩展的问题,分库分表中间件的解决方案还是占据大多数(也许再过三四年TiDB会成为主流,替代掉MySQL,而OceanBase也会商业化,替代掉Oracle)。

Zdal本身解决了分库分表的需求,实现方式就如引用中介绍的,采用标准的JDBC规范,但是开源的代码在由于文档缺失和代码开源的不干净情况下,导致使用过程中会遇到很多问题,以下是笔者在构建Zdal过程中的一些经验总结。

编译依赖

用命令git clone把Zdal的代码下载下来之后,通过IntelliJ IDEA等Java IDE工具导入maven项目,会发现项目根本无法编译通过,看报错的地方会发现有以下问题:

  • JDK只能依赖JDK6
  • 有com.alipay.test.ats这种未开源的内部依赖
  • 依赖的某些jar包在maven中央仓库也已经被废弃

由于Zdal实现的JDBC的版本是JDK6的,比如JDK7之后DataSource接口的实现类必须实现getParentLogger方法,所以项目的JDK版本可以先设置为JDK6,这些新的方法也就暂时不用去实现。对于ats这种内部的依赖,我们是无法从中央仓库获取的,所以唯一的解决方案就是直接删除这些依赖,所幸的是这些ats的依赖都在zdal-test下,删除zdal-test下的一些ats依赖代码并不影响Zdal核心功能。zdal-test的pom中有个关于javax.servlet也可以删除,中间件本质不是web服务,没有用到servlet的地方,而且3.0.0.v201103241009这个版本已经无法下载。

项目中还有对Oracle驱动的引用,Oracle驱动不是开源项目,在maven的中央仓库中无法下载,解决办法就是在官网下载原生jar包用mvn命令安装在本地仓库或者上传到私服中,本地安装命令如下

1
mvn install:install-file -Dfile=zdal-datasource/lib/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3.0 -Dpackaging=jar -DgeneratePom=true

之后通过执行maven命令来在本地构建zdal的jar包,同时注意mvn命令运行时的JDK版本

1
mvn clean install -DskipTests

自动化构建

笔者把原始的Zdal fork到自己的仓库里,希望能做到每次提交新代码的时候自动地执行mvn命令进行编译打包来检验代码的正确性,这里就需要借助开源项目常用的CI工具travis-ci.org。

使用travis-ci自动化构建项目主要分为两步:

  • 授权travis-ci访问项目
  • 在项目中添加自动构建的脚本.travis.yml

具体细节可以参考https://docs.travis-ci.com/user/for-beginners ,这里关键是自动构建的脚本,由于ojdbc在travis-ci的自动构建服务器中并不存在,所以在执行自动构建之前要先确保ojdbc安装在构建服务器上,于是在yuanwhy/zdal 中有auto-add-jar.sh脚本,.travis.yml的脚本示例如下:

1
2
3
4
5
6
7
8
9
language: java
jdk:
- openjdk6
before_install:
- sh auto-add-jar.sh
script: mvn clean install -DskipTests
branches:
only:
- master

完善文档

原始的Zdal开源项目中表面看没有文档,其实是作者上传后又删除了:),从git提交历史中完全能下载到被删除的文档(https://github.com/zhanglei/zdal/commit/bb5c19cac138a106787f8929930e244ee5a1bd9e ),神奇的git !

将这些文档打包在zdal-doc模块中,并初步编写简单的README。
README

后续

https://github.com/yuanwhy/zdal 下载后可以获得直接编译通过的版本,后续会根据自己的实际体验慢慢修改掉那些我认为设计的不好的地方。


原创粉丝点击