153 lines
8.2 KiB
Markdown
153 lines
8.2 KiB
Markdown
|
|
# OPS 国产/国内生态时序数据库选型验证
|
|||
|
|
|
|||
|
|
## 1. 文档目标
|
|||
|
|
|
|||
|
|
本文用于记录 P1 时序数据库选型验证和最终决策。OPS 第 1 阶段指标样本、探测样本、接口流量和采集健康度采用 TDengine 开源版作为时序数据存储底座。
|
|||
|
|
|
|||
|
|
本文不是商业采购建议。TDengine 开源版无时间使用限制,但采用 AGPL-3.0 许可证;最终部署版本、AGPL 合规、麒麟兼容性和是否需要企业版支持仍需在现场确认。
|
|||
|
|
|
|||
|
|
## 2. 选型约束
|
|||
|
|
|
|||
|
|
| 约束 | 要求 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| 部署环境 | 必须支持 Linux/麒麟验收环境,优先支持 x86_64 和 ARM64。 |
|
|||
|
|
| 后端语言 | 必须提供 Go 后端可用连接方式。 |
|
|||
|
|
| 写入能力 | 支持批量写入高频指标样本。 |
|
|||
|
|
| 查询能力 | 支持时间范围查询、聚合、降采样或等效能力。 |
|
|||
|
|
| 保留策略 | 支持数据保留周期或 TTL。 |
|
|||
|
|
| 运维 | 具备备份恢复、权限控制、日志和基础监控能力。 |
|
|||
|
|
| 风险 | TDengine 开源版的 AGPL 合规、国产化适配、社区活跃度和长期维护风险可评估。 |
|
|||
|
|
|
|||
|
|
## 3. 官方资料依据
|
|||
|
|
|
|||
|
|
| 产品 | 官方资料 | 本文采用的信息 |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| TDengine | https://docs.tdengine.com/tdengine-reference/supported-platforms/ | 官方平台矩阵列出 Linux、Windows、Galaxy Kirin V10、NeoKylin 等支持情况,并说明 Go 连接器平台支持。 |
|
|||
|
|
| TDengine | https://docs.tdengine.com/tdengine-reference/client-libraries/go/ | Go 驱动实现 `database/sql`,WebSocket 连接为迁移方向,原生和 REST 连接计划在 2027-01-01 停用。 |
|
|||
|
|
| Apache IoTDB | https://iotdb.apache.org/UserGuide/latest/API/Programming-Go-Native-API.html | Go Native API 支持 `Session` 和 `SessionPool`,并提供批量写入、范围查询、聚合查询等接口。 |
|
|||
|
|
| openGemini | https://docs.opengemini.org/guide/quick_start/get_started.html | openGemini 支持 x86-64、ARM-64 和主流 Linux,单节点默认 HTTP 端口为 8086,并提供基础写入查询示例。 |
|
|||
|
|
|
|||
|
|
## 4. 候选产品验证
|
|||
|
|
|
|||
|
|
### 4.1 TDengine
|
|||
|
|
|
|||
|
|
| 项目 | 验证结论 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| Linux/麒麟 | 官方平台矩阵覆盖 Galaxy Kirin V10、NeoKylin 等,但部分能力标注与企业版相关,需确认 OSS/企业版边界。 |
|
|||
|
|
| CPU 架构 | 服务端和连接器支持 x64、ARM64;Go 连接器覆盖 Linux、Windows、macOS。 |
|
|||
|
|
| Go 连接 | 官方 Go 驱动实现 `database/sql`;建议采用 WebSocket 连接路径。 |
|
|||
|
|
| 批量写入 | 支持 SQL 和 schemaless 写入,适合指标样本。 |
|
|||
|
|
| 查询 | 支持时间范围查询和聚合查询。 |
|
|||
|
|
| 保留策略 | 支持 TTL 或库表级保留策略,需在样例库验证。 |
|
|||
|
|
| 风险 | Go 原生连接和 REST 连接计划停用,首期必须避免新代码依赖将废弃路径。 |
|
|||
|
|
|
|||
|
|
### 4.2 Apache IoTDB
|
|||
|
|
|
|||
|
|
| 项目 | 验证结论 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| Linux/麒麟 | Apache 项目,需在目标麒麟版本实测安装、服务管理和性能。 |
|
|||
|
|
| CPU 架构 | 需按现场系统包和 JVM 环境确认。 |
|
|||
|
|
| Go 连接 | Go Native API 提供 `SessionPool`,并建议多线程场景使用连接池。 |
|
|||
|
|
| 批量写入 | 提供 `InsertTablet`、`InsertRecords`、`InsertTablets` 等批量写入接口。 |
|
|||
|
|
| 查询 | 提供原始数据查询、聚合查询、SQL 查询等接口。 |
|
|||
|
|
| 保留策略 | 支持 TTL 方向,需结合版本验证。 |
|
|||
|
|
| 风险 | 设备树模型适合设备数据,但 OPS 的资源、指标、标签模型需要设计映射规则。 |
|
|||
|
|
|
|||
|
|
### 4.3 openGemini
|
|||
|
|
|
|||
|
|
| 项目 | 验证结论 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| Linux/麒麟 | 官方文档列出主流 Linux、openEuler 等支持;麒麟需实测。 |
|
|||
|
|
| CPU 架构 | 官方快速开始列出 x86-64 和 ARM-64 支持。 |
|
|||
|
|
| Go 连接 | 内核使用 Go,生态接近 InfluxDB 协议;OPS 需验证 Go 客户端选型。 |
|
|||
|
|
| 批量写入 | 支持 line protocol 风格写入,适合指标。 |
|
|||
|
|
| 查询 | 支持类 InfluxQL 查询,适合时间范围和聚合。 |
|
|||
|
|
| 保留策略 | 支持数据库、保留策略方向,需在版本中验证配置项。 |
|
|||
|
|
| 风险 | 相比 TDengine 和 IoTDB,项目成熟度、企业支持和麒麟适配需要更谨慎验证。 |
|
|||
|
|
|
|||
|
|
## 5. 评分矩阵
|
|||
|
|
|
|||
|
|
分数为当前文档验证分,不替代现场压测。
|
|||
|
|
|
|||
|
|
| 维度 | 权重 | TDengine | Apache IoTDB | openGemini |
|
|||
|
|
| --- | ---: | ---: | ---: | ---: |
|
|||
|
|
| Linux/麒麟适配 | 20 | 18 | 14 | 14 |
|
|||
|
|
| Go 接入成熟度 | 15 | 14 | 13 | 10 |
|
|||
|
|
| 批量写入 | 15 | 14 | 13 | 12 |
|
|||
|
|
| 范围查询与聚合 | 15 | 14 | 14 | 12 |
|
|||
|
|
| 保留策略/降采样 | 10 | 8 | 8 | 8 |
|
|||
|
|
| 运维和备份恢复 | 10 | 8 | 8 | 7 |
|
|||
|
|
| 授权和交付风险 | 10 | 7 | 9 | 8 |
|
|||
|
|
| 团队学习成本 | 5 | 4 | 3 | 4 |
|
|||
|
|
| 总分 | 100 | 87 | 82 | 75 |
|
|||
|
|
|
|||
|
|
## 6. 选型结论
|
|||
|
|
|
|||
|
|
第 1 阶段已决策采用 TDengine 开源版。Apache IoTDB 和 openGemini 不作为首期实现目标,仅保留为后续替换或风险备选。
|
|||
|
|
|
|||
|
|
理由:
|
|||
|
|
|
|||
|
|
- TDengine 对 Linux、麒麟和多 CPU 架构的官方说明最贴近当前验收约束。
|
|||
|
|
- TDengine Go 驱动与 `database/sql` 兼容,接入成本较低。
|
|||
|
|
- Apache IoTDB 的设备树模型适合设备时序数据,但 OPS 需要额外设计资源和标签映射。
|
|||
|
|
- openGemini 适合可观测性指标场景,但首期交付要降低成熟度和现场适配风险。
|
|||
|
|
|
|||
|
|
TDengine 开源版使用边界:
|
|||
|
|
|
|||
|
|
| 项目 | 结论 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| 使用期限 | 开源版无固定到期时间;不是试用版授权。 |
|
|||
|
|
| 许可证 | AGPL-3.0,需要进行开源合规确认。 |
|
|||
|
|
| 商业支持 | 若院方要求原厂支持、国产系统认证或企业特性,需要另行评估企业版或商业支持。 |
|
|||
|
|
| 技术路线 | 后端优先使用 TDengine Go WebSocket 连接路径,避免依赖官方已标记未来停用的原生或 REST 路径。 |
|
|||
|
|
| 部署验证 | 必须在目标 Linux/麒麟版本上完成安装、写入、查询、保留策略、备份恢复和故障降级验证。 |
|
|||
|
|
|
|||
|
|
首期实现仍必须通过时序库适配层隔离 TDengine,避免业务逻辑直接依赖 TDengine SQL 方言,保留后续替换空间。
|
|||
|
|
|
|||
|
|
## 7. 适配层接口
|
|||
|
|
|
|||
|
|
后端建议定义最小接口:
|
|||
|
|
|
|||
|
|
| 方法 | 输入 | 输出 | 说明 |
|
|||
|
|
| --- | --- | --- | --- |
|
|||
|
|
| `WriteSamples` | 样本数组 | 写入结果 | 支持批量写入。 |
|
|||
|
|
| `QueryRange` | 资源、指标、时间范围、标签 | 样本序列 | 用于资源详情趋势图。 |
|
|||
|
|
| `QueryAggregate` | 资源、指标、时间范围、聚合窗口 | 聚合序列 | 用于报表和大屏。 |
|
|||
|
|
| `CheckHealth` | 无 | 健康状态 | 用于部署烟测和自监控。 |
|
|||
|
|
| `EnsureRetention` | 保留策略配置 | 执行结果 | 初始化或校验保留策略。 |
|
|||
|
|
|
|||
|
|
业务代码只依赖适配层,不直接拼接 TDengine 专有查询。
|
|||
|
|
|
|||
|
|
## 8. 验证计划
|
|||
|
|
|
|||
|
|
| 步骤 | 验证内容 | 通过标准 |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| 1 | 在目标 Linux/麒麟环境安装 TDengine 开源版 | 服务可启动,端口和日志正常。 |
|
|||
|
|
| 2 | 后端使用 Go 写入 10 万条样本 | 无明显错误,写入耗时可记录。 |
|
|||
|
|
| 3 | 按 `resource_id + metric_code + 时间范围` 查询 | 返回正确序列,能映射回资源。 |
|
|||
|
|
| 4 | 执行 1 分钟、5 分钟、1 小时聚合 | 聚合结果正确。 |
|
|||
|
|
| 5 | 配置保留策略或 TTL | 过期策略可查询和验证。 |
|
|||
|
|
| 6 | 执行备份恢复演练 | 恢复后样本可查。 |
|
|||
|
|
| 7 | 权限验证 | 只读账号不能写入,写入账号不能管理系统配置。 |
|
|||
|
|
| 8 | 故障验证 | 时序库不可用时,后端返回局部失败并记录 `traceId`。 |
|
|||
|
|
|
|||
|
|
## 9. 验收影响
|
|||
|
|
|
|||
|
|
| 功能 | 依赖时序库 | 降级策略 |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| 资源详情趋势图 | 是 | 基本信息可见,趋势区显示局部错误。 |
|
|||
|
|
| 首页资源健康 | 部分依赖 | 显示最近成功采集时间和数据过期提示。 |
|
|||
|
|
| 告警阈值 | 是 | 采集失败转内部事件,不伪造阈值结果。 |
|
|||
|
|
| 报表 | 是 | 异步失败可重试,保留失败原因。 |
|
|||
|
|
| 大屏 | 是 | 单组件失败不影响整屏。 |
|
|||
|
|
|
|||
|
|
## 10. 未决项
|
|||
|
|
|
|||
|
|
| 未决项 | 当前处理 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| AGPL 合规 | 需要项目、院方或法务确认开源版使用方式是否满足 AGPL-3.0 要求。 |
|
|||
|
|
| 企业版需求 | 若验收要求原厂支持、认证或企业特性,需要商务和现场运维确认。 |
|
|||
|
|
| 麒麟具体版本 | 验收环境确定后实测。 |
|
|||
|
|
| 高可用部署 | 第 1 阶段可先单节点或小集群验证,正式上线前补 HA 方案。 |
|
|||
|
|
| 压测指标 | `server/` 初始化后补写入吞吐、查询 p95/p99 和资源占用基线。 |
|