Alluxio中的数据一致性模型
Posted Alluxio
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Alluxio中的数据一致性模型相关的知识,希望对你有一定的参考价值。
与提供单副本更新语义的HDFS或提供最终一致性的AWS S3不同,Alluxio中的数据一致性要复杂一些,并取决于配置。简而言之,当客户端仅通过Alluxio进行读写时,Alluxio文件系统提供了强一致性。但是,当客户端在Alluxio和底层存储之间交叉写入数据时,一致性可能取决于写入类型和底层存储类型。
首先,Alluxio文件系统中的文件是一次写入多次读取的,并由唯一的文件ID标识。因此,给定此文件ID,所有文件reader都可以访问文件,而不必担心数据过时。
Alluxio为仅通过Alluxio文件系统访问数据的Alluxio应用程序(如MapReduce,Spark作业)提供了强一致性。写入完成后,Alluxio reader客户端始终可以查看由Alluxio writer客户端写入的新文件及其内容。这是因为所有文件系统修改操作将首先通过Alluxio Master,并在成功返回给客户端/应用程序之前完成Alluxio文件系统状态的修改。通过此过程,只要成功完成相应的写入操作,不同的Alluxio客户端将始终获得最新更新。
写入Alluxio并且从底层存储读取
当把底层存储状态纳入考虑范畴后,用户写入Alluxio的数据可能与底层存储不一致,具体取决于写入类型:
MUST_CACHE:MUST_CACHE不会写入底层存储,因此Alluxio空间与底层存储是不一致的。
CACHE_THROUGH:在成功返回应用程序之前,CACHE_THROUGH将数据同步写入Alluxio和底层存储中:
- 在使用HDFS的情况下:写入底层存储也是强一致性的,当底层存储中没有其它绕过Alluxio的直接更新时,Alluxio空间将始终与底层存储保持一致;
- 对于S3:写入底层存储是最终一致的,有可能文件已成功写入Alluxio,但不会立即显示在底层存储中。因此,在最终将数据传播到底层存储之前,会产生一个不一致的短期窗口。即使在这种情况下,Alluxio客户端仍将看到一致的文件系统,因为它们将始终与高度一致的Alluxio Master通信打交道。
ASYNC_THROUGH:ASYNC_THROUGH将数据写入Alluxio并返回到应用程序,从而使Alluxio将数据异步传播到UFS。从用户的角度来看,该文件可以成功地写入Alluxio,但是会滞后持久保存到UFS。
THROUGH:THROUGH将数据直接写入UFS,而无需在Alluxio中缓存数据。但是,Alluxio知道文件及其状态。因此,元数据仍然是一致的。
写入到底层存储并从Alluxio读取
同时,如果底层存储中的数据与Alluxio不同步(例如,由于未通过Alluxio直接进行底层存储中的修改),则元数据同步功能可以修复不一致问题。用户可以选择定期自动或主动同步来执行同步过程。请见文档。
结 论
由于在生态系统中的独特地位,Alluxio提供了灵活的数据一致性模型来平衡性能,成本和可用性。用户可使用不同的元数据同步技术来协调Alluxio和底层存储,从而保障数据的一致性。
以上是关于Alluxio中的数据一致性模型的主要内容,如果未能解决你的问题,请参考以下文章
2min速览:从设计实现和优化角度浅谈Alluxio元数据同步