One of the attributes of a general-purpose object store that I called out in my last blog post was it must support streaming applications, and in particular, live and HTTP adaptive streaming. The Object Store solution recently announced by Verivue—which is built on a foundation of scalable clusters of commodity servers—does exactly that. And it does so by focusing on three key issues.
First, live streaming applications require low latency ingest and delivery of small video fragments, typically at multiple bit rates. Using commodity servers, Object Store is optimized to support ingest and delivery of a large number of live channels per node with predictable, low latency even in the presence of failed disks or nodes. This is in contrast to RAID and erasure coding based storage systems that are typically not optimized for small object writes.
The reason for this is that in addition to the overhead of parity calculations incurred by coding-based approaches, every time a portion of a block stripe is updated the entire stripe must be read back in order to compute the new parity. For example, on a RAID 5 array made from five disks, a particular stripe across those disks may have data on drives #1, #2, #3 and #4, and its parity block on drive #5. If a small object write changes just the block in the stripe of disk #2, disks #1, #3 and #4 must also be read to calculate the parity which is then written to disk #5. Also, the RAID controller must ensure that changes to data and its associated parity occur as a single transaction. This is often handled using a two-phase commit, which results in additional performance overhead. Finally, writes must be serialized, and that affects latency. Hence, the ingest latency on RAID-based storage systems is less predictable which can be problematic for live applications.
Second, live streaming applications require redundant encoders to avoid a single point of failure, which implies the store must be able to simultaneously ingest multiple copies of each object. In such cases, Verivue’s Object Store is encoder-aware, and so replicates the content as if it had received a single request. There is no storage penalty for using redundant encoders, and critically, no content is lost in the event of an encoder or Object Store disk/server failure.
Finally, some HTTP adaptive streaming protocols, such as Microsoft Smooth Streaming (HSS) and Adobe HTTP Dynamic Streaming (HDS), require a translation from client fragment requests to server file offsets. No such translation is necessary for Apple’s HLS. To address this variance, it is possible to add origin heads to Verivue’s Object Store, where the origin heads implement this translation function and the Object Store stores the fragments to support time shifting (e.g., nDVR). These origin heads support a scale-out model consistent with the Object Store architecture, where origin heads can run on dedicated servers in the same cluster or in a separate Virtual Machine (VM) on the same servers as the base Object Store functionality.
The combination of Object Store and origin heads supports all possible combinations of video packaging and adaptive protocols: for HLS, both on-demand and linear-with-nDVR require only Object Store; for HSS and HDS, on-demand can first be ingested into Object Store, and then when requested, pulled through the origin heads en-route to the user; and for HSS and HDS, live video with nDVR is first ingested into the origin heads, a copy is then put into Object Store to support future nDVR requests, and finally the video is sent to end-users from the origin heads (either pass-through for the original stream, or pulled from Object Store for time-shifted streams).