  Function as a Service (FaaS) paradigm is becoming widespread and is
envisioned as the next generation of cloud systems that mitigate the burden for
programmers and cloud solution architects. However, the FaaS abstraction only
makes the cloud resource management aspects transparent but does not deal with
the application data aspects. As such, developers have to undergo the burden of
managing the application data, often via separate cloud services (e.g., AWS
S3). Similarly, the FaaS abstraction does not natively support function
workflow, hence, the developers often have to work with workflow orchestration
services (e.g., AWS Step Functions) to build workflows. Moreover, they have to
explicitly navigate the data throughout the workflow. To overcome these
problems of FaaS, we design a higher-level cloud programming abstraction that
hides the complexities and mitigate the burden of developing cloud-native
application development. We borrow the notion of object from object-oriented
programming and propose a new abstraction level atop the function abstraction,
known as Object as a Service (OaaS). OaaS encapsulates the application data and
function into the object abstraction and relieves the developers from resource
and data management burdens. It also unlocks opportunities for built-in
optimization features, such as software reusability, data locality, and
caching. OaaS natively supports dataflow programming such that developers
define a workflow of functions transparently without getting involved in data
navigation, synchronization, and parallelism aspects. We implemented a
prototype of the OaaS platform and evaluated it under real-world settings
against state-of-the-art platforms regarding the imposed overhead, scalability,
and ease of use. The results demonstrate that OaaS streamlines cloud
programming and offers scalability with an insignificant overhead to the
underlying cloud system.
