Kong:DB-less(无数据库模式)与非DB-less模式(传统数据库模式DB-backed)的区别(Cassandra、动态配置Admin API、Kong Manager、ConfigMap)
·
文章目录
深入理解 Kong:DB-less 与 非 DB-less 模式的区别
在使用 Kong 作为 API 网关时,一个常见但容易混淆的问题是:到底该选择 DB-less 模式还是传统的数据库模式(DB-backed)?
本文将从架构原理、使用方式、优缺点以及适用场景等多个角度,帮你彻底搞清楚两者的区别。
一、Kong 架构简要回顾
Kong 是一个基于 Nginx 和 OpenResty 构建的高性能 API 网关,核心功能包括:
- 路由转发(Routing)
- 认证鉴权(Auth)
- 限流(Rate Limiting)
- 插件扩展(Plugins)
在架构上,Kong 的核心依赖包括:
- 数据平面(Data Plane):处理请求流量
- 控制平面(Control Plane):管理配置
- 配置存储(Database 或 Declarative Config)
而 DB-less 和非 DB-less 的核心区别,就在于“配置存储方式”。
二、什么是 DB-less 模式?
1. 定义
DB-less(无数据库模式)指的是:
Kong 不依赖任何数据库(如 PostgreSQL / Cassandra),所有配置通过声明式文件(Declarative Config)加载。
通常是一个 YAML 或 JSON 文件,例如:
services:
- name: example-service
url: http://example.com
routes:
- name: example-route
paths:
- /example
启动时通过:
kong start --conf kong.conf
并指定:
database=off
declarative_config=kong.yml
2. 工作机制
- 配置文件一次性加载到内存
- Kong 在运行期间不再依赖外部存储
- 所有节点各自持有完整配置
3. 特点总结
✅ 优点:
- 部署简单(无需数据库)
- 启动速度快
- 性能更高(少一次 DB 查询)
- 配置即代码(GitOps 友好)
- 更容易容器化 / Kubernetes 化
❌ 缺点:
- 不支持 Admin API 动态修改配置
- 修改配置需要重新加载(reload)
- 不适合频繁变更的场景
- 配置文件较大时管理复杂
三、什么是非 DB-less(DB-backed)模式?
1. 定义
这是 Kong 的传统模式:
Kong 使用数据库(PostgreSQL 或 Cassandra)来存储所有配置数据。
配置通过 Admin API 动态写入数据库,例如:
curl -X POST http://localhost:8001/services \
--data "name=example-service" \
--data "url=http://example.com"
2. 工作机制
- Kong 节点从数据库读取配置
- 配置变更通过数据库同步到所有节点
- 支持运行时动态更新
3. 特点总结
✅ 优点:
- 支持动态配置(Admin API)
- 适合复杂、多团队协作
- 支持实时更新,无需重启
- 生态工具更丰富(如 Kong Manager)
❌ 缺点:
- 依赖数据库(增加运维成本)
- 部署复杂
- 存在数据库性能瓶颈
- 高可用需要额外设计(DB HA)
四、核心区别对比
| 维度 | DB-less 模式 | DB-backed 模式 |
|---|---|---|
| 配置存储 | 本地文件(YAML/JSON) | 数据库 |
| 是否依赖 DB | ❌ 否 | ✅ 是 |
| 配置方式 | 声明式(Declarative) | Admin API |
| 动态更新 | ❌ 不支持(需 reload) | ✅ 支持 |
| 部署复杂度 | 低 | 高 |
| 性能 | 更高(无 DB 访问) | 略低 |
| 运维成本 | 低 | 高 |
| 适合规模 | 中小规模 / 静态配置 | 大规模 / 动态系统 |
五、典型使用场景
✅ 适合 DB-less 的场景
- Kubernetes 环境(配合 ConfigMap)
- GitOps / CI-CD 驱动配置
- 配置变更频率低
- 边缘网关 / 轻量部署
- Serverless / 临时环境
👉 常见组合:
- Kong + Kubernetes + Helm
- Kong + Git + CI/CD
✅ 适合 DB-backed 的场景
- 大型企业系统
- 多团队协作管理 API
- 需要 UI 管理(Kong Manager)
- 配置频繁变更
- SaaS 平台
六、如何选择?
可以用一个简单决策思路:
👉 选择 DB-less,如果你:
- 想要简单部署
- 配置可以版本化管理(Git)
- 不需要实时动态修改
- 在 Kubernetes 环境中运行
👉 选择 DB-backed,如果你:
- 需要动态配置能力
- 有多团队协作需求
- 使用 Kong Manager 或 Admin API
- 系统规模较大、复杂度高
七、进阶:Hybrid 模式补充
Kong 还提供了一个折中方案:
👉 Hybrid 模式(混合模式)
- Control Plane(有 DB)
- Data Plane(无 DB)
特点:
- 数据平面无数据库依赖(更安全、更高性能)
- 控制平面集中管理配置
适合:
- 大规模分布式部署
- 跨区域网关架构
八、总结
一句话总结两者核心区别:
DB-less = 配置文件驱动(简单、轻量)
DB-backed = 数据库驱动(灵活、动态)
如果你刚开始使用 Kong,建议:
- 本地开发 / 小规模 → DB-less
- 企业生产环境 → DB-backed 或 Hybrid
更多推荐




所有评论(0)