面试题答案
一键面试刷盘策略
- 同步刷盘
- 原理:当生产者发送消息到Broker时,Broker会等待消息被持久化到磁盘后才向生产者返回确认响应。具体过程是,消息先写入PageCache,然后通过调用fsync等系统调用,将PageCache中的数据强制刷入磁盘。
- 对性能影响:同步刷盘会严重影响系统性能,因为每次消息写入都需要等待磁盘I/O操作完成。磁盘I/O速度相对内存操作非常慢,这会导致生产者发送消息的响应时间变长,从而降低了整体的消息发送吞吐量。
- 对可靠性影响:可靠性极高,只要Broker返回成功响应给生产者,就意味着消息已经被安全地存储到磁盘上,即使发生机器宕机等故障,消息也不会丢失。
- 异步刷盘
- 原理:生产者发送消息到Broker后,Broker会将消息先写入PageCache,然后立即向生产者返回确认响应,之后由专门的刷盘线程将PageCache中的消息异步刷入磁盘。
- 对性能影响:由于不需要等待磁盘I/O完成就返回响应,异步刷盘极大地提高了系统性能,生产者可以快速得到响应并继续发送下一条消息,消息发送吞吐量大幅提升。
- 对可靠性影响:可靠性相对同步刷盘稍低。因为如果在刷盘线程将消息刷入磁盘之前,机器发生故障,PageCache中的数据可能会丢失,从而导致部分消息丢失。但在正常情况下,异步刷盘也能保证大部分消息的可靠存储。
HA机制(高可用机制)
- 主从架构
- 原理:RocketMQ采用一主多从的架构模式,主Broker负责处理消息的读写操作,从Broker通过拉取主Broker的数据来保持与主Broker的数据同步。当主Broker发生故障时,从Broker可以被选举为新的主Broker,继续提供服务。
- 同步复制:
- 原理:主Broker在接收到消息并写入本地后,会等待所有从Broker都成功复制该消息后,才向生产者返回成功响应。
- 对性能影响:由于需要等待所有从Broker复制完成,同步复制会降低系统的写入性能,特别是当从Broker数量较多或者网络延迟较大时,性能下降明显。
- 对可靠性影响:可靠性非常高,只要生产者得到成功响应,就意味着消息在主从Broker上都有存储,即使主Broker宕机,从Broker上也有完整的消息副本,不会丢失消息。
- 异步复制:
- 原理:主Broker在接收到消息并写入本地后,立即向生产者返回成功响应,然后异步将消息复制给从Broker。
- 对性能影响:异步复制能显著提高写入性能,因为不需要等待从Broker复制完成就返回响应,消息写入速度更快。
- 对可靠性影响:可靠性相对同步复制稍低。如果主Broker在将消息复制给从Broker之前宕机,可能会导致部分未复制的消息丢失。但一般来说,在正常网络和系统运行情况下,大部分消息还是能可靠复制到从Broker的。
通过合理选择刷盘策略和HA模式,可以在系统性能和可靠性之间找到平衡,以满足不同业务场景的需求。