Fast Serverless Functions for Kubernetes
Clone or download
vishal-biyani Mac test utility (#986)
A utility for running individual or all tests on a Mac dev machine without changing the test script.
Latest commit 3c4fdb0 Jan 20, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Documentation Remove/Redirect out-of-date docs to fission doc site (#1061) Jan 17, 2019
builder Use Header.Set() to override the existing header value (#1032) Dec 20, 2018
buildermgr Fix requests are sent to unready function pod (newdeploy) (#1005) Dec 27, 2018
cache Optimize code Jan 24, 2018
canaryconfigmgr Send the error message to user when enabling canary feature fails. (#990 Jan 14, 2019
charts Make extra configuration a sub heading (#1062) Jan 17, 2019
controller Send the error message to user when enabling canary feature fails. (#990 Jan 14, 2019
crd Canary deployments for fission functions. (#892) Sep 26, 2018
demos Rename canary flag name from funcN/funcN-1 to newfunction/oldfunction ( Nov 28, 2018
environments Fix requests are sent to unready function pod (newdeploy) (#1005) Dec 27, 2018
examples Specs for JVM example (#825) Nov 14, 2018
executor New deploy should clean up objects it created if there are errors (#1040 Jan 11, 2019
featureconfig Send the error message to user when enabling canary feature fails. (#990 Jan 14, 2019
fission-bundle Feature flag to enable/disable canary + optional prometheus install (#… Oct 22, 2018
fission Send the error message to user when enabling canary feature fails. (#990 Jan 14, 2019
hack Fix helm command not found issue when kubeconfig is not provided. Nov 20, 2018
kubewatcher Enabling multi-tenancy for fission objects. (#655) May 23, 2018
logger Add fluentd.conf as a configmap (#792) Jan 10, 2019
mqtrigger Add support for Kafka record headers (#1025) Jan 12, 2019
pkg/apis/fission.io/v1 Changed Kafka topic name validation (#1051) Jan 14, 2019
preupgradechecks V0.11.0 (#913) Oct 1, 2018
publisher Use Header.Set() to override the existing header value (#1032) Dec 20, 2018
redis Use Header.Set() to override the existing header value (#1032) Dec 20, 2018
router Replace router svcAddrUpdateLocks with new throttler package for code… Jan 16, 2019
storagesvc Indicate HTTP status code by library const (#703) May 24, 2018
test Mac test utility (#986) Jan 20, 2019
throttler Replace router svcAddrUpdateLocks with new throttler package for code… Jan 16, 2019
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 fluentd.conf as a configmap (#792) Jan 10, 2019
.travis.yml Fix helm command not found issue when kubeconfig is not provided. Nov 20, 2018
CHANGELOG.md V1.0 rc2 (#1056) Jan 14, 2019
CODE_OF_CONDUCT.md Update with our new codeofconduct@ alias Aug 12, 2017
CONTRIBUTING.md Add a contributing.md Jan 24, 2017
LICENSE Initial docs commit Aug 19, 2016
Makefile Add Container object to environment build and runtime specs (#413) Mar 22, 2018
README.md Remove/Redirect out-of-date docs to fission doc site (#1061) Jan 17, 2019
common.go Fix builder & newdeploy not using latest image during CI build (#1033) Dec 19, 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 Kafka integration (#831) Oct 1, 2018
glide.yaml Kafka integration (#831) Oct 1, 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 Fix requests are sent to unready function pod (newdeploy) (#1005) Dec 27, 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
JVM fission/jvm-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 as of today supports HTTP request, timed, and message queue triggers.

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.