这篇文章MezzFS — Mounting object storage in Netflix’s media processing platfor
是出自medium
Netflix Technology Blog,作者 Barak Alon
MezzFS
: Mezzanine文件系统的缩写, 是Netflix使用Python
开发的一个工具,可通过FUSE
将云对象作为本地文件挂载。
FUSE
支持用户态空间的文件系统, 文件操作命令通过VFS
->FUSE
->glibc
->libfuse
->用户自定义文件系统实现, 从而可以在用户态重新定义文件操作.
Netflix
处理视频编码主要涉及以下几个方面问题:
- 针对不同编码器分辨率进行多次编码,如果编码技术更新调整 可能需要全部重新编码
- 文件拆分并加密为单独的块,并将这些块存储在
Amazon S3
中。另外需要处理内容安全性,审核,灾难恢复等 -
视频编码器都是处理本地文件系统上的文件,不会去调用
API
去处理云上文件。视频文件非常大,需要避免为了处理一小块而下载整个视频文件
MezzFS
的一些特点;
Stream objects
: 流对象不要外设存储Assemble and decrypt parts
:MezzFS
知道如何组装和解密Mount multiple objects
: 挂载多个对象Disk Caching
: 支持本地磁盘缓冲Mount ranges of objects
: 可以将云对象指定范围对象挂载到本地Regional caching
: 一个区域的缓冲信息可以被另一个区域使用
关键特征replay
;
支持配置MezzFS
为记录replay
文件。 该文件包括: 元数据, 文件操作, 缓存的内容, 统计信息。有这些信息可以实现可视化的功能, 可以用来调试错误,进行性能分析.
关键特征Adaptive Buffer
;
由于使用FUSE
系统, 内核将分块读入, 这意味这1G 的挂载文件, MezzFS
可能要针对64KB
块进行16384
次读取。 因此最好可以预先读取一大块进行缓存。但是由于涉及离散和连续数据, 因此出现了Adaptive Buffer
具体公式数据来源于最近的读取的信息.
每连续块读取的数据: average_bytes_per_cluster
每次读取的数据: average_bytes_per_read
# This tunable threshold defines what is "close to 1"
and what is "close to 0"
threshold = 0.6
sparsity = average_bytes_per_read / average_bytes_per_cluster
if 0 < sparsity <= threshold:
# access pattern classified as "dense"
buffer_size = max_allowed_buffer_size / number_of_clusters
if threshold < sparsity <= 1:
# access pattern classified as "sparse"
buffer_size = average_bytes_per_cluster
计算稀疏值`sparsity
如果接近1说明数据稀疏分布,那么缓存设定为一个块的大小, 如果接近0说明紧密分布,连续读, 考虑到多线程, 使用设置缓冲最大值除以clusters个数。让线程划分好的各自的连续缓冲区内读.
Be First to Comment