作者:王亮 卢声远
DAS是信也科技自研的数据库访问框架。它包括数据库控制台das console,数据库客户端das client和数据库服务端das server三部分。DAS是基于Java语言开发的,支持数据库管理,ORM,SQL创建,分库分表操作的一体化数据库访问解决方案。DAS项目从去年开始已经在GitHub上开源:https://github.com/ppdaicorp/das
作为控制台的das console模块实现了DAS的配置,管理和各种辅助工具的需求。还等什么呢,让我们直奔主题开启das console之旅!
DAS-Console简介
DAS-Console是信业科技自研的数据库访问中间件DAS的web控制台,方便的DAS数据库配置管理和代码生成工具。
DAS-Console 产品定位
通过DAS-Console去控制物理库信息,逻辑库,分库分表策略,MGR等配置。开发业务逻辑时直接撸dao代码,其他一律不用管,进而实现配置和实际的DAO代码开发分离,让开发人员集中精力在业务逻辑上。
DAS-Console 基本特点
- 集成配置中心,同步数据校验
- 跨环境同步数据,原子操作,方便部分更新
- 代码转换,mybatis mapper 转换das code
- 动态策略,根据自定义java代码加载
- 数据查询,支持分库查询
DAS-console数据模型
DAS操作的对象主要是DAS的数据模型,那么我们来看一下DAS的主要数据模型:
核心的模型是application,logic database, physical database,三者为多对多的关系,以及为了方便管理的分组DAS team的概念。 以及其他的全局配置项:data source configuration。
数据模型关系如图所示:
我们把这些数据模型在Apollo上面的存储形式介绍一下:
- application
我们将应用的配置信息(主要是这个应用用到的logic database的id)放在应用各自Apollo里面,用独立的namespace存放,避免与应用其他配置相互影响。
- logic database
它主要是它和physical database的关联关系,以及分库分表的配置信息。 因为它的信息对应用来说是没必要暴露的,所以我们把logic database信息集中在一个Apollo应用下面。我们利用namespace的功能,将同team的logic database组织在一个namespace里。
- physical database
它主要存储物理库的域名,端口,用户名,密码等信息。由于这些信息比较敏感,直接存放Apollo是不安全的。于是我们将存放物理数据库信息的功能放在了一个服务中,下一个章节我们专门来介绍一下这个集成点。
- data source configuration
这块存储数据库连接池的配置信息,譬如连接池大小,过期时间等等。
DAS-Console 代码转换
问题背景
对于一些已经使用了mybatis的项目,已经有了mapper配置文件,如果接入das需要从新配置。
解决方案
针对这个问题,我们设计和开发了mybatis mapper 转换das code的功能,用户可以方便的把mybatis的mapper转换成das的配置。
DAS-Console 动态策略,自定义JAVA代码加载
问题背景
对于区别于一般通的业务场景,用户需要根据实际情况自定义特殊的分库分表策略。
解决方案
可以使用动态策略,通过配置的方式,使用JAVA代码自定义就可以方便的实现各种特殊需要
DAS-Console 数据查询,支持分库分表查询
问题背景
对于接入了das的项目,有的项目使用的分库分表的功能,如果需要进行数据查询的话,分库分表直接查询物理库很不方便 。
解决方案
介绍完das的基本特点,已经接入了das的小伙伴们表示、、、
DAS-Console 适配配置中心
每个系统都需要有自己的配置信息configuration,或者叫元信息metadata。DAS的配置信息主要是物理数据库信息,逻辑数据库和应用等。
在原生开源DAS的实现里面,DAS是利用本地XML文件作为这些信息的存储。但是作为企业的应用,本地文本配置的方式是不适合的。从cloud native的角度来说,配置应该和代码严格分离,这对满足应用部署到多环境来说是很重要的。
拍拍贷内部使用Apollo来做配置中心,这是一款业内比较流行的分布式配置中心,非常契合分布式和微服务的配置管理场景,而且拍拍贷对Apollo的使用和运维也积累了不少经验。因此我们决定利用Apollo作为DAS的配置中心。
从配置的具体操作来讲,无外乎读配置和写配置这两大功能。DAS client需要从Apollo读配置,DAS console作为一个管理portal要去写配置。
DAS client的读Apollo操作
利用了Apollo的client API读取物理数据库信息,逻辑数据库和应用等等。用Apollo的client API来读配置,就必然会引起代码改动,那么DAS是如何优雅地实现Apollo配置的读取呢?答案就是:ClientConfigureLoader
接口的设计。 ClientConfigureLoader
接口中最重要的方法就是DasConfigure load()
。
- 开源
ClientConfigureLoader
的实现:基于的是XML文件的解析。 - 拍拍贷
ClientConfigureLoader
的实现:基于Apollo的client API的实现。
这里具体介绍的是DAS解耦配置实现的做法,DAS利用对ClientConfigureLoader
接口实现了获取配置与使用配置的解耦。 那么DAS是如何加载不同的ClientConfigureLoader
接口实现呢?答案就是利用java的Service Loader SPI的机制。
java的Service Loader SPI的机制本身也是和Spring一样,是一种IOC依赖倒置机制。Service Loader SPI是java jdk标准的服务提供加载的机制,它本身不依赖与其他任何第三方框架,无论应用本身用什么框架都没有关系。ClientConfigureLoader
接口在Service Loader SPI中扮演Service provider interface(SPI)的角色,而基于XML或者基于Apollo读取配置的实现就是service provider。
如果DAS要想集成其他的配置系统,无论是想把配置放到数据库,本地文件或者第三方服务,只要实现ClientConfigureLoader
接口,然后按照Service Loader的规范把实现的类名放到特定文件目录就可以了。
DAS console的Apollo读写操作
需要跨应用写配置,所以是利用了Apollo的HTTP的API来实现。
开源版本里提供了对外接入配置中心的接口,例如信也科技内部开发项目广泛使用阿波罗配置中心,可以实现开源的接口对接,所以为了DAS的开箱即用,我们把das的配置对接配置中心,这样das-client启动的时候就不用额外的配置文件,对于用户来说就是无感的使用das-client的所有功能而无需额外管理,什么逻辑库,物理库信息都无需在本地管理,并且物理库的配置信息接入了安全中心的安全接口,保证了生产环境的用户名和密码安全性。
如图所示,接入配置中心后,方便把das项目相关的配置信息同步到配置中心。
如何安全地信息存储敏感配置信息?
对数据库访问来说,最敏感的是数据库密码的保存。Apollo自带敏感信息的字段功能,不过这个只是从页面控制,不让用户看到密码内容而已。也有应用在自己的逻辑代码中实现对敏感信息的加解密,但是这样的作法从企业来说不够统一,难于管理。
为了加强密码的安全性和规范性,我们和运维部门合作开发了一个存储密码的服务。DAS console在配置DAS的时候,将敏感信息发送给该服务,该服务返回一个token令牌。应用启动的时候,获取token发给改服务,换回敏感数据。
如何支持公司的多环境?
多环境是一份codebase部署到多个环境,多环境本质是多配置。Apollo本身就支持多环境。Apollo不仅支持“环境”,而且支持更细力度“集群”的概念。
既然Apollo支持了多环境,DAS自然也就支持了多环境。
DAS-Console跨环境数据同步
问题背景
在公司内部,一个产品的开发到上线,需要走过FAT,UAT,PRE,PRO这几个运行环境,往往一个项目的各个配置参数有相同和不同的地方。
解决方案
针对这个问题,我们开发了基于原子操作的配置跨环境同步功能,我们只需要在下一个需要发布项目的环境里把上一个环境已经测试通过的配置信息进行同步,而这个同步是原子操作,基于独立的新增操作,这样可以保证对原有项目的新增配置操作,和对新项目的新增配置操作,同步已测试过的配置信息,这样就避免了人工配置重复操作可能会出现的偏差。
最后
从DAS在拍拍贷的落地集成的过程,DAS Console是我们定制化工作比较多的模块。适配Apollo配置中心,跨环境同步,代码转换,动态策略配置,以及数据库查询等功能落地过程中加入的功能。DAS Console本身作为一个web应用做定制化是比较复杂的,所以我们在做这一版console设计的时候,尽可能考虑得周全一些,降低用户定制的成本。另外,我们也认真吸取携程版本console的一些用户使用经验,将常用的,有价值的功能继续保留下来。
经过企业落地的实践,DAS从中得到更多反馈。实战的反馈推动DAS自身的演进,将更多更合理的设计加入开源产品。
如果你想要了解更多DAS产品的信息,请查看拍码场技术公众号的DAS系列文章。
作者介绍
Wangliang,信也科技框架中间件研发专家。目前主要从事DAS相关的研发,以及各种前端技术的工作。
Shengyuan, 信也科技布道师、框架中间件资深专家。目前主要从事DAS相关的研发、运维工作。