Skip to content
/ gFaaS Public

Enabling Generic Functions in Serverless Computing (IEEE SANER 2024)

License

Notifications You must be signed in to change notification settings

kky-fury/gFaaS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gFaaS

gFaaS is a novel framework that facilitates the holistic development and management of functions across diverse FaaS platforms. It enables the development of generic functions in multiple programming languages that can be seamlessly deployed across different platforms without modifications.

Areas of the abstraction

To achieve its design goals and enable generic functions, gFaaS provides an abstraction layer for the function code, function configuration, and interaction with the FaaS plaforms as shown in the figure below.

Features

FaaS Platforms

gFaaS currently supports the following FaaS plaforms:

  1. Knative
  2. Fission
  3. Nuclio
  4. OpenFaaS

Programming

gFaaS currently supports the development of functions in Python, Node.js, C++, Go, and Java. The different language templates can be found at this repository. More templates can be easily integerated into our framework.

gRPC

gFaaS supports the development of functions with gRPC support for Knative. For instruction, please see here.

Migrating legacy code to gFaaS

gFaaS utilizes the adapter pattern to enable the migration of legacy code to our framework without code modifcations. For details, please read the Adapter section in the provided templates.

QuickStart

For quickly using gFaaS, you can use our docker image as below:

docker pull kkyfury/gfaas-cli:v1
docker run --rm kkyfury/gfaas-cli:v1 --version

The detailed functionality provided by gFaaS can be found here.

Setting up the individual FaaS platforms

We also provide Terraform and Ansible files that we used to automate the deployment and configuration of the individual FaaS platforms on OpenStack VMs. This can be found here and adapted for distinct setups.

Platform configuration

To run gFaaS with the supported FaaS platforms, you need to provide a configuration file in YAML. An example can be found here.

Function configuration

To deploy and manage functions with gFaaS, you need to provide a function configuration file in YAML. An example can be found here.

System Design

The figure below shows the detailed system components within gFaaS and their interactions with external components to enable the holistic development and management of functions.

Overhead

Our framework performs similar to platform-native functions and does not incur any significant overhead.

Cold Start performance

The cold start performance is only compared with Knative and Fission since scale-to-zero is not offered by the community editions of OpenFaaS and Nuclio. The different functions we used for testing can be found here.

Go

Node.js

Python

Java

Hot Start performance

Go

Node.js

Python

Java

Citation

If you use gFaaS in your work, please cite our paper:

@misc{chadha2024gfaas,
    title={gFaaS: Enabling Generic Functions in Serverless Computing},
    author={Mohak Chadha and Paul Wieland and Michael Gerndt},
    year={2024},
    eprint={2401.10367},
    archivePrefix={arXiv},
    primaryClass={cs.SE}
}

Contributors

Paul Wieland