
Netflix 实现了一个预写日志(Write-Ahead Log,WAL)系统,以增强其数据平台的韧性。WAL 旨在解决 Netflix 面临的各种挑战,包括数据丢失、副本系统熵、多分区故障和数据损坏。该系统在将数据库变更应用到下游服务之前,会将它们捕获到一个持久化的日志中,确保即使在中断期间也能保持一致性和可恢复性。
Netflix 的 WAL 服务架构是模块化和可插拔的。每个变更都会被追加到日志中,该日志充当单一的事实来源,然后异步应用到目标数据库。系统将消息生产者与消息消费者分开,允许多个下游服务独立消费同一个日志。
Netflix 使用 SQS 和 Kafka,并默认启用死信队列,以确保可靠的交付和错误处理。该设计支持目标灵活性,允许将变更路由到不同的存储后端或处理管道,并与控制平面网关以及Netflix的数据网关集成,用于集中的数据库访问、配置和监控。
它可以添加额外的功能,如二级索引、延迟队列和通用复制服务,而不影响现有消费者。Netflix 工程师将这种方法描述为减少分布式数据库中的熵和最小化不必要的重试或冲突。
WAL 的架构(图片来源Netflix技术博客)
Netflix 的 WAL 部署模型旨在实现可扩展性和运维简便性。该服务作为一个分布式系统运行,具有多个副本,自动在节点间平衡负载,同时保持强一致性。配置更改,如启用延迟队列或添加新的下游消费者,通过集中化的控制平面进行管理,无需代码更改,允许快速迭代和安全实验。
WAL 部署模型(图片来源Netflix技术博客)
根据 Netflix 工程团队的说法,Netflix 的 WAL 使用涵盖了多个关键场景。延迟队列允许延迟处理变更,以适应下游系统的可用性或节流。跨区域复制确保多个地理区域之间的一致性,支持灾难恢复和高可用性。多表变更允许对多个数据库表进行原子更改,保持复杂工作流程的一致性。这些用例展示了 WAL 在支持高吞吐量、弹性数据管道中的作用。
根据 Netflix 工程师的说法:
可插拔架构以及通过配置而非代码更改支持不同目标的能力,是 WAL 在各种用例中的多功能性和有效性的关键。
整个行业都在出现类似的模式。在2025年旧金山QCon大会上,DoorDash将展示其预写意图日志(Write-Ahead Intent Log),旨在实现高效的大规模变更数据捕获(Change Data Capture)。该方法将写入与下游消费者解耦,实现了高吞吐量的近实时处理,每秒每表可高达一百万次写入,尾部延迟不到一秒。
早些时候,在 2024 年旧金山 QCon 大会上,Prudhviraj Karumanchi和Vidhya Arvind讨论了WAL如何提高分布式系统的持久性并减少熵,强调了它在维护复杂架构中一致状态的作用。
查看英文原文:From Outages to Order: Netflix’s Approach to Database Resilience with WAL








评论