作者:王亮 卢声远

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 根本特点

  1. 集成配置核心,同步数据校验
  2. 跨环境同步数据,原子操作,不便局部更新
  3. 代码转换,mybatis mapper 转换das code
  4. 动静策略,依据自定义java代码加载
  5. 数据查问,反对分库查问

DAS-console数据模型

DAS操作的对象次要是DAS的数据模型,那么咱们来看一下DAS的次要数据模型:
外围的模型是applicationlogic databasephysical 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的小伙伴们示意、、、

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相干的研发、运维工作。