108 lines
2.6 KiB
Markdown
108 lines
2.6 KiB
Markdown
|
|
A high level view of the internals of Fission.
|
|
|
|
Components
|
|
==========
|
|
|
|
Language-neutral components:
|
|
|
|
* Controller
|
|
* Container Pool Manager
|
|
* Container Specializer
|
|
* Router
|
|
|
|
Language-specific components:
|
|
|
|
* Language Build Container
|
|
* Language Run Container
|
|
|
|
|
|
Controller
|
|
----------
|
|
|
|
Function and Trigger CRUD APIs. APIs to watch for changes are also
|
|
included (useful for other components that cache state).
|
|
|
|
See api/swagger.json for API details.
|
|
|
|
This is the only stateful component. It needs to be configured with a
|
|
URL to an etcd cluster and a path to a persistent volume. The volume
|
|
will be used to store the functions' source code.
|
|
|
|
Etcd is used as the DB.
|
|
|
|
|
|
Container Pool Manager
|
|
----------------------
|
|
|
|
Manage pool of generic containers.
|
|
|
|
Probably use K8s RCs. Can we Use labels to move pods from one rc to
|
|
another? What about jobs?
|
|
|
|
Container Specializer
|
|
---------------------
|
|
|
|
Inputs: a running generic language run container, a user function,
|
|
optionally an http trigger URL.
|
|
|
|
Calls Language Run Container and sets up Router to point to it.
|
|
|
|
|
|
Router
|
|
------
|
|
|
|
- Cache trigger -> container instance mapping; implement cache miss and expiration.
|
|
|
|
- Invoke Specializer, setup up k8s API
|
|
|
|
- Forward requests
|
|
|
|
The Router is stateless -- it can be scaled or killed at any time.
|
|
|
|
There's a lot of functionality overlap with K8S Ingress Controllers.
|
|
We should clearly use Ingress and Ingress Controllers in some way.
|
|
It's not exactly clear at the moment how -- should make a whole new
|
|
Ingress Controller perhaps based on the contrib/nginx
|
|
|
|
|
|
Autoscaler
|
|
----------
|
|
|
|
This autoscales the language run containers that are backing a
|
|
trigger.
|
|
|
|
What metrics this is based on is TBD.
|
|
|
|
- Number of requests/sec
|
|
- "Backlog" -- number of outstanding requests not yet started -- how to measure this?
|
|
- Change in turn-around time?
|
|
|
|
|
|
Language Build Container
|
|
------------------------
|
|
|
|
* The Language Build Container is a container that is invoked for a
|
|
build. It takes one user-created function and outputs something
|
|
that can be run by the corresponding Language Run Container.
|
|
|
|
* The Build Container must implement the Language Build Container
|
|
interface.
|
|
|
|
|
|
Language Run Container
|
|
----------------------
|
|
|
|
* The Language Run Container is the container in which user functions
|
|
run.
|
|
|
|
* The Run Container is started without the user function. It must
|
|
start as a "Generic Container". It must implement the
|
|
"specialization interface". In short, it must implement an HTTP
|
|
server that can receive a piece of code, verify its signature, and
|
|
map it to an HTTP endpoint. See
|
|
Documentation/specs/LanguageRunContainerSpec.md for details.
|
|
|
|
|
|
|