Skip to content

DasClient 整体设计

Shengyuan 卢声远 edited this page Jan 20, 2021 · 3 revisions

简介

总体介绍DasClient的各个组成部分的职责和之间的关系。DAS组件主要分为核心和集成两种。

核心组件

DAS的核心组件指的是DAS的通用项目。核心组件包括所有的核心逻辑,是用户使用DAS的接口。核心组件可以和集成组件配合使用来在特定公司,特定环境实现DAS的功能。在未来,核心组件将开源出去。核心组件包括:

  • das-core。das数据库访问逻辑的核心代码。
  • das-client。用户面使用DAS需要的接口。
  • das-server。以代理方式实现数据库操作的服务器。

集成组件

DAS的集成组件主要是指DAS在信也科技落地需要提供的集成逻辑。包括如何读取当前app id,如何获取逻辑数据库配置,物理数据库配置,如何写log等等。包括:

  • ppdai-das-client。为das-client在信也科技环境获取相关配置
  • ppdai-das-server。为das-server在信也科技环境获取相关配置 总体关系如下:

components

引入proxy的主要目的是借助proxy在架构上的便利,在提供和基于CS结构的DAS相同数据库功能的前提下,提供更多的管理功能。例如限流,权限管理,异构数据库之间的同步,等等。

组件说明

das-client包含了基于直连模式的全部数据库访问功能的核心代码。同时das-client作为执行内核支持das-server。

Proxy实现的主要思路是提供一个das-sever。让原本通过das-client在本地完成的用户的请求经由das-client发送到das-sever完成。

das-client

核心功能

das-client包括所有数据库操作的核心CRUD功能的实现,分库分表支持,数据汇总,数据库状态监控,执行数据库操作的引擎,等等

RPC接口定义

das-client定义了das-client和das-server之间RPC调用的接口

配置获取

das-core同时定义了多种接口供用户扩展:

客户端配置

ClientConfigureLoader接口定义了如何获取客户端配置,包括:

  • 获得appid
  • 获取逻辑数据库配置
  • 是否为远程访问模式

服务端配置

ServerConfigureLoader接口定义了如何获取服务端配置,包括:

  • 获得appid list
  • 获取逻辑数据库配置

面向终端用户的API

定义面向DAS用户的API,包括DasClient,各种SqlBuilder,基于proxy的和直连的DasDelegate和其他一些辅助类.

das-client对外暴露的接口是DasClient和相关辅助类。对内会将用户请求转发给DasDelegate。本地实现会调用ClientDasDelegate,基于proxy的实现会调用DasRemoteDelegate。

由DasDelegateFactory根据ClientConfigureLoader里面的boolean isProxyEnabled()方法来确定具体调用那个。

当用户调用DasClient的API时,如果是远程模式,das-client会将用户请求包装为请求,并调用远程服务;远程服务获得请求后,将其解包,并调用相应接口实现。如果是直连模式,则直接调用数据库。

无论是本地还是基于proxy的远程模式,要完成的操作都是相同的。

调用模式

由于事务需要保证操作执行在同一个数据库连接上,因此针对事务会有特殊处理,das-server会创建一个当前事务的缓存,将从das-client发来的属于同一个事务的操作放在同一个数据库连接上执行。具体做法参见下面事务说明一节。

das-server

在proxy端提供具体服务。在接收到das-client发来的请求后,会调用基于本地的ClientDasDelegate来完成功能。

引入proxy的主要目的是借助proxy在架构上的便利,在提供和基于CS结构的DAS相同数据库功能的前提下,提供更多的管理功能。例如限流,权限管理,异构数据库之间的同步。

通讯

client端与proxy端之间RPC采用基于Apache Thrift技术传输信息。 传输通讯das-client输入参数,返回结果,以及内部的数据结构。例如,HintsSQLBuilder等。 如果proxy存在多个实例,client端会在自动选择一个可用的实例进行交互。如果是事务操作,client端将该事务中所有操作都始终指向同一台proxy实例,直至commit或者rollback。

用户API

对于用户,无论直连模式,还是proxy模式,das client都提供统一的API使用方式

proxy管理

proxy管理界面集成于das-console,用户可以使用das-console配置和管理proxy。