-
接口规范化定义
在系统上定义API的输入输出,生成API文档,屏蔽了中间的存储,数据的流转通过API来进行 -
数据网关
作为网关服务,数据服务必须要具备认证、权限、限流、监控四大功能,这是数据和接口复用的前提
首先是认证,需要支持开发和生产两种模式,开发模式比较便于使用通过appcode直接认证,生产通过 accesskey 和 secretkey,应用每次调用 API 接口,都必须携带 acesskey 和 secretkey
其次是限流,授权的时候会为每个应用进行限流,限流的方式有很多种,比如(qps达到多少。今日访问量到达上限,总访问量使用完,5分钟内qps达到多少)。超过设定的值就会发生限流甚至是熔断操作,直接拒接链接
还要提供接口相关的监控,比如接口的 90% 的请求响应时间、接口调用次数、失败次数等相关的监控,另外,对于长时间没有调用的 API ,应该予以下线。这样做的好处是防止没用的接口额外占用资源。
-
全链路打通
需要记录数据到API的流转 以及API到应用的流转过程。可以全面掌控到数据具体使用到了哪里 -
多种数据交互方式
支持pull 和 push 的方式,将数据导入到kafka -
合理利用各引擎优势
将数据存储在适合自己的存储计算引擎上 比如小数据量的放mysql,kv放redis,支持跨数据源join,实现数据的复用。节省资源 -
构建 API 集市,实现接口复用
一个接口可以为多个应用提供使用,而不是每个人都去开发一个一样的接口
3. 项目结构项目结构
daas-ui
dass-common
daas-admin (提供 UI 相应的后端管理功能)
daas-server (提供与数据源交互的查询服务)
daas-gateway (dass-server 的网关)
daas-gateway-auth (athentication, authorization)
daas-gateway-rate-limiter (限流)
daas-gateway-monitor (收集 access log 分析到 api, 应用的的调用)
daas-admin
功能描述
对于开发人员可以导入数据源,进行API的生成,发布,测试,上线等步骤,使用人员可以通过申请,获得授权,拿到appcode 与 appkey 来使用API
功能点
- 多数据源管理,支持 mysql redis 等(1期支持mysql)
- 支持向导模式,模板模式来生成API(1期支持向导模式)
- 向导模式支持跨数据源JOIN
- 生成API文档
- 支持 草稿 发布 测试 上线 下线多种状态的API
- 支持API集市的展示
- API的测试,测试不通过不能闪现
- 运维人员管理界面,API的授权,展示
- 权限的申请
功能描述
对于数据源的监控,对于QPS的监控。log日志的监控。防作弊用户,支持拉黑,主动限流
功能点
- 支持对不同数据源的监控告警
- 对API接口QPS的监控告警
- 对于响应时间,失败率成功率,以及API使用情况等等的告警
- 主动限流
API服务提供者,对于访问的请求,首先从元数据DB获取到详情,然后解析逻辑计划为物理计划,分发执行服务。最后进行聚合 返回结果,每个service基本相同,通过配置文件区分访问那些数据库。
功能描述
服务提供者
功能点
- 解析逻辑计划
- 执行物理计划到不同的引擎
- 对于不同数据源的数据聚合
gateway 基于 ambassador envoy 来实现,ambassador 通过 CRD 安装到 kubernetes 后,可以简单配置 mapping 转发来将服务请求转发到 daas-server,所有的 daas-server 使用 kubernetes 自带 service 来向 gateway 提供服务,且由 service 实现简单的负载均衡。
此外,我们将认证权限(auth),限流(rate limiter)服务,监控(monitor)这些 cross-cut 的服务配置到 ambassador 上,从而使用 daas-server 存只需要关心主要业务逻辑和实现水平的无状态扩容。
daas-gateway-auth
3.数据库表
datasources
- id
- ds_name
- ds_connection_json
- ds_type (mysql, redis, hbase)
- ds_state
- ds_desc
api_basic
- id
- api_name
- api_tags
- api_method_type (GET, POST)
- api_desc
- api_state (待测试,测试失败,测试通过,已发布)
api_conf
- id
- api_id
- ds_id
- ds_catalog (数据库)
- ds_schema (表名)
- parameters {[{‘name’: ‘’, ‘type’: ‘’, ‘opt’: ‘’, ‘desc’: ‘’} ]}
- returns {[{‘name’: ‘’, ‘type’: ‘’, ‘sample’: ‘’, ‘desc’: ‘’}]}
- join
apps
- id
- app_name
- app_desc
- owners
- app_status
- owner_ids
app_users
- id
- app_id
- user_id
- user_name
app_api_auth
- id
- app_id
- api_id
- app_key
- app_secret
- limit
API
- like
- 分页
- range



