可观测、安全、数据与内部开发者平台设计¶
设计一个多区域、多租户统一可观测平台¶
需求澄清
- 覆盖 metrics、logs、traces、profiles1;生产与非生产租户隔离,支持从 SLO2 告警跳转到 trace/log/profile。
- 目标规模:2,000 个服务、30 万 metrics samples/s、2 TB logs/day、15 万 spans/s、2 万 profile samples/s;峰值按 3 倍设计。
- 核心指标端到端可见延迟小于 60 秒、日志/trace 小于 3 分钟;区域级摄入可用性 99.95%。后端不可用不能影响业务。
- 热查询 7~14 天,安全日志 180 天不可变,普通日志 30 天,trace 正常样本 7 天/错误样本 30 天;数据驻留禁止跨指定区域。
估算
日志原始约 2 TB/day,按压缩 4:1、30 天约 15 TB,再加索引/副本和 30% 余量;安全流单独按不可变策略核算。trace 若平均 1.2 KB/span,则约 15.5 TB/day 原始,必须在边缘采样;在设计容量内,对完整到达 tail sampler3 的错误/高延迟 trace 设 100% 采样目标,正常 trace 采 1%~5% 后再估算。SDK/agent 预先丢 span、trace 不完整、队列溢出和超容量丢弃不能被“100%”掩盖,须另算损失预算与峰值缓冲。指标规模要按活跃 series、scrape interval 和副本因子计算,先设置每服务 series 预算。网络按三倍峰值及 agent→区域 gateway 计算,不让原始信号跨洲回传。
相关技术说明
采用“节点/Pod agent + 区域 gateway4 + 每信号专用后端”的分层。Agent 做本地发现、初步脱敏和有界缓冲;Gateway 做资源属性规范、租户认证、限额、批处理、trace 一致路由/尾采样和出口。Metrics 采用区域时序集群与全局查询层,logs/traces/profiles 用对象存储为持久层、区域索引为查询加速。控制面管理租户、配额、schema、留存、访问和 dashboard-as-code,不位于业务数据热路径。
架构与数据/流量路径
- SDK/Prometheus exporter 产生信号,异步送到节点 agent;SDK 队列满时按“正常 trace→调试日志→核心日志/指标”的优先级降级,绝不阻塞请求线程。各级 drop/reject/incomplete 计数独立上报到旁路健康信号,避免主遥测链失效时连缺口也不可见。
- Agent 使用 mTLS5 送入本区 gateway。Gateway 校验 workload identity,补充 service/environment/region/version,删除敏感属性,按租户限流;同 trace 经一致性哈希进入 tail sampler。
- Metrics 写双可用区 ingesters/WAL 后落长期对象存储;日志先 durable queue,再写压缩 chunk 与索引;trace/profile 同样分离 blob 与索引。安全审计流旁路到独立不可变存储,普通平台管理员无删除权。
- 查询经统一门户和租户授权路由到本区 query frontend;全局视图只聚合允许跨区的 SLI/元数据。Exemplar/trace ID 实现跨信号跳转,查询有配额、缓存和扫描上限。
HA 与 DR
Agent 有磁盘水位和短时缓冲;Gateway 跨三个可用区、无共享单点,配置缓存在本地。对象存储为持久层,索引可重建;区域后端故障时先保核心指标/安全日志,正常 trace 降采样。区域灾难下遵守驻留规则:允许的租户异步复制到配对区域,RPO 由队列/对象复制实测;禁止跨区者接受该区不可查询但业务仍运行。季度演练后端断连、单区丢失、对象存储限流和恢复重建,记录实际 RTO/RPO。
安全与合规
工作负载短期身份、传输/静态加密、每租户索引和查询授权;采集端敏感字段白名单/哈希,日志正文访问需 JIT 与审计。控制面和数据面账号分离,安全日志 WORM、密钥按租户/区域管理。查询防止超大扫描与正则 DoS,导出有限速和审批。数据保留、删除请求、法务保全均有可审计工作流。
可观测性、发布与运维
平台自监控接收/拒绝/丢弃、队列、采样决策、索引新鲜度、查询 p95、存储增长、每租户成本和“预期信号缺失”。SLO 以采集接受、可查询时延和查询成功定义。Collector/规则/后端升级先回放流量,再单租户/单区金丝雀;语义约定版本化,双写期对账且有截止。告警规则通过历史回放和合成事件测试,平台值班有降级矩阵与状态沟通。
权衡
- 全量 trace 诊断最好但成本不可接受,采用错误/尾延迟优先和少量正常基线;采样率影响统计时需加权。
- 区域自治提升韧性和驻留合规,却增加重复基础设施与全局查询复杂度。
- 对象存储降低长期成本但查询较慢,以热索引和缓存折中;不能把所有字段建索引。
- 统一 schema 提高关联,但升级会影响大量服务,因此允许兼容期而不无限保留旧字段。
实践经验
复合落地场景中,首版把所有日志送中央区域并默认索引全部标签,促销时跨区带宽、基数和账单同时失控,中央故障还使各区观测全盲。改造先将摄入和存储区域化、限制用户 ID 标签、保留安全流,再逐步上线尾采样与冷热分层。历史事故回放用于验证削减后仍能回答影响面、版本和依赖问题。代价是全局任意查询受限,但通过跨区 SLI 聚合、按审批的联邦查询和明确数据驻留换取可控风险。
设计一套面向 1,000 个仓库的安全软件供应链平台¶
需求澄清
- 支持容器、语言包和 IaC;外部 fork PR、内部开发构建、发布构建三种信任级别隔离。
- 每日约 5 万次 CI、2,000 次候选发布、500 次生产部署;发布控制面 99.95%,普通构建排队 p95<5 分钟。
- 生产只运行可追溯到受保护 commit、受信 builder 的 digest;提供 SBOM6、漏洞判断、provenance7、签名、准入、审计与 30 分钟紧急修复路径。
- 多云/多集群,控制面故障不得让已运行服务中断;需支持历史制品回滚和监管取证。
估算
若 10 次构建/s 的峰值持续覆盖平均 12 分钟执行时间,Little 定律给出约 10×720=7,200 个并发作业;每作业 2 vCPU/4 GiB,对应约 14,400 vCPU 和 28,800 GiB(约 28.1 TiB)内存。实际采购还应按峰值持续时间、目标排队 p95、Runner 启动/系统开销、利用率和故障余量校准,并按信任池、队列与 Spot/按需组合分配。制品平均 400 MB、日新增 2,000 个发布制品约 0.8 TB,保留和跨区复制按去重层与生命周期估算;SBOM/provenance 相对小但审计期更长。签名/验证峰值按部署与扫描重试放大 5~10 倍,透明日志/身份提供方故障缓存需容量。
相关技术说明
信任链从代码仓库身份开始,经隔离 builder 生成不可变制品、SBOM 与 provenance,再由短期发布身份签名,registry 保存 digest 和附件,环境晋级不重建;部署准入验证 issuer、subject、builder、source revision 和策略。SBOM 负责组成,持续漏洞服务按新情报重评;provenance 负责来源。SLSA8 要求按采用版本逐条映射,平台输出证据而非笼统“已合规”。
架构与数据/流量路径
- SCM webhook 先验证签名并进入事件总线。编排器读取仓库策略和信任等级:fork 使用无 secret、无内网的一次性池;内部分支池只有读权限;受保护发布池使用独立账号/节点和环境审批。
- Builder 拉取固定 digest 的工具链与依赖代理,网络默认拒绝,只允许声明源;缓存按信任域与内容摘要隔离。构建后测试/扫描最终制品,生成 SPDX/CycloneDX SBOM 和 in-toto provenance,所有输出绑定 digest。
- 发布工作流用 OIDC token 向 STS 换短期 registry/KMS 权限,签名并写透明/审计记录;registry 禁止覆盖发布 tag。晋级服务只复制已验证 digest 和证明,不重新构建。
- 策略服务在 PR/构建阶段提前反馈,集群准入最终校验。策略决策记录规则版本、证据、例外 ID;运行时资产系统把 digest 与集群/服务关联,用于新 CVE 影响定位和召回。
HA 与 DR
事件总线和元数据数据库跨可用区,工作流幂等、可续跑;Runner 是一次性的可替换数据面。registry 与证明跨区复制,签名密钥使用多区 KMS 或 keyless 身份,但信任根备份和恢复独立演练。准入组件每集群多副本并缓存近期信任元数据:未知新制品在验证控制面故障时 fail closed,已验证运行/回滚集合可按短期缓存继续部署。灾备目标示例为发布元数据 RPO<5 分钟、控制面 RTO<30 分钟,并通过区域切换实测。
安全与合规
人类采用 SSO/MFA/JIT,工作负载用 OIDC;生产发布角色精确绑定仓库、分支、workflow 和环境。Runner 禁特权、宿主 socket/元数据和跨作业持久盘,出站分层。签名 KMS 与 CI 管理权限职责分离;安全审计写独立不可变账号。依赖代理做 allowlist/隔离和恶意包检测。例外精确到 digest/规则/环境,有业务接受、补偿控制和到期日;break-glass 双人批准且实时通知。
可观测性、发布与运维
监控排队/构建时长、失败分类、Runner 残留检查、签名/证明成功、准入拒绝、漏洞覆盖、例外老化、registry 不可变违规和每构建成本。核心 SLI 是“受保护 commit 到可验证制品”和“获批 digest 成功部署”,而非 CI HTTP 200。Builder 镜像、策略与验证器先影子/金丝雀,策略执行 audit→warn→enforce;升级用已知好/坏制品回归集。定期攻击演练缓存投毒、PR 取 secret、错误 subject 签名和 IdP/registry 故障。
权衡
- keyless 减少密钥保管但依赖 OIDC/证书/透明服务;KMS 更可控却有长期密钥与轮换责任,可按环境组合。
- 每次无缓存构建隔离最佳但昂贵,采用只读内容寻址缓存且按信任域隔离。
- fail closed 提升安全却可能阻断紧急修复,所以预验证回滚集合和受审计快速流水线必须先存在。
- 多云统一策略提高一致性,但云能力差异通过 profile 表达,不构建过度抽象。
实践经验
复合落地通常从“已有扫描但可手工推 tag”开始。迁移先盘点运行 digest、建立受信历史回滚集合,并在 audit 模式发现错误身份和缺证明;再按非生产、新服务、存量服务逐步强制。一次验证服务故障曾暴露所有部署都 fail closed 的可用性风险,于是加入签名信任缓存、已验证回滚集合和双人应急流程。这个折中不允许未知制品上线,但让可靠的已知版本能恢复服务。
设计一个支持多租户、成本治理和 GPU 工作负载的内部开发者平台¶
需求澄清
- 服务 500 个团队、8,000 名开发者,提供 Web API、事件消费者、批处理和 GPU 训练/推理四类 Golden Path;覆盖开发到生产。
- 自助创建环境、数据库、消息 topic、可观测与部署,低风险请求 30 分钟内完成;平台控制面 99.95%,已运行工作负载不得依赖门户持续可用。
- 多租户按普通、敏感、强监管三档隔离;所有资源有 owner/成本中心/生命周期,支持预算、单位成本和闲置回收。
- GPU 资源稀缺,需要公平队列、优先级、Spot/按需组合、数据权限和模型 lineage;平台 API 可供 CLI、门户和自动化共同调用。
估算
假设每日 10 万次门户/API 读取、5,000 个变更工作流,峰值约 30 请求/s,但长流程可达小时,故按队列/并发而非 HTTP QPS 设计。若每个工作流平均 12 步、每步至少一次执行,日任务约 6 万并留 5 倍重试峰值。资源目录约百万实体/关系,变更事件远大于全量扫描。GPU 以稳定推理基线、弹性训练峰值和队列等待目标估算:关键推理保留按需/MIG 容量,训练使用多型号池和可中断容量,按每 GPU 小时有效样本/token 计成本。
相关技术说明
门户只是体验层;核心是版本化平台 API、服务目录、异步工作流和各能力 provider。用户提交声明式意图,平台做预览、策略、成本估算、审批、调和与验收,底层云/Kubernetes/数据库仍是运行状态权威。多租户隔离按风险选择 namespace、节点池、账号或集群,不以单一 namespace 覆盖所有威胁。GPU 调度除了设备数量,还需型号、显存/MIG、拓扑、gang scheduling、数据位置与公平队列。
架构与数据/流量路径
- 门户/CLI 经 SSO 调用 API Gateway,鉴权后提交带 idempotency key 的资源 spec;API 写请求数据库与 outbox,立即返回 workflow ID。
- 编排器从事件总线取任务,执行策略和成本预览。标准低风险 profile 自动批准,高成本/生产数据/公网/强监管进入条件审批。每步以短期 workload identity 调用 provider,记录外部资源 ID、状态和补偿;失败可续跑或人工接管。
- Reconciler 持续比较 spec 与实际云/Kubernetes 状态,发现漂移但按策略决定告警或修复。目录从仓库、组织系统和 provider 摄取实体/关系,显示 owner、SLO、runbook、部署 digest、成本与 lineage,不复制全部瞬时状态。
- 普通计算通过配额、优先级和公平队列调度;GPU 任务声明型号/切片/拓扑与 checkpoint 能力。推理保留最低容量,训练按团队预算和权重排队,可中断任务优先 Spot 并监听回收通知。数据访问由短期身份与数据集 ACL 控制,训练输出登记模型/数据/代码 digest。
- 成本管道导入云账单、Kubernetes 分配与业务驱动量,按 direct/shared/unallocated 规则 showback;预算和异常事件回写门户。生命周期控制器先通知、软停用、备份/依赖检查,再回收闲置非生产资源。
HA 与 DR
API、队列、工作流数据库跨三个可用区;outbox 防请求已提交但事件丢失,步骤幂等防重复创建。Provider/云限流时公平排队和退避,浏览器超时不会触发第二份资源。平台控制面不可用时已运行服务、集群数据面和数据库继续工作;仅新建/变更受影响。数据库做 PITR 与跨区副本,目录可从源重建,工作流状态 RPO<5 分钟、RTO<30 分钟。季度演练区域切换、队列恢复、重复消息和 provider 长时故障。
安全与租户隔离
身份按人/工作负载分离,JIT 和 break-glass 有审批与审计;平台不保存长期云管理员 key。普通租户共享集群但默认拒绝网络、RBAC、配额与独立 secret;敏感租户独立节点/密钥,强监管使用独立账号/集群/日志域。策略分硬护栏、默认值、可调范围和限时例外。插件/provider 最小权限,目录读取不等于底层写权限。模型、数据、prompt 与审计日志按分类脱敏和保留。
可观测性、发布与产品运营
SLI 覆盖请求接受、工作流成功/时长、队列年龄、状态新鲜度和关键 provider;按租户展示拒绝、配额与成本。workflow/resource/change ID 串联 trace、日志和审计。平台 API/工作流/模板版本化,先内部团队、非生产、5% 租户灰度;破坏性迁移提供兼容期、批量 PR 和回退。产品指标使用关键任务成功、首次上线时间、采用/留存、支持请求、DORA 趋势、DevEx 和运行 SLO,禁止按个人点击/提交排名。
FinOps 与容量治理
资源创建前显示月成本区间和配额影响;运行时以 CPU/GPU 小时、存储、传输及每成功交易/训练样本/token 单位成本监控。稳定基线可用承诺,弹性训练用多池 Spot,关键推理有按需保障。Rightsizing 先建议、后 5% 自动灰度,SLO 恶化回滚。共享成本规则透明且版本化;先 showback 建立信任,再决定 chargeback。
权衡
- 集中平台降低认知负担,却成为高影响控制面,因此数据面解耦、SLO 和降级优先于门户功能数量。
- 强隔离更安全但成本高,按威胁/合规分层,不为所有开发环境建独立集群。
- GPU 共享提高利用率但性能隔离更弱;关键低延迟推理用整卡/MIG,容错训练可 time-slice/Spot。
- 自动回收节省费用但可能误删,采用 owner 通知、依赖检查、软删除和恢复窗口。
实践经验
复合生产落地中,第一版门户同步串联多个云 API,超时重试产生重复数据库;GPU 又按先到先得被单一团队长期占满。改造先引入 workflow ID、异步幂等步骤和软删除,再用配额、项目权重与推理保障池治理 GPU。平台采用没有靠行政命令,而是先解决数据库申请和部署两个最大等待点。代价是工作流状态机与公平调度更复杂,因此优先支持四类高频路径,长尾通过受审计 escape hatch,并用任务成功、队列时间、SLO 和单位成本持续决定下一步投资。
-
metrics、logs、traces 和 profiles 分别表示聚合指标、事件日志、调用链路与性能剖析数据,是可观测性的四类常见信号。 ↩
-
SLO 是 Service Level Objective(服务等级目标),规定服务在一段时间内应达到的可靠性水平。 ↩
-
尾采样在 trace 基本完成后根据错误、延迟等最终结果决定是否保留,诊断价值高但需要缓存和一致路由。 ↩
-
agent 靠近工作负载采集本地信号,gateway 集中完成批处理、路由、租户控制和统一出口。 ↩
-
mTLS 是 Mutual TLS(双向 TLS),客户端和服务端都出示并验证证书以相互认证。 ↩
-
SBOM 是 Software Bill of Materials(软件物料清单),列出制品包含的软件组件与版本。 ↩
-
provenance(来源证明)记录制品由什么源码、身份和构建过程生成。 ↩
-
SLSA 是 Supply-chain Levels for Software Artifacts,一套逐级提高软件供应链完整性的规范框架。参见 SLSA 官方规范。 ↩