穿越虫洞 - 学习 Facebook Pub/Sub 系统设计
Wormhole 是 Facebook 发布的 pub/sub 系统,它的设计目标是实时地,可靠地,将一个数据库的数据发送到多个订阅者服务那里去。订阅者服务可以是缓存(要更新数据),服务(要重建索引或更新数据),数据仓库(灌数据进 Hadoop, Hive)。
这个系统有三个核心组件:
- Producer: 一个 library,内建在应用方的程序里面。
- Publisher: 持续读 bin log 数据,转为实时流发送到别的系统去。
- Consumer
这个系统有一些有用的特性,例如:
- Shard 的数据库可以并行地运行虫洞 publisher
- 支持从检查点重新开始产生流,做故障恢复
- 可靠的有序的递送,消息至少会被发送一次,最近更新的数据会被更晚送达。
- 只要是 bin log 中出现的数据,publisher 就会递送它。
- 基于 stream,延迟很低。
- 高效,把数据合并进多个流中。
这个系统要每秒处理一千万条消息,面临系统失效的挑战也很高,所以和监控系统,capacity 预计等等都很完善。