我会写得比常见那种「设计一个 URL shortener」更具体点,因为我觉得 PIMCO 的 system design 面试和大厂流程差别挺明显,大家应该知道自己会面对什么。
我面的是 senior infrastructure 岗,大概 L5 对标。设计轮 60 分钟,一个面试官,自称是 data platform 侧的 tech lead。
题目:设计一个实时投资组合风险聚合系统。你有几百个 portfolio,每个持有上千个 position,覆盖 fixed income、equities、derivatives。需要在 market data 持续流入时,持续计算所有 portfolio 的风险指标,比如 VaR 和 duration。portfolio manager 需要低延迟读取,价格跳动带来高写入吞吐。
这不是标准的分布式系统设计题,更贴近 PIMCO 实际在做的事。
他不要求我懂 VaR 的具体数学,但要求我能推理:事件流(Kafka 很自然就提到了)、内存聚合 vs 持久化计算、market data 乱序到达时的一致性取舍,以及怎么分区数据,避免热 portfolio 把冷 portfolio 饿死。
我画了一个比较标准的事件驱动架构:price ticks 进 Kafka,一组 stateful consumers 更新 portfolio snapshots,一个由 Redis 支撑的低延迟读层给 PM dashboard,用一条独立的 batch 路径做 end-of-day 对账。
他追问了故障模式:如果某个 consumer 在市场剧烈波动时跟不上会怎样?我们聊了 lag 监控、dead letter queues,以及你是选择 replay 还是近似。
看起来重要的点:我一开始就量化了延迟目标(PM dashboard 要 sub-second),我承认自己在做假设,他 push back 时我也没变得防御。
不重要的点:知道 PIMCO 内部的具体工具。全程都在看推理。
我希望当时多准备一点的:cache invalidation 模式,以及在价格变化比计算更快的情况下,你到底要怎么处理 stale data。我在那里有点翻车。