OIL + VCache如何改善视频延迟,并减少存储和计算开销?

如题所述

OIL的DAG由存储模块和竞争节点组成。存储模块(例如本地文件系统或高速缓存)表示DAG中的各个节点。每个节点可以具有其特定实现某向功能的独立配置。除了向客户端传递数据或从客户端调用数据之外,DAG节点还可以向OIL框架传递其工作状态为满意(satisfied)或耗尽(exhausted)。除此之外,DAG节点可以将批量数据和地址空间变换附加到节点。转换包含前向纠错、压缩、加密和数据分块。节点之间的连线描述了传输数据时使用的属性,例如要设置的服务质量级别或使用的协议。
竞争节点是内置虚拟节点,可以包含任意数量的子节点。它允许配置最大并发、num-until-satisfied、num-until-exhausted和交错启动延迟。此节点允许描述if-then-else-chain、for-loop或parallel-for-loop之中的任何组合的控制流。当num-until-satisfied子节点声明“satisfied”状态时,竞争节点本身对其父节点声明“空闲”。当num-until-exhausted子句被执行并声明“耗尽”状态时,竞争节点本身会向其父级声明“耗尽”。由于节点可以在声明“耗尽”之前可选地声明“空闲”,明确发出信号并通知应用可以继续运行,以将用于特定I / O的所有工作完成的信令有效区分。
异步或委托写入的一个棘手问题是缓存的故障域与执行写入操作的主机的故障域不同。使用OIL + VCache,开发者可以拥有本地缓存,这些缓存与写入主机具有相同的运行结果,同时还使用远程主机实现长期持久性和负载共享。使用这样的层次结构,开发者可以选择减少IOPS和存储系统开销,并且仍然放弃相对较少的期望属性,例如运行结果共享和对字节的最低延迟访问。
但是,当要写入的数据总和超过本地主机内存时,这种本地缓存将失败。由于VCache使用OIL作为后备存储,并且由于VCache可用于OIL,因此一个VCache实例可以使用另一个VCache实例作为其后备存储。这意味着开发者可以拥有主机本地内存与远程内存的所有优势。将这些与竞争节点放在一起,开发者可以控制复制、quorum以及共享或分离存储与处理的运行结果。下面是一些例子,体现了这种抽象化的力量:
交错启动允许应用程序在延迟时间和总系统工作时间之间进行权衡。
讨论文件系统,元数据也应当成为讨论的话题之一。元数据通常由所有权、ACL、TTL等组成。OIL需要引用数据-DAG,用于描述如何、何时与何处进行I/O,因此通常也会在元数据中结束。元数据与分布式系统中的数据有许多相同的问题; 因此,“DAG抽象化可重用”是有一定意义的,这也是我们致力于实现的。
OIL允许定义两种DAG - 一个用于元数据,一个用于数据。这些DAG的执行框架和结构是相同的。唯一真正的区别是元数据DAG中的模块给出了一项key->原子值接口而非数据-DAG的key->字节流接口,并且元数据-DAG在数据-DAG之前执行。这种分离纯粹是为了方便,因为开发者可以在单个DAG中表达这一点。通常使用元数据-DAG来描述互斥、锁和其他序列化。描述如何以任意顺序读取和写入任意字节是在data-DAG中完成的。这些DAG显著不同之处在于数据DAG可以在文件的生命周期内发生变化。
温馨提示:答案为网友推荐,仅供参考