Skip to main content

WAL 存储

在流存储库 S3Stream 中,WAL 是核心组件之一,WAL 存储主要用来解决使用对象存储作为数据主存带来的延迟高,大量分区写入效率低等问题。其主要有两个职责:

  • 提供低延迟、高性能的数据持久化写入。数据在写入 WAL 成功后即可返回确认给客户端。

  • 当 Broker 节点出现故障需要 Failover 时,会从 WAL 中恢复未被及时上传到 S3 的数据。

WAL 存储实现

WAL 在实现上是一块固定大小的,循环写入的存储空间,存储介质可以有多种选型,但 WAL 实现上主要考虑以下几点:

  • 集中式写入,与 Apache Kafka 不同,AutoMQ 并不需要为每个分区写入不同的 Log 文件,通过将所有分区的数据混合写入到 WAL 中,能支持大规模分区情况下的高效写入。

  • 顺序写入和组提交,数据顺序写入到 WAL 中,配合组提交机制,仅需少量的 IOPS 即可完成高吞吐写入。

  • Direct IO 写入,数据直接写穿到存储介质上,充分利用云存储的持久性,写入成功后才可返回确认,不受操作系统 Page Cache 脏页回收等影响。

  • 支持裸设备写入[1],AutoMQ 仅需要写入一个文件,如果采用 EBS 作为存储介质,可以直接将 EBS 用做裸设备来写入,无需挂载文件系统,也没有文件系统带来额外的开销,性能和延迟是最优的。

通过上述技术,WAL 存储显著降低流存储系统对 IOPS 的依赖,解决对象存储写入效率低和API调用费用高的问题,使 S3Stream 应用广泛。无论系统是延迟敏感还是高吞吐类型,均可由 AutoMQ 支持。

WAL 存储介质选型

公有云厂商一般提供三种类型的存储服务,分别是:

  • 块存储,比如 AWS EBS,Azure Zone-redundant Disk[2],GCP Regional Persistent Disk[3],Alibaba Cloud Regional ESSD[4]。上述存储服务中 EBS 是单 AZ 多副本架构,其它几个块存储是多 AZ 的多副本架构,下文统称为 Regional EBS。

  • 对象存储,是云厂商提供的最标准的存储服务,基本上各个云厂商都支持标准的 S3 协议。

  • 文件存储,以 NFS 协议为主的文件存储服务,也广泛应用于大数据等业务场景,比如 AWS EFS[5] 和 AWS FSx 系列[6]

上述存储介质都可以用做 WAL 的存储介质,具体的差异如下表所示。

-
EBS & Regional EBS WAL
S3 WAL
NFS WAL
多 AZ
  • EBS 为单 AZ 多副本架构
  • Regional EBS 为多 AZ 多副本架构
S3 同时提供单 AZ 和多 AZ 的产品选型
NFS 同时提供单 AZ 和多 AZ 的产品选型
持久性
5 个 9 到 9 个 9 之间
11 个 9 左右
11 个 9 左右
延迟
亚毫秒级
百毫秒级
毫秒级
成本



适用场景
Regional EBS 为最佳选项,适用于所有的的 Kafka 业务场景
适用于大部分对延迟不敏感的场景,如日志,监控等场景
AWS 上低延迟场景的解决方案,比如核心的交易撮合场景

其中,当 AutoMQ 选择 S3 WAL 时,S3 同时提供 WAL 存储和数据主存服务,WAL 存储面向写进行优化,将消耗更少的 S3 API 调用,特别是在大量分区的场景下,S3 WAL 具备高效的数据摄取能力,同时在主存部分通过多种 Compaction 机制提供高效的数据消费能力。

引用

[1]. AutoMQ 如何基于裸设备实现高性能的 WAL: https://www.automq.com/blog/principle-analysis-how-automq-implements-high-performance-wal-based-on-raw-devices

[2]. Azure Regional EBS: https://learn.microsoft.com/en-us/azure/virtual-machines/disks-redundancy#zone-redundant-storage-for-managed-disks

[3]. GCP Regional EBS: https://cloud.google.com/compute/docs/disks/regional-persistent-disk

[4]. 阿里云 Regional EBS: https://developer.aliyun.com/special/live/regionalessd_bdrc

[5]. AWS EFS: https://aws.amazon.com/efs/

[6]. AWS FSx: https://aws.amazon.com/fsx/netapp-ontap/