Fast Serverless Functions for Kubernetes
Switch branches/tags
Clone or download
michaelgaida and vishal-biyani Configurable namespace creation (#855)
Configurable namespace creation defaulting to true (backward compatible)
Latest commit 437d4dc Sep 25, 2018
Permalink
Failed to load latest commit information.
Documentation Fission supportability: Add dump command to dump information for debu… Sep 19, 2018
builder Add time trigger cron spec examination tool (#680) Jun 4, 2018
buildermgr Java env builder with Maven (#783) Jul 24, 2018
cache Optimize code Jan 24, 2018
charts Configurable namespace creation (#855) Sep 25, 2018
controller Replay recorded requests by ReqUID (#864) Aug 17, 2018
crd Check CRD creation error instead of doing return directly (#897) Sep 18, 2018
demos Demo script bugfix Jan 2, 2018
environments Add v2 interface support for nodes env (#836) Sep 14, 2018
examples Add v2 interface support for nodes env (#836) Sep 14, 2018
executor Check pod container ready state (#861) Sep 7, 2018
fission-bundle Add time trigger cron spec examination tool (#680) Jun 4, 2018
fission Fixed the spec validation UX issue (#898) Sep 21, 2018
hack Fix failed to find release-builder dockerfile & push specific tag (#870) Aug 26, 2018
kubewatcher Enabling multi-tenancy for fission objects. (#655) May 23, 2018
logger Change time precision for fluentd influxdb plugin to nano second (#646) Apr 26, 2018
mqtrigger Fixed typos from from goreportcard (#760) Jul 16, 2018
pkg/apis/fission.io/v1 Recorder CRD, Records API, Redis deployment (#818) Aug 14, 2018
preupgradechecks pre-upgrade job to verify function references and restricted privileg… Jun 5, 2018
publisher Enabling multi-tenancy for fission objects. (#655) May 23, 2018
redis Replay recorded requests by ReqUID (#864) Aug 17, 2018
router Recorder CRD, Records API, Redis deployment (#818) Aug 14, 2018
storagesvc Indicate HTTP status code by library const (#703) May 24, 2018
test Add cleanup function to test scripts (#863) Aug 17, 2018
timer Enabling multi-tenancy for fission objects. (#655) May 23, 2018
v1 Upgrade tool for 0.1 -> 0.2.1 (#320) Sep 12, 2017
.gitignore add build exe to gitignore (#736) Jun 8, 2018
.travis.yml Added Helm lint check (#799) Jul 19, 2018
CHANGELOG.md V0.10.0 (#868) Aug 19, 2018
CODE_OF_CONDUCT.md Update with our new codeofconduct@ alias Aug 12, 2017
CONTRIBUTING.md Add a contributing.md Jan 24, 2017
Compiling.md Add Container object to environment build and runtime specs (#413) Mar 22, 2018
INSTALL.md [ci skip] update release number (#561) Mar 21, 2018
LICENSE Initial docs commit Aug 19, 2016
Makefile Add Container object to environment build and runtime specs (#413) Mar 22, 2018
README.md Update readme to point to the proper link (#628) Apr 16, 2018
common.go Fixed the spec validation UX issue (#898) Sep 21, 2018
commonrbacutil.go Update k8s dependencies to 1.10 (#687) Jun 1, 2018
error.go Indicate HTTP status code by library const (#703) May 24, 2018
glide.lock Recorder CRD, Records API, Redis deployment (#818) Aug 14, 2018
glide.yaml Recorder CRD, Records API, Redis deployment (#818) Aug 14, 2018
info.go Add time trigger cron spec examination tool (#680) Jun 4, 2018
merge_test.go Update k8s dependencies to 1.10 (#687) Jun 1, 2018
plugins.yaml Extensible Fission CLI (#743) Aug 17, 2018
port-forward-nats.sh Service type ClusterIP - Controller port forward through CLI (#431) Feb 27, 2018
port-forward-router.sh Service type ClusterIP - Controller port forward through CLI (#431) Feb 27, 2018
types.go Recorder CRD, Records API, Redis deployment (#818) Aug 14, 2018

README.md

Fission: Serverless Functions for Kubernetes

Build Status Go Report Card Fission Slack

fission.io @fissionio

Fission is a fast serverless framework for Kubernetes with a focus on developer productivity and high performance.

Fission operates on just the code: Docker and Kubernetes are abstracted away under normal operation, though you can use both to extend Fission if you want to.

Fission is extensible to any language; the core is written in Go, and language-specific parts are isolated in something called environments (more below). Fission currently supports NodeJS, Python, Ruby, Go, PHP, Bash, and any Linux executable, with more languages coming soon.

Performance: 100msec cold start

Fission maintains a pool of "warm" containers that each contain a small dynamic loader. When a function is first called, i.e. "cold-started", a running container is chosen and the function is loaded. This pool is what makes Fission fast: cold-start latencies are typically about 100msec.

Kubernetes is the right place for Serverless

We're built on Kubernetes because we think any non-trivial app will use a combination of serverless functions and more conventional microservices, and Kubernetes is a great framework to bring these together seamlessly.

Building on Kubernetes also means that anything you do for operations on your Kubernetes cluster — such as monitoring or log aggregation — also helps with ops on your Fission deployment.

Fission Concepts

A function is a piece of code that follows the fission function interface.

An environment contains the language- and runtime-specific parts of running a function.

The following environments are currently available:

Environment Image
Binary (for executables or scripts) fission/binary-env
Go fission/go-env
.NET fission/dotnet-env
.NET 2.0 fission/dotnet20-env
NodeJS (Alpine) fission/node-env
NodeJS (Debian) fission/node-env-debian
Perl fission/perl-env
PHP 7 fission/php-env
Python 3 fission/python-env
Ruby fission/ruby-env

You can also extend environments or create entirely new ones if you want. (An environment is essentially just a container with a webserver and dynamic loader.)

A trigger is something that maps an event to a function; Fission supports HTTP routes as triggers today, with upcoming support for other types of event triggers, such as timers and Kubernetes events.

Usage

  # Add the stock NodeJS env to your Fission deployment
  $ fission env create --name nodejs --image fission/node-env

  # A javascript one-liner that prints "hello world"
  $ curl https://raw.githubusercontent.com/fission/fission/master/examples/nodejs/hello.js > hello.js

  # Upload your function code to fission
  $ fission function create --name hello --env nodejs --code hello.js

  # Map GET /hello to your new function
  $ fission route create --method GET --url /hello --function hello

  # Run the function.  This takes about 100msec the first time.
  $ fission function test --name hello
  Hello, world!

See the examples directory for more.

Running Fission on your Cluster

See the installation guide.

Compiling Fission

See the compilation guide.

Status

Fission is in early alpha. It's not suitable for production use just yet.

Reach us on slack or twitter.

Fission is a project by Platform9 Systems and many contributors.