题干与适用场景
这是平台与系统设计题。目录保存组件、系统、域、API、负责人和依赖关系,数据来自代码仓库、部署系统与人工声明。它服务发现、事故响应和治理,不应成为另一套无法维护的手工 CMDB。
面试官考察点
- 能否把“找服务负责人”拆成实体模型、来源可信度和可搜索体验。
- 能否处理声明式元数据与自动扫描冲突、过期和删除。
- 能否说明依赖图查询、权限隔离、租户边界和新鲜度 SLO。
- 能否在平台价值与维护成本之间做渐进式上线取舍。
回答前需要澄清的问题
先确认组件数量、每日变更量、允许的元数据延迟、查询峰值、是否跨组织或客户隔离、依赖关系是静态还是运行时观测,以及谁有权声明负责人。若目录用于高风险事故决策,就需要来源等级、过期标记和审计;若只是开发导航,可以先接受较宽松的新鲜度。
30 秒回答框架
我会把目录设计成声明式实体图:组件、系统、域、API、团队和关系都有稳定标识。仓库中的目录文件是事实入口,部署和运行时信号补充版本与依赖,采集器把事件写入版本化存储。查询服务提供负责人、反向依赖和搜索,并显示来源与更新时间。冲突不静默覆盖,而是按来源优先级生成待处理状态;权限在实体和字段层执行,过期实体保留历史但从默认结果隐藏。
分步骤深入解答
1. 建模实体与关系
可借鉴 Backstage 的实体模型:组件属于系统,系统属于域,API 可由组件提供或消费,团队负责组件。每个实体使用名称、命名空间和版本形成稳定键,关系边带来源、发现时间和置信度。负责人不是自由文本,而是可解析的团队主体;否则事故通知无法自动路由。
2. 设计容量与 SLO
假设 10,000 个实体、每个平均 20 条关系,图规模约 200,000 条边;每天 5% 实体变更约 500 次导入。目录写入可采用事件队列,查询读模型缓存负责人和邻接索引。目标可设为导入事件数分钟内可见、搜索 P95 小于 300 毫秒、依赖查询深度三层在一秒内完成;高风险场景另外显示数据年龄。
3. 设计导入与事实优先级
仓库声明文件提供意图和负责人,部署系统提供实际版本与环境,运行时遥测提供近期调用边。采集器为每次导入保存来源、提交版本和校验结果,使用幂等键避免重复事件。不同来源冲突时按策略合并:代码声明不能被一次运行时观测改写负责人,运行时边也不能证明不存在的依赖。冲突进入队列并通知拥有者。
4. 保证新鲜度和删除语义
每个实体保存 lastSeenAt、声明版本和过期策略。长时间没有来源更新时标记 stale,默认搜索隐藏或降低排序,但保留历史依赖供事故回放。仓库删除、服务下线和临时环境要有不同状态;立即删除会破坏历史,永不删除会污染搜索。周期性 reconciler 负责重试失败导入和清理孤立关系。
5. 查询、权限与安全
提供按名称、团队、域、环境、标签和负责人搜索;依赖查询限制深度与结果数,避免图遍历拖垮服务。实体和字段附带组织范围,调用者只能看到授权范围;敏感仓库路径、内部端点和客户租户信息按字段脱敏。所有负责人变更和权限拒绝写入审计事件,不能只依赖前端隐藏。
6. 渐进式交付与替代方案
第一阶段只覆盖关键服务和负责人搜索,要求每个实体有来源与新鲜度;第二阶段加入依赖图、部署版本和事故通知;第三阶段再接入自动治理。若组织没有稳定的声明习惯,可以先从仓库模板和 CI 校验开始,而不是一次建设全公司目录。Amazon PM 指引强调客户问题与能力证据,平台采用应由搜索成功率、事故定位时间和元数据维护率证明。
高质量示范回答
我会把目录当成带来源和新鲜度的实体图,而不是手工表格。组件、系统、域、API、团队和关系都有稳定键;仓库声明定义意图,部署系统补充环境版本,运行时信号补充近期依赖。采集器事件化、幂等写入并保留提交版本。查询读模型提供负责人、反向依赖和搜索,依赖遍历限制深度。冲突进入待处理队列,过期实体标记 stale,历史保留但默认结果隐藏。按组织和字段授权,审计负责人变更。先用关键服务验证搜索成功率、事故定位时间和维护率,再逐步扩展。
常见错误
- 把目录做成手工 CMDB → 很快失真 → 以仓库声明和自动采集为事实入口。
- 只存负责人字符串 → 无法通知或校验离职团队 → 引用可解析的团队主体。
- 用最新来源覆盖一切 → 运行时噪声会改写治理事实 → 给来源分级并保留冲突状态。
- 删除下线服务 → 事故回放失去依赖 → 用生命周期状态和历史版本表达删除。
- 无限制遍历依赖图 → 查询会放大到整张图 → 限制深度、结果数并使用邻接索引。
追问及应对
负责人声明与部署数据冲突怎么办?
把两者建成不同来源的属性,按字段策略合并并显示冲突,而不是覆盖。负责人字段以受控声明为准,部署字段以部署系统为准;冲突通知双方并等待修正提交。
如何处理短命预览环境?
实体带环境与过期时间,预览环境默认低权重并自动归档。若它仍被生产依赖,运行时边可提升告警等级,但不能跳过负责人和租户授权。
目录本身不可用时如何救火?
为关键服务保留可导出的静态快照和最近一次负责人缓存,并在页面显示数据时间。事故工具可以读取快照,但不能把过期快照伪装成实时事实。
如何防止团队把目录当成审批门?
先把价值限定为发现和事故响应,指标关注搜索成功与定位时间。只有当元数据稳定、权限清晰后,才把目录接入治理检查;治理失败应给出修复路径,不应阻断所有发布。