The Fn Project
Microservices Meetup, December 2017
Chad Arimura
VP Serverless, Oracle
@chadarimura
Open Source Serverless Computing
About Me
● Engineer and builder
● 3x entrepreneur
○ 1999-2006: Founding CTO of AllDorm
○ 2008-2011: Founding Partner of Appoxy
○ 2011-2017: Founding CEO of Iron.io
● Now VP Serverless, Oracle
me
What is Serverless?
● Serverless is an abstraction of infrastructure and its operations
including provisioning, scaling, patching, etc.
● Serverless architecture is when an app is built entirely on
serverless components (compute, storage, networking)
● Faas is the compute component in a serverless architecture
Functions-as-a-Service
● Functions are small bits of code that do one thing well and are
easy to understand and maintain
● As a service means no complicated plumbing, the system
takes care of provisioning, scaling, patching, maintaining, etc.
Each function scales independently.
In mathematics, a function is a relation between a set
of inputs and a set of permissible outputs with the
property that each input is related to exactly one output.
Function (mathematics) - Wikipedia
https://en.wikipedia.org/wiki/Function_(mathematics)
Containers vs Functions
Function is a container with a
set of known traits:
● Short running
● Ephemeral
● Stateless
● Invoked
● Single Purpose
● Self-contained
What about Microservices?
Introducing the Fn Project
● Launched in October focused on open source (apache 2),
multi-cloud, serverless services, starting with FaaS
● Iron.io team joined Oracle, now a 20-person “serverless” org
● Maniacal focus on the developer experience
● Independently governed at github.com/fnproject (currently)
● Members on the CNCF serverless working group
● We are building our community and partnerships
For Developers
An Fn Function
● Small chunk of code wrapped into a container image
● Gets input via STDIN and environment
● Produces output to STDOUT
● Logs to STDERR
The Fn server handles everything else, like the API gateway, piping
things around, storing logs, etc.
Fn CLI
● fn init --runtime go
● fn run
● fn test
● fn deploy --app myapp
● fn call myapp myfunc
→ http://localhost:8080/r/myapp/myfunc
Function Development Kits (FDKs)
● Used to help with parsing input and writing output
● Familiar syntax for Lambda developers
● Simply write a `handler` function that adheres to the FDK’s
interface and it will parse STDIN and provide the input data to
your function and deal with writing the proper output format.
● Makes it a lot easier to write hot functions
Debugging
● fn calls list myapp
● fn calls get myapp <call-id>
● fn logs get myapp <call-id>
● Metrics created using OpenTracing w/ initial collectors and
extensions for Prometheus, ZipKin, and soon Jaeger
Fn UI
Under the Hood
Architecture
Fn Server
● Handles CRUD operations for setting up routes and functions
● Executes sync functions, returning responses to clients
immediately
● Queues async function calls
● Executes async functions when capacity is available
● Written in Go, easy to extend via plugin module system
Fn LB
● Simple, fast load balancer that routes functions to certain nodes
consistently for hot function efficiency
● Scales each function independently based on traffic to any
particular function
● Can be used to scale Fn servers and infrastructure as well as it
has a view of global state of all fn servers
Supporting Services
● DB, MQ, blob store are all pluggable modules that are thin
wrappers around their respective drivers.
○ DB: MySQL, sqlite3, Postgres
○ Queue: Redis, Kafka
○ Registry: Any Docker v2-compliant, even private
● Metrics/Monitoring
○ OpenTracing API for metrics
○ Prometheus support, pluggable backends
○ Logging via syslog
Kubernetes
● Fn is scheduler agnostic but lots of optimization/management
work in process to optimize on Kubernetes
● Helm chart available at https://github.com/fnproject/fn-helm
● Thinking about deeper Kubernetes integrations including CRD’s
to model functions
Fn Demo
More Advanced Fn
Fn Flow
● Build long-running, reliable, scalable functions with rich sets of
language-specific primitives including fork-join, chaining, delays
and error handling
● Supports complex parallel processes that are readable and
testable (including unit tests) with standard programming tools
● Java support using CompletableFuture API from Java 8 with
JS, Python, Go language support on the way!
Plate Detect
Function
Draw
Function
Slack
Function
Twitter
Function
Scraper
Scraper
Plate Detect
Function
Draw
Function
Slack
Function
Twitter
Function
FlowFuture.invoke()
thenCompose()
thenCompose()
allOf()
whenComplete()
Scraper
Plate Detect
Function
Draw
Function
Slack
Function
Twitter
Function
FlowFuture.invoke()
thenCompose()
thenCompose()
allOf()
whenComplete()
Flow Function
Flow Demo
Thank you!
1. Star the project: github.com/fnproject/fn
2. Join the conversation: slack.fnproject.io
3. Learn more: fnproject.io
4. We’re hiring engineers and evangelists:
chad.arimura@oracle.com
Chad Arimura
VP Serverless, Oracle
@chadarimura
Get Involved

The Fn Project: A Quick Introduction (December 2017)

  • 1.
    The Fn Project MicroservicesMeetup, December 2017 Chad Arimura VP Serverless, Oracle @chadarimura Open Source Serverless Computing
  • 2.
    About Me ● Engineerand builder ● 3x entrepreneur ○ 1999-2006: Founding CTO of AllDorm ○ 2008-2011: Founding Partner of Appoxy ○ 2011-2017: Founding CEO of Iron.io ● Now VP Serverless, Oracle me
  • 3.
    What is Serverless? ●Serverless is an abstraction of infrastructure and its operations including provisioning, scaling, patching, etc. ● Serverless architecture is when an app is built entirely on serverless components (compute, storage, networking) ● Faas is the compute component in a serverless architecture
  • 4.
    Functions-as-a-Service ● Functions aresmall bits of code that do one thing well and are easy to understand and maintain ● As a service means no complicated plumbing, the system takes care of provisioning, scaling, patching, maintaining, etc. Each function scales independently. In mathematics, a function is a relation between a set of inputs and a set of permissible outputs with the property that each input is related to exactly one output. Function (mathematics) - Wikipedia https://en.wikipedia.org/wiki/Function_(mathematics)
  • 5.
    Containers vs Functions Functionis a container with a set of known traits: ● Short running ● Ephemeral ● Stateless ● Invoked ● Single Purpose ● Self-contained
  • 6.
  • 7.
    Introducing the FnProject ● Launched in October focused on open source (apache 2), multi-cloud, serverless services, starting with FaaS ● Iron.io team joined Oracle, now a 20-person “serverless” org ● Maniacal focus on the developer experience ● Independently governed at github.com/fnproject (currently) ● Members on the CNCF serverless working group ● We are building our community and partnerships
  • 8.
  • 9.
    An Fn Function ●Small chunk of code wrapped into a container image ● Gets input via STDIN and environment ● Produces output to STDOUT ● Logs to STDERR The Fn server handles everything else, like the API gateway, piping things around, storing logs, etc.
  • 10.
    Fn CLI ● fninit --runtime go ● fn run ● fn test ● fn deploy --app myapp ● fn call myapp myfunc → http://localhost:8080/r/myapp/myfunc
  • 11.
    Function Development Kits(FDKs) ● Used to help with parsing input and writing output ● Familiar syntax for Lambda developers ● Simply write a `handler` function that adheres to the FDK’s interface and it will parse STDIN and provide the input data to your function and deal with writing the proper output format. ● Makes it a lot easier to write hot functions
  • 12.
    Debugging ● fn callslist myapp ● fn calls get myapp <call-id> ● fn logs get myapp <call-id> ● Metrics created using OpenTracing w/ initial collectors and extensions for Prometheus, ZipKin, and soon Jaeger
  • 13.
  • 14.
  • 15.
  • 16.
    Fn Server ● HandlesCRUD operations for setting up routes and functions ● Executes sync functions, returning responses to clients immediately ● Queues async function calls ● Executes async functions when capacity is available ● Written in Go, easy to extend via plugin module system
  • 17.
    Fn LB ● Simple,fast load balancer that routes functions to certain nodes consistently for hot function efficiency ● Scales each function independently based on traffic to any particular function ● Can be used to scale Fn servers and infrastructure as well as it has a view of global state of all fn servers
  • 18.
    Supporting Services ● DB,MQ, blob store are all pluggable modules that are thin wrappers around their respective drivers. ○ DB: MySQL, sqlite3, Postgres ○ Queue: Redis, Kafka ○ Registry: Any Docker v2-compliant, even private ● Metrics/Monitoring ○ OpenTracing API for metrics ○ Prometheus support, pluggable backends ○ Logging via syslog
  • 19.
    Kubernetes ● Fn isscheduler agnostic but lots of optimization/management work in process to optimize on Kubernetes ● Helm chart available at https://github.com/fnproject/fn-helm ● Thinking about deeper Kubernetes integrations including CRD’s to model functions
  • 20.
  • 21.
  • 22.
    Fn Flow ● Buildlong-running, reliable, scalable functions with rich sets of language-specific primitives including fork-join, chaining, delays and error handling ● Supports complex parallel processes that are readable and testable (including unit tests) with standard programming tools ● Java support using CompletableFuture API from Java 8 with JS, Python, Go language support on the way!
  • 23.
  • 24.
  • 25.
  • 27.
  • 28.
    Thank you! 1. Starthe project: github.com/fnproject/fn 2. Join the conversation: slack.fnproject.io 3. Learn more: fnproject.io 4. We’re hiring engineers and evangelists: chad.arimura@oracle.com Chad Arimura VP Serverless, Oracle @chadarimura Get Involved