今年早些时候我走了 Splunk senior 的 SWE loop,目标是他们可观测性平台团队里一个对标 L5 的岗位。专门分享 system design 这轮,因为我准备时几乎找不到关于 Splunk 的具体信息。
这轮 60 分钟。面试官给的题大概是设计一个大规模日志聚合与搜索 pipeline。考虑到 Splunk 实际在做什么,这很合理。所以如果你面 Splunk,要想想这个领域,不算意外。
他们关心的点,大概按追问顺序是:
先看 ingestion 路径。 你怎么处理日志生产方的速率波动?burst buffering、backpressure、at-least-once vs. exactly-once 交付。我讲了 Kafka 风格的队列,他们继续追问 partition 策略和 consumer lag 的处理。
索引和搜索延迟。 这里开始变得很贴他们的世界。他们想知道你会怎么给日志文本搜索做 inverted index,以及在 index 写入速度和查询延迟之间怎么取舍。比如按时间分桶的索引、压缩、bloom filters。你如果了解 Elasticsearch 底层怎么做,基本能直接对应上。
存储分层。 hot/warm/cold 数据迁移。他们希望你能给出具体数字:什么时候 tiering、访问模式差异是什么。
多租户。 这点有点出乎我意料。怎么在共享基础设施里按 tenant 隔离数据,同时让成本可预期?更像是「你有没有想过」的检查,不是深挖。
节奏很协作。面试官不是想坑你,而是在看你怎么处理模糊问题,以及你会不会主动推动设计还是等提示。我一开始必须问清规模和一致性要求,否则他们不会主动给。
有一点:别带着一个通用分布式系统设计进去。把它锚定在日志管道、事件流、时序数据。他们一眼就能看出来你是不是在画通用的 boxes-and-arrows。