diff --git a/README.md b/README.md index a821da08..6b6eb6dc 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,15 @@ Fission is a fast serverless framework for Kubernetes with a focus on developer productivity and high performance. Fission operates on _just code_: Docker and Kubernetes are abstracted -away. +away under normal operation, though you can use both to extend Fission +if you want to. -Fission is extensible to any language. It currently supports NodeJS -and Python, with more languages coming soon. +Fission is extensible to any language; the core is written in Go, +language-specific parts are isolated in something called +_environments_ (more below). Fission currently supports NodeJS and +Python, with more languages coming soon. -100msec cold start ------------------- +### Performance: 100msec cold start Fission maintains a pool of "warm" containers that each contain a small dynamic loader. When a function is first called, @@ -19,32 +21,50 @@ 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 --------------------------------------------- +### 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. - - Fission Concepts -================ +---------------- -A _function_ is a piece of code with an entry point. +A _function_ is a piece of code that follows the fission function +interface. -An _environment_ is a container with a webserver and dynamic loader -for functions. Today, Fission comes with NodeJS and Python -environments. You can also add your own: for example, if you want to -add a binary to your Python image, you can edit the Python -environment's Dockerfile, rebuild it, and add your new environment to -Fission. +An _environment_ contains the language- and runtime-specific parts of +running a function. Fission comes with NodeJS and Python +environments; 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 triggers today, with upcoming support for other types of -event triggers. +supports HTTP routes as triggers today, with upcoming support for +other types of event triggers, such as timers and Kubernetes events. + +Fission 101 +----------- + +```bash + + # Add the stock NodeJS env to your Fission deployment + $ fission env create --name nodejs --image fission/node-env + + # A one-liner that prints "hello world" + $ echo 'module.exports = function(context, callback) { callback(200, "Hello, world!\n"); }' > 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. + $ curl http://$FISSION_ROUTER/hello + Hello, world! +``` Running Fission on your Cluster