Noah Watkins, Michael Sevilla, Ivo Jimenez, Neha Ojha, Peter Alvaro, Carlos Maltzahn
07/25/2016 06:16 PM
Computer Science
To meet the needs of a diverse and growing set of cloud-based applications, modern distributed storage frameworks expose a variety of composable subsystems as building blocks. This approach gives infrastructure programmers significant flexibility in implementing application-specific semantics while reusing trusted components. Unfortunately, in current storage systems the composition of subsystems is a low-level task that couples (and hence obscures) a variety of orthogonal concerns, including functional correctness and performance. Building an application by wiring together a collection of components typically requires thousands of lines of carefully-written C++ code, an effort that must be repeated whenever device or subsystem characteristics change.
In this paper, we propose a declarative approach to subservice composition that allows programmers to focus on the high-level functional properties that are required by applications. Choosing an implementation that is consistent with the declarative functional specification then can be posed as a search problem over the space of parameters such as block sizes, storage interfaces (e.g. key/value or block storage) and concurrency control mechanisms. We base our observations and conclusions on data mining the git repository of the Ceph storage system and performance evaluating our own prototype implementations.