一、刷盘模式
- 同步刷盘: 在返回写成功状态时,消息已经被写入磁盘。具体流程是,消息写入内存的PAGECACHE后,立刻通知刷盘线程刷盘,然后等待刷盘完成,刷盘线程执行完成后唤醒等待的线程,返回消息写成功的状态。优点:机器宕机消息也会被保留,缺点:写入速度慢,吞吐量小。
- 异步刷盘: 在返回写成功状态时,消息只是被写入了内存的PAGECACHE,这样的好处是写操作的返回快,吞吐量大;当内存里的消息量积累到一定程度时,统一触发写磁盘操作,快速写入,缺点是一旦机器宕机消息可能会丢失
二、复制模式
1、同步复制
生产者发送消息后,Master 接收到存储消息请求,将消息数据同步给 Slave ,直到master和slave节点都写入成功(写入磁盘或者内存,看刷盘方式),才将成功结果返回给生产者。同步复制模式下,发送消息会有一定延迟,系统吞吐量也会降低。
2、异步复制
生产者发送消息后,Master 接收到存储消息请求,将消息写入成功后(写入磁盘或者内存,看刷盘方式),直接将成功结果返回给生产者。 Master 和 Slave 再通过异步的方式同步数据,这种复制模式具有较小的延迟,可以实现比较高的吞吐量。
若 Master 出现故障,有些数据可能未写入 Slave ,未同步的数据可能丢失。
注意
复制与刷盘之间是独立的,互不相关的,即一个M-S对中的节点上,可以任意设置刷盘方式,即如下图,可以主节点同步刷盘,从节点异步刷盘。
为了保障稳定性和高吞吐量一般采用同步复制、异步刷盘的方式,即如下图: