数据源
RobustMQ MQTT 的认证、授权、黑名单支持多种数据源。
数据源是什么
这里的数据源,指的是认证、授权、黑名单所依赖的身份与策略数据来源。
Broker 会从这些数据源同步用户、ACL、黑名单信息,并用于连接鉴权和访问控制。
为什么要支持多数据源
- 业务系统现状不同:有的已经在 MySQL/Redis,有的希望直接用内置元数据;
- 不同场景诉求不同:有的重视接入成本,有的重视与现有账号系统打通;
- 便于渐进演进:可以先用内置数据源快速落地,再切换到外部数据源;
- 避免强绑定单一存储:降低后续迁移和架构调整成本。
用户怎么用
使用步骤一般是:
- 通过管理控制台或命令行配置
storage_type; - 填写对应数据源配置(如
mysql_config、redis_config); - 如果是 SQL 类数据源,配置查询语句并保证结果字段满足约定;
- 启动后观察认证结果与缓存同步状态,确认链路可用。
运行原理
数据源链路采用“缓存优先”模型,但不同数据源的更新机制不同:
- 客户端连接鉴权时,优先直接比对内存中的缓存数据;
- 内置数据源(Meta Service)发生变更后,缓存实时更新,无延时;
- 外部数据源(MySQL/PostgreSQL/Redis/MongoDB/HTTP)通过定期同步更新缓存;
- 外部数据源主要承担同步与管理职责,不在每次 CONNECT 时参与实时查询。
这种模式的核心目标是:把鉴权热路径从外部 IO 转为内存访问,提升连接高峰期稳定性。
默认情况下,外部数据源同步存在约 5 秒延时;内置数据源为实时更新,不存在该延时。
当前支持的数据源
- 内置数据源(Meta Service)
- MySQL
- PostgreSQL
- Redis
- MongoDB
- HTTP
设计目标
- 不强制使用固定表结构;
- 支持通过配置 SQL/查询语句从现有系统同步数据;
- 鉴权热路径走本地缓存,数据源用于同步与管理;
- 在性能和一致性之间做可控权衡(秒级最终一致)。
通用配置模型
认证配置中的存储层由 StorageConfig 描述,核心字段包括:
storage_type:数据源类型placement_configmysql_configpostgres_configredis_configmongodb_confighttp_config
实际启用哪一类数据源,取决于 storage_type 以及对应子配置是否填写。
使用建议
- 优先用现有系统里已经维护的账号与 ACL 数据,不要重复建模;
- SQL 查询结果字段要和系统约定一致(见各数据源页面);
- 高并发场景建议以缓存命中率为核心指标,避免鉴权路径直接依赖外部数据库;
- 先从单一数据源跑通,再考虑多数据源并存。
