feat: 优化新版主机指标渐进式加载 --story=137152595 - #11989
Open
chenguo367 wants to merge 11 commits into
Open
Conversation
close #1010158081137152595
close #1010158081137159376 ## 改造范围 - 保留现有 search_host_metric 接口,新增受 scope 约束的主机指标快照创建与轮询接口。 - 使用显式共享 Redis、singleflight、按业务并发租约、不可变压缩 section blob 和专用 Celery task。 - 普通业务快照不携带全量 host_id target;告警段使用 host_id、IPv4、IPv6 三路互斥 composite 聚合和 CMDB 白名单映射。 - 每次返回数据前重新校验权限、scope、时间锚点和主机集合;分享态仅允许 create/retrieve。 ## 默认状态与启用前门禁 ENABLE_HOST_METRIC_PROGRESSIVE 默认关闭。启用前必须完成以下真实环境压测并记录结论: 1. 真实 ES composite:验证 20,000 主机业务下的分页总量、总耗时、超时和索引兼容性。 2. 真实 Redis:验证 Web 与 Celery worker 使用同一 Redis alias,以及 singleflight、容量租约、任务死亡和 Redis 异常恢复。 3. 20,000 主机内存:验证 section blob 大小、压缩耗时和 Web/worker Pod RSS 硬上限。 4. 50 客户端轮询:验证 data-bearing/READY 轮询中的 CMDB scope 解析、host hash 和 gzip 开销。 任何门禁未通过均保持开关关闭,并继续使用旧的分页指标链路。 ## 关联 PR PR-C #11984 负责前端渐进式接线,依赖本 PR 的快照协议。两者均以 acceptance/host-metric-progressive-20260814 为 base,需在验收分支组合回归后再统一面向 master 交付;本 PR 不移除旧接口。
close #1010158081137159498 ## 改造内容 - 主机基础列表与全量指标快照并发加载,统一采用双路渐进模式,不按业务规模分支。 - 快照运行期间仅补齐当前页指标;页级结果只作为 overlay,不参与全局排序、筛选和统计。 - 四段快照全部成功且主机集合哈希一致后原子替换全量指标,并清理页级 overlay。 - 快照未就绪前禁用指标快捷卡、指标排序和指标筛选,基础字段检索与排序保持可用。 - 补齐 epoch、快照重试、页面卸载、翻页交错和旧响应回写等竞态保护。 ## 合入顺序与开关 - 依赖后端快照 API PR-B;请先将后端路由合入验收分支,本 PR 暂不先行合入。 - 功能开关默认关闭;部署侧需由后端 context 将 `ENABLE_HOST_METRIC_PROGRESSIVE` 注入为 `window.enable_host_metric_progressive` 后才会启用新链路。 - 开关仅用于整条渐进链灰度和回退,不引入大小业务分支。 ## 验证 - `node --test tests/host-*.test.cjs`:120/120 通过。 - 目标文件 ESLint、Biome、Stylelint、Prettier 与 `git diff --check` 通过。 - 全量 TypeScript 检查仍受仓库既有 `@vitejs/plugin-vue-jsx` moduleResolution 配置错误阻断;报错仅位于三个既有 build 脚本。
…etric-progressive-20260814
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
close #1010158081137152595
方案
bk_host_id数量分流:少于 2,000 台沿用原一次性全量指标请求,达到或超过 2,000 台才启动页级指标与全业务快照。READY只表示全业务指标覆盖完整,不再作为功能开关。部分分区失败或 UQ partial 时进入DEGRADED,保留并返回成功数据;只有没有任何可用分区时才进入FAILED。DEGRADED并继续返回,零分区才EXPIRED;该语义覆盖任务循环、轮询和最终 READY 提交三条超时路径。DEGRADED在 scope 主机集合变化时可转EXPIRED,剩余可用分区全部缺失或损坏时可转FAILED;后续 create 不复用 FAILED/EXPIRED 指针。ENABLE_HOST_METRIC_PROGRESSIVE控制,默认关闭;小业务即使开启也不会创建快照或占用后台容量。验证
tests/host-*.test.cjs126/126 通过,覆盖部分数据立即排序/筛选/统计/搜索、未知值与真实零值、覆盖率、手动重试及页请求与快照竞态。git diff --check通过;ESLint/Biome 仅保留修改前已有的命名与 skeleton index-key 警告。阈值依据
通过主机规模运营分布选择 500、1,000、2,000、5,000 档代表业务,并以最近 3 分钟单磁盘指标查询做初步对拍:500/1,000 档低于 2 秒,约 2,000 档进入 3.6 秒过渡区,约 5,000 档达到 5 秒,因此默认取 2,000。运行时只使用本次基础主机接口返回的唯一主机数,不依赖运营指标。
启用前门禁
本 PR 交付默认关闭的暗代码,不代表生产性能验收完成。开启前仍需在真实大业务验证:ES composite 分页与告警分区总耗时、2 万主机快照时延及 Pod RSS/Redis 容量、50 客户端轮询负载、真实 Redis singleflight、worker 异常恢复,以及 2,000 台分流点附近的端到端页面收益。任一门禁不通过均保持开关关闭并沿用旧链路。