Summary
Agent Native DB正在迅速发展,由agent创建的数据库实例占比已经超过80%,AIAgent的发展也会进一步带动数据库的演进。当前传统的数据库已不完全适用于AI Agent场景:
- 传统数据库主要基于长期稳态负载设计,默认数据库实例长期运行、持续服务;而面向 AI Agent,数据库环境可能只服务于一次任务、一次试错或一次验证,生命周期从几分钟到几十分钟不等,甚至随任务结束即释放;
- 传统数据库的规格调整、迁移、恢复通常依赖人工或平台触发,属于分钟级的运维操作;而面向 AI Agent,负载具有突发性、波动性和不可预测性,数据库扩缩容需要转变为运行时能力,实现按需创建、自动扩展、空闲收缩和自动释放。
在Agent场景中经常的诉求包含快速启动实例来提升用户的交互响应速度,并支持按需扩缩容,空闲释放等弹性数据库底座能力,完整的能力全景如下:

控制面:关注成本效率和用户体验,主要负责实例生命周期管理、资源快速调度与启动、实例流量监控、访问安全和运维等能力;
数据面:关注数据正确与性能,主要负责数据的存储和读取、连接事务管理、备份恢复等能力。
业界主要开源方案:
- Neon:基于K8s Operator机制,新增 Neon VM资源对象,实现对虚机的生命周期管理(原理与OpenShift KubeVirt 类似,聚焦数据库相关特性更轻量,追求极致的性能)以及相关的弹性扩缩、资源池化等能力;Neon有以下关键技术竞争力:
- 存算分离架构:计算和存储实例解耦,极致弹性;
- 毫秒冷启动:数据库实例冷启动时长降低为~500ms;
- 自动扩缩容:业务繁忙或空闲时,计算节点自动完成CPU和内存资源的扩缩容;
- Branching:支持像git管理代码分支一样管理数据,数秒完成数据副本创建和恢复;
- 极速数据恢复:数据丢失时秒级完成历史数据恢复,1TB数据只需1秒;
- Time Travel:支持恢复窗口(1~30天)内,任意时间点(毫秒级粒度)历史数据只读查询。
- CockroachDB:云原生分布式SQL数据库,通过存储与计算彻底分离、原生分布式事务、多租户集群虚拟化以及智能代理等关键技术,提供了 Serverless 化的数据库能力;有以下关键能力:
- 存算分离:计算与存储解耦,通过代理对外提供服务;
- Scale to Zero:在无任何查询负载时,计算层 Pod 可被完全回收,仅保留存储层,将成本压至极低;
- 亚秒级唤醒:当新请求到达时,SQL Proxy 会立即从预热池中绑定一个已就绪的 SQL Pod,整个唤醒过程可控制在亚秒级;
- 连接保持与热迁移:SQL Proxy 支持代理认证,维护对所有实例的连接信息,可以捕获一个会话的全部状态,支持将会话迁移至新的实例;
- 强一致分布式事务:支持跨行、跨表、跨节点甚至跨区域的强一致事务,使用串行化隔离级别作为默认隔离级别;
- 兼容 PostgreSQL 生态:完整支持 PostgreSQL 的连线协议(Wire Protocol)和大部分 SQL 语法,现有基于 PostgreSQL 的应用、驱动和 ORM 可以几乎零修改迁移上来。
- PlanetScale/MariaDB Cloud Serverless/KubeBlocks:业界其他Serverless DB主要是使用K8S Operator的调谐能力管理数据库计算实例,并构建了针对流量和连接的监控能力,在空闲时缩减实例资源,也构建了对应的数据库代理来保持客户端对数据库实例的连接和路由信息。
总结如下:
- 通过预热资源池技术实现数据库计算实例的快速启动;
- 同时构建了基于请求量的主动弹性能力,释放计算资源;
- 构建的SQL Proxy代理层来代理应用与数据库连接,对应用保持连接不中断。
Motivation
在AI Agent时代,对Serverless DB的诉求越来越强烈,当前面向Baidu & openGauss场景,我们希望构建管控面的能力,支持数据库实例在K8S生态中按需创建,快速启动,以及连接地址保持不变的能力。
Goals (目标)
- 支持按需初始化数据库实例资源池,并进行动态调谐;
- 支持数据库实例生命周期管理,对外提供REST接口,支持数据库实例的申请、释放和垂直扩缩容;
- 支持数据库实例管理服务对客户端的认证鉴权;
- 支持数据库实例Service生命周期管理,保证数据库连接地址不变。
Non-Goals (非目标,澄清特性范围)
- 数据库存算分离由数据面实现;
- 数据库实例使用普通容器,不关注安全隔离;
- 实例垂直扩缩容能力为K8S基础特性,1.32版本中为Alpha,不完善,需要由上层数据库管控面服务根据实际资源情况进行调度,当前仅对外提供接口;
- 数据库连接地址不变,但数据库连接会中断,需要客户端重新触发连接。
Proposal
User Stories (Optional)
Story 1
集群管理员下发数据库实例资源池CR,在集群中按需创建出来指定数量和规格的数据库实例Pod。
Story 2
用户通过管理服务对外提供的REST接口进行数据库计算实例的申请、释放和垂直扩缩容,用户可根据数据库实例信息,连接地址等信息连接数据库进行业务操作。
Story 3
用户在释放数据库实例后,重新申请数据库计算实例,仍可使用之前的数据库连接地址进行连接数据库。
Notes/Constraints/Caveats (Optional)
Risks and Mitigations
Design Details(设计细节)
设计思路
通过K8S Operator扩展机制,定义数据库实例资源CRD,实现资源池扩展模块,调谐维护数据库实例预热池;对外提供接口支持数据库实例的申请和释放。

- 集群管理员下发数据库计算实例预热资源池CR,由DBI Operator进行数据库计算实例的初始化,创建对应的Pod,这些Pod会调度到适当节点运行,组成预热资源池;
- DB manager根据应用需求和流量监控结果,调用DBI Operator提供的管理接口,进行数据库实例的申请、释放和扩缩容;
- 在申请数据库实例时,创建与APP对应的service,与DB instance通过label关联,K8S会调谐对应的路由规则,应用通过Service域名与数据库进行连接。
资源定义
-
数据库资源池示例
apiVersion: serverlessdb.openfuyao.cn/v1 kind: DBResourcePool metadata: name: pool-small namespace: serverlessdb spec: replicas: 5 minAvailable: 2 pgVersion: 17 controlPlaneUrl: "http://control-plane:8080" resources: cpu: "1000m" memory: "1Gi" cpuLimit: "2000m" memoryLimit: "2Gi" podTemplate: metadata: labels: app: compute annotations: compute.openfuyao.cn/priority: "0" prometheus.io/scrape: "true" prometheus.io/port: "3080" spec: hostNetwork: false dnsPolicy: ClusterFirst securityContext: fsGroup: 1000 runAsUser: 1000 initContainers: - name: register-pod image: "cr.openfuyao.cn/openfuyao/compute/init:latest" imagePullPolicy: IfNotPresent env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace volumeMounts: - name: shared-token mountPath: /shared command: - /bin/sh - -c - sleep 30 containers: - name: compute image: "cr.openfuyao.cn/openfuyao/compute/compute:v17.4" imagePullPolicy: IfNotPresent resizePolicy: - resourceName: cpu restartPolicy: NotRequired - resourceName: memory restartPolicy: NotRequired env: - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: COMPUTE_ID value: "$(NAMESPACE)_$(MY_POD_NAME)" args: - /var/db/postgres/compute - -C - postgresql://cloud_admin@localhost/postgres - -b - /usr/local/bin/postgres - --compute-id - $(COMPUTE_ID) - --dev ports: - name: pg containerPort: 5432 volumes: - name: shared-token emptyDir: {} -
数据库实例示例:
apiVersion: serverlessdb.openfuyao.cn/v1 kind: DBInstance metadata: name: pool-small-ins-0 namespace: serverlessdb labels: dbresourcepool: pool-small app-ref: APP1 spec: {} status: phase: Running podName: compute-pool-small-0 podIP: 10.244.1.10 podUID: 4b295d49-7886-4dc7-a4b1-528886c5eb97 pgPort: 5432 --- apiVersion: serverlessdb.openfuyao.cn/v1 kind: DBInstance metadata: name: pool-middle-ins-0 namespace: serverlessdb labels: dbresourcepool: pool-middle spec: {} status: phase: WarmReady podName: compute-pool-middle-0 podIP: 10.244.1.11 podUID: dc5f5bb9-5167-4809-8eaf-a9f79d0c1ebc
接口定义
-
数据库实例申请接口
POST /api/v1/instances?namespace={namespace} Example: HEADER: Authorization: Bearer tokenXXXXXXXXXX POST /api/v1/instances?namespace=serverlessdb Request: { app_ref: "app1", pg_version: "17", resources: cpu: "1000m", memory: "1Gi" } Response: StatusCode: 200 { endpoint: "app1.serverlessdb.svc.cluster.local", pod_name: "compute-pool-small-0", pod_id: "4b295d49-7886-4dc7-a4b1-528886c5eb97" } -
数据库实例释放接口
DELETE /api/v1/instances/{app_ref}?namespace={namespace} Example: HEADER: Authorization: Bearer tokenXXXXXXXXXX DELETE /api/v1/instances/app1?namespace=serverlessdb Response: StatusCode: 204 -
对已有数据库实例进行垂直扩缩容
PATCH /api/v1/instances/{app_ref}?namespace={namespace} Example: HEADER: Authorization: Bearer tokenXXXXXXXXXX PATCH /api/v1/instances/app1?namespace=serverlessdb Request: { "containers": [ { "name": "compute", "resources": { "cpu": "2000m", "memory": "2Gi" } } ] } Response: StatusCode: 200 { endpoint: "app1.serverlessdb.svc.cluster.local", pod_name: "compute-pool-small-0", pod_id: "4b295d49-7886-4dc7-a4b1-528886c5eb97" }
交付件
DBI Operator组件镜像包,Chart包,用户指导。
可靠性
DBI Operator作为中心侧应用,负责资源池调谐,对外提供服务接口和Service管理,需要主备实例运行,采用K8S Lease能力进行选主,在主实例故障时,自动切换到备实例。
安全设计
对外接口需要进行认证鉴权,使用K8S的Token进行认证鉴权,需要为上层数据库管理服务颁发SAToken,并配置对应的RBAC授权规则。
Testcase
Test Plan
功能用例
正常场景用例
- 按照资源池CR下发指定数量的数据库实例资源,可成功创建指定数量的数据库实例;
- 实例充足场景下,调用申请实例接口,可正常申请到数据库实例;
- 对已申请实例进行扩缩容,接口修改成功,可查看具体实例信息确认扩缩容正常;
- 对已申请实例通过域名和端口进行网络连接,确认域名解析结果正确,网络端口可通;
- 对已使用结束实例进行释放,实例释放成功,资源池中重新调谐出新的实例,满足数量要求;
- 重新对指定APP申请新的数据库实例,通过原始的域名和端口进行网络连接,确认域名解析结果正确,网络端口可通;
异常场景用例
- 集群资源不足时,创建资源池时部分实例Pod无法被调度;
- 集群资源池数量不足时,申请数据库实例报错,无法正常申请数据库实例;
- 集群资源不足时,对已申请实例进行数据库扩容操作,接口正常返回,但数据库实例资源无法按照期望调整;
- 使用过期Token进行请求调用,报错401;
- 使用无权限Token进行请求调用,报错403。
性能用例
- 单个申请数据库实例的接口的时延小于1s;
- 批量申请接口,可达到1000个/5s。
Prerequisite testing updates
Production Readiness Review Questionnaire
Feature Enablement and Rollback
Prerequisite testing updates
Production Readiness Review Questionnaire
Feature Enablement and Rollback
How can this feature be enabled / disabled in a live cluster?
不涉及
Does enabling the feature change any default behavior?
不涉及
Can the feature be disabled once it has been enabled (i.e. can we roll back the enablement)?
支持
What happens if we reenable the feature if it was previously rolled back?
支持
Are there any tests for feature enablement/disablement?
不涉及
Rollout, Upgrade and Rollback Planning
How can a rollout or rollback fail? Can it impact already running workloads?
不涉及
What specific metrics should inform a rollback?
不涉及
Were upgrade and rollback tested? Was the upgrade->downgrade->upgrade path tested?
不涉及
Is the rollout accompanied by any deprecations and/or removals of features, APIs, fields of API types, flags, etc.?
不涉及
Monitoring Requirements
How can an operator determine if the feature is in use by workloads?
不涉及
How can someone using this feature know that it is working for their instance?
不涉及
What are the reasonable SLOs (Service Level Objectives) for the enhancement?
不涉及
What are the SLIs (Service Level Indicators) an operator can use to determine the health of the service?
不涉及
Are there any missing metrics that would be useful to have to improve observability of this feature?
不涉及
Dependencies
Does this feature depend on any specific services running in the cluster?
否
Scalability
Will enabling / using this feature result in any new API calls?
不涉及
Will enabling / using this feature result in introducing new API types?
不涉及
Will enabling / using this feature result in any new calls to the cloud provider?
不涉及
Will enabling / using this feature result in increasing size or count of the existing API objects?
不涉及
Will enabling / using this feature result in increasing time taken by any operations covered by existing SLIs/SLOs?
不涉及
Will enabling / using this feature result in non-negligible increase of resource usage (CPU, RAM, disk, IO, ...) in any components?
不涉及
Troubleshooting
How does this feature react if the API server and/or etcd is unavailable?
不涉及
What are other known failure modes?
不涉及
What steps should be taken if SLOs are not being met to determine the problem?
不涉及
Implementation History
Drawbacks
不涉及
Alternatives
不涉及