前言
云数据库以及Serverless数据库的出现,对传统IT行业产生了巨大影响。用户可以在云中快速启动并运行数据库,而无需关心任何基础设施。随着Serverless以及FaaS的不断成熟,云数据库的发展方向也相应的发生了变化,降本增效越来越受到重视。同时在外界环境的快速变化下,应用程序的快速开发、快速迭代、高扩展性也成为了主要的需求。
阿里云 RDS Serverless Data API 正是在这种背景下诞生的。RDS Serverless Data API 提供了数据库操作接口,用户可以通过HTTPS请求或SDK的方式和数据库进行交互。通过该服务可以降低开发者使用数据库的门槛,同时也减少了开发者管理应用服务器的成本,最终实现化繁为简,降本增效的目标。
传统模式 vs DataAPI模式操作数据库代码量对比:传统模式(鉴权、缓存、连接池等能力还需额外编码)
DataAPI(内置鉴权、缓存、连接池、格式化结果集等各种能力)
什么是Data API ?
Data API 提供了一种安全的、快速扩展的、具有标准化查询和响应格式的API,将应用程序直接与云数据库连接。
Data API 代表了下一代应用程序构建的方式。借助于 Data API,应用程序可以打破与数据库的紧密耦合,并具备易用性、数据安全性、可扩展性、可移植性等特性。
Data API 为数据提供了一个无状态的服务层,这样做不仅可以协调存储和查询,而且还能让应用具备负载均衡的能力,并且让水平扩展变得极其容易。
阿里云 RDS Serverless Data API 无需配置,开箱即用。它可以提供无限的吞吐量并保持始终可用,保障您的应用程序可以在不可预测的负载下平稳运行。
化繁为简 降本增效
RDS Serverless Data Service 的核心目的是帮助用户减少成本,降低开发难度,提高生产效率。
降低使用数据库门槛
通过 RDS Data Service,用户不再需要配置数据库相关的连接信息、连接池等,使用简单的 RDS Data API 即可将数据存储和业务逻辑结合到一起,就算是初级开发人员也能快速上手业务逻辑开发,大大缩短开发周期。
降低使用成本
通过使用 RDS Serverless Data API,一些特定的系统可以免去后端服务,直接从前端请求到数据库,简化系统架构的同时,由于不再需要服务端业务逻辑开发,减少了应用程序开发的人力成本,降低了维护基础设施的风险,而且更便于扩展和快速迭代。
系统架构简化
降低系统风险
对于组件越多越复杂的系统,出故障的风险就越大。通过使用 RDS Data API,将数据持久层从业务逻辑中抽离,可以极大的降低业务系统的复杂度,从而降低系统风险。
整体架构
RDS Data API Service 整体架构
安全认证体系
RDS Serverless Data Service 使用AK/SK + ARN鉴权模式。用户无需在应用程序中存储数据库凭证,只需要使用 Secrets Manager 来存储在调用 RDS Data API 时需要传入的 ARN。RDS Data API 会透明地调用 Secrets Manager,根据用户传入的 AK/SK 和 ARN 进行鉴权。同时,使用 AK/SK + ARN 鉴权模式意味着用户无需在调用 RDS Data API 的时候传入数据库的用户名、密码。由此以来,安全性得以保障。
安全认证流程
服务核心架构
RDS Serverless Data API 的主要服务流程如下:
- 接收请求,进行参数初始化,同时保存用户配置
- 鉴权,通过则获取数据库连接,失败则直接响应失败信息
- SQL 参数合法性校验,验证参数类型是否合法,是否为空等
- SQL 参数赋值,将传入的实参赋值给对应的形参
- SQL 执行,并获取执行结果
- 结果集获取及处理
- 根据用户配置,构建返回值,最后响应客户端
服务核心架构
服务能力模型
- SQL执行
RDS Serverless Data API 支持执行单条 SQL 语句、批处理 SQL 语句,用户可以控制是否返回所需的数据(列元数据、JSON 格式结果集等)。
- SQL事务
RDS Serverless Data API 支持事务开启、事务提交、事务回滚,用户可以通过在执行 SQL 语句时传入事务ID,将 SQL 置于事务中执行。
- 事务自动开启
为了保证数据的正确一致性,RDS Serverless Data API 会在用户未指定事务时,自动将 SQL 放置于事务之中执行。如果事务执行过程出错,会自动回滚。
- 事务超时机制
开发中经常会遇到数据库锁等待超时的问题,为了避免这个问题,RDS Serverless Data API 在从用户开启事务之后开始计时,如果该事务对应的事务ID在一定时间内(3分钟)没有被使用,则会将其认定为超时。如果事务在其提交之前超时,该事务会自动回滚。
- 结果集大小限制
通过过往开发经验可以看到,很多应用程序会因为读入内存的数据量过大导致内存溢出,进而造成应用程序崩溃,影响业务。因此,RDS Serverless Data API 对查询结果集大小进行了限制(最大不超过 1M),最大程度保障您的应用程序平稳运行。
- SQL超时运行
如果 DDL 语句在完成运行之前超时中断,可能会导致错误并且损坏数据结构。因此,RDS Data API Service 提供了开关,用于控制是否在请求超时后继续运行SQL。
- SQL参数化
用户无需根据不同的值来构造重复的SQL语句,RDS Serverless Data API 支持带参数的SQL。在运行时,SQL中的形参会被替换为传入的实参值。
极致性能
RDS Data API 提供近似于原生数据库驱动的性能。
连接池
当第一次调用 API 访问某个数据库实例时,RDS Serverless Data API 会为该数据库实例维护一个连接池,并保持一定数量的连接。当后续请求到来时,不需要和数据库建立新的连接,而是直接从连接池获取连接,以此来获得极致的响应速度。当数据库实例在一段时间内没被访问时,其对应的连接会被销毁,从而释放数据库实例的系统资源。
鉴权缓存
为了安全性,每次调用 RDS Serverless Data API 都会进行鉴权。因此,为了最大程度提高性能, RDS Data API 对鉴权结果进行了缓存。鉴权结果会保留一段时间,在这段时间内,如果用户再次请求并且命中缓存,则直接从缓存中获取鉴权结果,并重置其过期时间。
批处理SQL语句
RDS Serverless Data API 提供了执行批处理 SQL 的 API,用户可以使用一组参数集来运行 DML 语句(INSERT、UPDATE)。与单独的 INSERT 和 UPDATE 语句相比,批处理 SQL 语句可以显著提高性能。这在批量的数据插入和数据更新场景下极为有用。
了解更多
未来 RDS Serverless Data API 会继续大力发展,在产品功能、形态以及兼容性等方面不断提升,持续加强稳定性,让客户更省心,从而更专注于自身业务的发展,合作共赢。
RDS Serverless Data API 已经发布,您可以通过点击「查看详情」来查看产品功能。
作者信息
刘文灼,花名斩夜,RDS全栈工程师,熟悉RDS管控前后端各种技术栈。关于Serverless、Data API任何相关问题,都可以邮件咨询:vogts.wangt@alibaba-inc.com
/ End /