乐趣区

DAS之DAS-Console应用实践

作者:王亮 卢声远

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

退出移动版