ossfs数据缓存适用于小数据量频繁读取的场景,开启ossfs数据缓存后,能够有效降低读取延迟,提升文件操作效率。本文将为您介绍如何更好地使用和配置ossfs数据缓存。
在使用缓存数据时,需要留意数据的一致性和时效性问题。因此,在对数据实时性要求较高的场景中,不建议开启ossfs缓存模式。
功能背景
使用ossfs进行文件访问时,ossfs会默认在/tmp
目录下创建一个临时文件tmpfile
作为磁盘缓存,该文件对用户不可见。当所有打开的文件句柄均被关闭后,系统会自动清理这些临时文件。但对于频繁加载相同数据的业务场景,这种机制可能会导致每次打开、读取和关闭同一文件时都需要重新从OSS下载数据,占用了大量OSS吞吐能力。
通过开启ossfs本地缓存模式可以有效降低频繁读取热数据对远程存储的吞吐压力,降低读取延迟,减少对远程存储的访问次数。
适用场景
适用于数据量较小且需频繁读取的场景。需确保本地磁盘空间足够存储热点数据。
模式对比
ossfs在默认(无数据缓存)以及开启数据缓存这两种模式下,其功能差异如下表所示。在默认模式下建议通过tmpdir选项将临时文件从/tmp目录调整到数据盘目录,避免占用系统盘空间。
模式 | 读操作 | 写操作 | 性能 |
默认(无数据缓存) | 每次均从OSS Bucket读取,下载的数据会写到临时文件,再从临时文件中读取。所有句柄关闭时清理该文件。 | 会产生临时文件,只有在所有句柄都关闭时才会将其删除。在写入大量文件的过程中,容易占用大量的磁盘空间。 如果本地磁盘空间不足,会提前上传分片数据并清理缓存。在这种情况下,写入速度会受到OSS上传速度的制约。 | 性能取决于磁盘性能和OSS的延迟。 |
数据缓存 | 首次从OSS Bucket读取后在缓存路径创建文件,重复读取从本地获取。 | 先将数据写入本地缓存,当文件触发刷新和关闭操作时,会统一将数据上传至OSS Bucket。如果本地缓存空间不足,会提前上传分片数据并清理缓存。在这种情况下,写入速度会受到OSS上传速度的制约。 | 如果本地有缓存,性能则取决于磁盘性能。如果没有缓存,则和默认模式一样。 |
配置选项
ossfs缓存配置选项如下:
选项名称 | 描述 | 默认值 |
use_cache | 启用数据缓存并指定数据缓存路径。默认不启用。您可以通过指定该选项来配置缓存路径。 例如,您可以在挂载时添加 | 无 |
ensure_diskfree | 控制预留磁盘空间大小。默认不预留。您可以通过该选项设置保留的可用硬盘空间大小,避免磁盘写满影响其他应用写入,单位为MB。 例如,您需要设置ossfs保留1024 MB的可用磁盘空间,则可以在挂载时添加 | 无 |
del_cache | 控制删除本地缓存。默认不删除。您可以通过设置该选项来配置ossfs清理本地数据缓存。 例如,您可以在挂载时添加 | 无 |
max_dirty_data | 当写文件大小超过这个值时,不用关闭文件就会提前上传。默认值为5120 MB。 例如,您需要设置写文件超过2000 MB就提前上传,则可以在挂载时添加 | 5120 单位:MB |
数据缓存管理机制
缓存模式下,关闭文件时不会对磁盘上的缓存文件进行清理,以便在未来再次读取时可以直接使用。
缓存空间不足时,缓存会对缓存数据进行淘汰。
在进行读写操作时,系统会检查磁盘空间的使用情况,一旦磁盘空间不足,就会触发回收操作。回收操作以单个缓存文件为最小单位进行。
使用建议
如果您有频繁访问的热文件,建议开启数据缓存并配置缓存路径。这样在重复读取时能够直接从本地获取文件,从而减少访问延迟,有助于频繁访问的文件实现快速加载。与此同时,还能减少对OSS的请求量。
如果您的缓存空间所在磁盘还有其他应用在使用,那么建议在使用时添加挂载选项
ensure_diskfree
。这样可以预留一定的空间,以保证系统的正常运行。不建议在多写多读,或者一写多读且要求多客户端数据保持一致性的场景下使用。
写场景下ossfs缓存必须存在,若您不想浪费磁盘空间,建议使用ossutil。
在大文件一次性读取的场景中,缓存的作用较为有限。因此,建议使用直读模式以降低磁盘空间的占用。
数据缓存的性能与缓存数据所在磁盘的性能密切相关。建议选择性能较好的磁盘,例如:ESSD AutoPL开启性能突发、弹性临时盘或本地盘。具体详情,请参见ESSD AutoPL云盘。