大规模构建服务拓扑:架构、挑战与经验教训
Netflix 开发了一项实时服务依赖图谱,以协助工程师排查问题并理解其分布式架构。该系统将 eBPF 网络流、IPC 指标和分布式追踪整合为独立的图层。初始版本虽在本地运行正常,但在生产环境中暴露出显著的扩展挑战,包括 Kafka 消费者延迟和内存问题。核心架构决策是采用以流式处理为首的方法,提供近乎实时的拓扑更新,而非每小时一次的批处理。这对于事件响应和实时事件监控至关重要。为每秒处理数百万条流记录且无数据丢失,系统采用带背压机制的反应式流,当下游系统过载时,向上传组件发出信号以减缓处理速度。这确保了优雅降级,而非崩溃或数据丢失。该架构采用多层设计,对网络、IPC 和追踪层实施物理存储隔离,从而实现独立优化。网络层的摄入依赖一个三阶段分布式聚合管道:第一阶段从 Kafka 执行初始聚合;第二阶段将网络中间件(如负载均衡器)解析为直接的应用层依赖;第三阶段负责最终聚合、与外部数据融合以及持久化到图数据库。三阶段管道是从初始两阶段设计的关键演进。初始设计因在中间件解析和富集过程中数据集中而导致“热点节点”问题。通过将职责分散到三个阶段,可均衡工作负载,避免瓶颈。此外,由于 gRPC 在大规模场景下存在性能开销,消耗过多 CPU 和内存,各阶段间的通信改用服务器发送事件(SSE)替代了 gRPC。