System support for elasticity and high availability
Elasticity and high availability (HA) are key requirements among modern Internet applications. Elasticity enables applications to dynamically allocate/release physical resources in proportion to request load. High availability enables applications to mask failures in the system from end users. In current practice, every application implements these features as part of its own application logic, resulting in unnecessary design complexity. This thesis argues that facilities for elasticity and HA
... hould be exposed as system-level primitives, in the same way abstractions for files and networks became operating system-level primitives three decades ago. Unfortunately, providing these higher-level services efficiently may require knowledge of application data structures, consistency requirements, and workloads. This thesis describes initial instantiations of such interfaces for two broad (and different) classes of applications: network middleboxes (e.g., load balancers, intrusion prevention systems, etc) and database systems. Elasticity is achieved typically through dynamic partitioning of state and inputs into independent subsets, while HA is achieved through state replication. Guided by this principle, this thesis presents a system-level runtime that partitions the middlebox state along flow boundaries and provides abstractions for elasticity and HA using live migration and replication of flows respectively. For database systems, this thesis presents a hypervisor-level HA system that performs database-aware virtual machine replication, eliminating the need for complex application-level HA mechanisms. This thesis concludes that while there may not be a one-size-fits-all solution to application elasticity and HA, it is still feasible and beneficial to provide system-level primitives that are applicable across one or more application domains.