1. 介绍
SeaweedFS本质是key-file存储,文件可以通过TTL配置过期时间。
2. 如何使用
假设有一个文件需要保留3分钟。
首先,请求Master服务分配一个TTL为3分钟的file id。
curl http://localhost:9333/dir/assign?ttl=3m
{"count":1,"fid":"5,01637037d6","url":"127.0.0.1:8080","publicUrl":"localhost:8080"}
然后,使用这个file id将文件存储至volume服务。
curl -F "file=@x.go" http://127.0.0.1:8080/5,01637037d6?ttl=3m
文件写入后,在TTL过期前文件的内容可以被正常的读取, TTL过期后,文件的内容不能被读取。
3. TTL格式
TTL的格式是一个整型的数字后跟一个时间单位,时间单位可以是 ‘m’, ‘h’, ‘d’, ‘w’, ‘M’, ‘y’。
例如:
- 3m: 3 分钟
- 4h: 4 小时
- 5d: 5 天
- 6w: 6 周
- 7M: 7 月
- 8y: 8 年
4. TTL实现细节
- 在分配file id时,Master会选择一个与文件TTL配置一致的TTL-Volume, 如果不存在这样的Volume,则会创建一个。
- Volume server 保存文件,当文件的过期,则该文件不可访问。
- Volume server会追踪每个Volume的最大过期时间,停止向Master服务发送过期Volume的信息。
- Master服务会认为之前的Volume已经停止服务了,停止分配向这类Volume发送写请求。
- 在TTL过后的一段时间,最多不超过十分钟,Volume server会删除过期的Volume。
5. 部署建议
在生产中,TTL-Volume的最大size需要仔细考虑。
当写入非常的频繁时,TTL-Volume很快就会增长到最大size。当磁盘空间不太充裕的时候,最好减小最大size的配置。
不建议在同一个集群中混合TTL-Volume和non TTL-Volume,因为Volume的最大size在集群级别设置的。