← 返回官网架构演进之路 · ARCHITECTURE EVOLUTION · 07/10
06 · CDN 与反向代理08 · 业务拆分与服务化
阶段 07 · 换道

搜索引擎NoSQL架构白皮书

换对工具再干活:检索交给倒排索引,海量化交给异构存储,别再用数据库硬扛。

07 / 10阅读 ≈ 12 分钟适用:检索复杂化 · 数据形态多样 · 关系模型力不从心骏瑞轩集团 · 云与数字科技

§ 00概述

不是所有数据都该住在关系数据库里。当业务出现多维组合查询、全文检索、海量写入这三类需求时,正确答案往往不是继续给 MySQL 加索引,而是把这类数据「换道」到专门的引擎:检索进 Elasticsearch,文档与时序进 NoSQL。

本章的数据集核心是一张选型矩阵:关系库、搜索引擎、文档库、宽列库、时序库各自的能力边界,以及「主库 + 异构副本」的同步方案。换道不等于抛弃关系数据库——它仍是交易与一致性的锚点,检索与海量场景才是新引擎的战场。

§ 01演进定位

关系数据库的舒适区是事务与结构化关联查询。一旦查询模式变成「多条件 + 模糊 + 聚合」(商品搜索、日志分析、用户画像筛选),B+ 树索引就会力不从心——LIKE 前缀模糊直接全表扫,多维组合索引盖不住。

搜索引擎(倒排索引)天然为「查」而生:分词、相关性排序、聚合分析开箱即用;NoSQL 各家族则按数据形态分工:文档库存灵活结构、宽列库扛海量行、时序库吃高吞吐写入。

架构上的正确姿势是异构而非替换:MySQL 继续做交易主库(唯一事实源),数据经 CDC 管道实时同步到搜索/NoSQL 副本,各查询各的。主库的权威性与专用引擎的查询能力同时拿到。

§ 02技术架构

检索链路:binlog → CDC(Canal/DTS/Kafka)→ 消费者组装文档 → 写入 ES 索引。索引设计按查询场景倒推:分词器、字段类型、路由按租户/类目,避免一张大索引包打天下。

ES 集群基线:3 节点起步(2C8G/节点起),冷热角色分离,副本数 1 起步;分片数按「单分片 20-40GB」预估并预留余量。索引生命周期管理(ILM)自动滚动与清理。

NoSQL 分工:文档库(MongoDB)承接灵活 Schema 的内容类数据;宽列(HBase/Cassandra 类)承接海量行;时序库承接监控与埋点。数据管道与 ES 共用同一套 CDC,避免多点同步互踩。

§ 03实施路径

第一阶段(1 周)查询画像:统计慢查询与 LIKE 查询的真实模式,映射到目标引擎能力,产出「换道数据清单」(哪些表、哪些字段、TTL 多长)。

第二阶段(2 周)管道与索引:CDC 链路搭建、ES 索引设计与分词验证、别名机制就位(重建索引零停机)、数据回补脚本。

第三阶段(1-2 周)切流与观测:检索接口灰度、相关性人工评估(Top10 相关性)、延迟与命中率看板、回补与重索引演练。总周期 4-5 周。

§ 04客户价值与适用判断

该换道:搜索框成为核心功能、报表聚合把主库 CPU 打满、日志/埋点写入量超过关系库承载、或非结构化数据占比过半。

不该换道:只为「技术先进」;交易数据(订单、账务)永远留在关系库——搜索引擎不承担交易一致性,这是红线。

规模提醒:ES 最小有意义规模是 3 节点,月成本千元级。查询量真的很小的话,先把数据库索引和 SQL 治理做透,别为 < 10 QPS 的搜索上集群。

§ D01组件与选型清单

DATA搜索引擎与 NoSQL · 标准组件栈主库 + 异构副本
层级组件选型建议职责与要点
交易主库MySQL(沿用 05 章架构)唯一事实源交易与一致性锚点,不承担检索压力
搜索引擎Elasticsearch 3 节点2C8G/节点 · 冷热分离全文检索、多维聚合,别名机制支持零停机重建
文档库MongoDB 副本集按内容类数据灵活 Schema,内容与画像类数据
时序库云时序数据库监控/埋点专用高吞吐写入 + 自动降采样与 TTL
同步管道CDC + Kafkabinlog 订阅主库变更实时进异构副本,幂等消费
索引治理ILM 生命周期滚动 + 自动清理索引按天/周滚动,存储成本可控
检索监控慢查询 + 命中率看板P95 < 200ms相关性抽样评估机制化

CDC 消费必须幂等:重复消费是常态而非异常,文档写入按 _id 天然去重。

§ D02成本测算数据集

DATA成本测算示例(检索换道增量 · 月度)月度 · CNY
项目规格月成本说明
ES 集群3 节点 · 2C8G · SSD≈ ¥1,100冷热分离可再降 30%
Kafka实例 3 分区≈ ¥150CDC 事件通道
CDC 同步DTS/binlog 订阅≈ ¥100持续运行
时序库按写入点计费≈ ¥80监控埋点可选
存储增量ES SSD 300GB含集群价按 20-40GB/分片规划
增量合计 ≈ ¥1,430/月 · 检索 P95 从秒级进入 200ms

本章是系列中「绝对成本」最高的一跳,因此触发条件也最苛刻:查询模式错位是前提,不是可选项。

§ D03关键指标基准

DATA可用性与体验基线SLO 参考
指标关系库硬扛基线本阶段目标行业良好
检索 P951-5s(LIKE 全表扫)< 200ms< 100ms
索引同步延迟—< 1 分钟< 5 秒
聚合查询 CPU(主库)峰值 80%+< 10%(移出主库)接近 0
Top10 相关性人工评估—≥ 80% 相关≥ 90% + 算法迭代
数据一致性(主库 vs 副本)—对账差异 = 0实时监控自动修复

§ D04演进触发信号

DATA什么时候必须走向下一阶段任一命中即评估
触发信号判定阈值演进方向
服务数量失控手工部署 > 10 个服务微服务治理体系(09)
团队并行冲突多团队改同一代码库业务拆分(08)先行
交付环境不一致「我本地是好的」月度重现容器化统一交付(10)
资源利用率低峰值 CPU < 15% 但无法缩容容器化混部(10)
发布窗口排不过来服务互锁发布需半天CI/CD 与服务自治(09)

§ D05上线检查清单

查询画像先行慢查询与 LIKE 模式统计完毕,换道清单经评审
别名机制就位ES 重建索引通过别名原子切换,全程零停机
幂等消费验证CDC 重放一整天数据,异构副本与主库对账一致
相关性评估Top10 人工相关性 ≥ 80% 才切流量,建立持续评估机制
主库卸压确认聚合与检索流量迁移后,主库 CPU 峰值下降可观测
备份与恢复ES 快照到对象存储,恢复演练一次

§ D06高频翻车点

把 ES 当主库唯一事实写进搜索引擎,主库与副本角色颠倒,一致性事故不可避免
一张大索引用到底不分场景不分词,检索相关性与性能双输
分片数一次定死数据增长后单分片膨胀到 80GB+,重建索引苦不堪言
CDC 不幂等重复消费产生脏数据,对账永远差一点
同步延迟无监控索引落后用户无感知,客服先于系统发现「搜不到刚下的单」

§ D07常见问答

DATA搜索引擎与 NoSQL · 问答数据集4 组
问题答案
MySQL 加索引真的解决不了吗?等值与范围查询可以;但「多条件 + 模糊 + 排序 + 聚合」的组合是倒排索引的主场,B+ 树在模糊匹配上结构性劣势,加索引只是延缓。
ES 集群要多少台起步?生产环境 3 节点是底线(脑裂防护 + 角色分离),2C8G/节点配 SSD。低于这个规模不如用数据库全文索引或云托管检索服务凑合。
数据和主库不一致了怎么办?预防优先:CDC 幂等 + 全量对账任务(夜间比对行数与校验和)。出现差异时以主库为准触发定向回补,不要手改副本。
MongoDB 和 ES 重复吗?不重复。ES 解决「怎么查」,MongoDB 解决「怎么存」——灵活结构的海量文档。很多内容型业务两者并用:MongoDB 为源、ES 为检索副本。

§ D8角色分工数据集

DATA角色分工数据集本阶段人员配置
角色核心职责投入度备注
后端索引设计 · CDC 管道 · 检索接口70%换道主力
运维ES 集群 · 快照 · ILM40%集群基线维护
数据(兼)对账任务 · 质量报告30%一致性看门人
业务相关性人工评估10%每周 Top10 抽评

§ D9风险登记册

DATA风险登记册概率 × 影响
风险概率影响缓解措施
主库与检索副本不一致中致命幂等消费 + 夜间全量对账 + 定向回补
索引膨胀拖垮集群中严重ILM 滚动 + 分片 20-40GB 规划
相关性劣化无人察觉中中每周人工评估机制化
CDC 单点断流低严重断点续传 + 延迟告警 + 全量回补脚本

§ D10监控告警清单

DATA监控告警清单阈值即责任
监控对象指标告警阈值响应动作
同步管道索引延迟> 5 分钟短信 · 管道健康排查
检索P95 延迟> 300ms工单 · 慢查询与资源
ES堆内存 / 磁盘水位> 75%电话 / 工单 · 扩容或 ILM
数据一致性对账差异> 0电话 · 定向回补
管道积压Kafka Lag> 阈值短信 · 消费能力扩容

§ D11工具链选型

DATA工具链选型检索专项
环节推荐备选选择理由
搜索引擎Elasticsearch 3 节点云托管检索生态成熟;托管换运维
消息通道Kafka(云托管)RabbitMQ回放能力是硬需求
CDCCanal / DTSlogstash JDBCbinlog 级实时性
文档库MongoDB 副本集PostgreSQL JSONB按 Schema 灵活度取舍

§ D12实施时间线

DATA实施时间线周为单位
周次里程碑责任角色出口物
W1查询画像后端 + 业务换道清单评审通过
W2-3管道与索引后端 + 运维CDC 联通 · 索引别名就位
W4回补与对账数据全量回补完成 · 差异 = 0
W5灰度切流全员检索接口 10%→100% · 评估达标

§ D13SLA 与容灾基线

DATASLA 与容灾基线对内承诺
指标基线承诺度量方式未达标处置
检索 P95< 200msAPM 采样分片与缓存优化
索引延迟< 1 分钟延迟监控管道扩容
集群可用性99.9%集群健康 API3 节点 + 快照常备
一致性对账差异 = 0夜间全量对账回补脚本化

§ D14应急预案

DATA应急预案一页纸预案
故障场景典型现象处置步骤升级路径
ES 集群红/ yellow分片未分配① 查分配原因 ② 磁盘/节点修复 ③ 必要时重路由数据风险 → 停写排查
管道断流索引延迟放大① 断点续传 ② 追平积压 ③ 核对幂等消费积压过大 → 全量回补
检索结果劣化相关性投诉① 比对分词与映射变更 ② 回滚索引版本 ③ 评估流程复盘核心功能 → 立即
NoSQL 主节点故障副本集选举① 确认自动切换 ② 连接串健康 ③ 数据完整性抽查反复选举 → 升级厂商

§ D15首年成本明细

DATA首年成本明细CNY
项目月成本年成本备注
ES 3 节点 2C8G≈ ¥1,100≈ ¥13,200冷热分离可再降
Kafka 云托管≈ ¥150≈ ¥1,8003 分区起步
CDC 持续同步≈ ¥100≈ ¥1,200binlog 订阅
ES 快照存储≈ ¥40≈ ¥480每日快照

首年增量 ≈ ¥16,680——全系列最贵一跳,务必让「查询模式错位」成为唯一的立项理由。

§ D16团队能力要求

DATA团队能力要求按需补齐
能力项要求级别如何补齐
倒排索引与相关性必须索引设计评审 + 分词实测
CDC 管道工程必须幂等消费 + 回补演练
ES 集群运维必须ILM + 快照恢复演练
数据对账方法建议夜间对账任务值班

§ D17关键决策速查(ADR)

DATA关键决策速查(ADR)本阶段 4 个决策
决策备选方案结论理由
换道引擎ES vs 云托管检索ES 生态成熟;托管换运维
集群规模2 节点 vs 3 节点3 节点:脑裂防护 + 角色分离
同步管道自建 Canal vs DTSDTS 管道少踩坑;自建要配监控
文档库MongoDB vs PG JSONB按 Schema 灵活度与团队栈

§ D18高频面试题

DATA高频面试题本阶段 4 题
问题考察点优秀回答特征
为什么不继续用 MySQL LIKE?选型论证倒排索引与 B+ 树的结构性差异
ES 零停机重建索引怎么做?工程能力别名原子切换流程完整
CDC 消费怎么保证幂等?数据工程按 _id 去重 + 全量对账
相关性怎么评估?质量意识Top10 人工评估机制化

§ D19命令与操作速查

DATA命令与操作速查检索专项
场景命令/操作说明
集群健康GET _cluster/healthgreen/yellow/red
慢查询slowlog 设置与查看按索引粒度
别名切换POST _aliases 原子操作重建索引标准动作
分片分布GET _cat/shards单分片 20-40GB 校验

§ D20采购与商务要点

DATA采购与商务要点本阶段采购项
采购项询价要点商务注意
ES 集群节点规格 + SSD 容量 + 快照冷热分离降本 30%
Kafka分区数与保留时长保留期与磁盘挂钩
云托管检索兼容 ES API 的版本差异锁定版本避免锁定厂商

§ D21阶段 KPI 卡

DATA阶段 KPI 卡验收口径
KPI口径目标
检索 P95APM 采样< 200ms
索引延迟端到端< 1 分钟
一致性夜间对账差异 = 0
相关性人工评估≥ 80%

§ D22交接清单

DATA交接清单换人不换知识
交接项载体验收
索引设计文档Wikimapping 与分词依据可查
管道监控大盘监控平台延迟/积压可观测
回补脚本Git全量重建演练通过
相关性评估记录归档每周评估有台账

§ D23演进检查点评审

DATA演进检查点评审走向 08 章前
检查项达标标准结果
对账零差异夜间全量对账通过通过/不通过
幂等消费验证重放一天数据一致通过/不通过
相关性评估Top10 人工评估 ≥ 80%通过/不通过
快照恢复演练ES 快照恢复成功通过/不通过

§ →继续演进