深入理解 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
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐