$30 off During Our Annual Pro Sale. View Details »

Bay Area Microservices Meetup - 2017-12-12

Chad Arimura
December 12, 2017

Bay Area Microservices Meetup - 2017-12-12

Chad Arimura

December 12, 2017
Tweet

More Decks by Chad Arimura

Other Decks in Technology

Transcript

  1. The Fn Project
    Microservices Meetup, December 2017
    Chad Arimura
    VP Serverless, Oracle
    @chadarimura
    Open Source Serverless Computing

    View Slide

  2. 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

    View Slide

  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

    View Slide

  4. 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)

    View Slide

  5. Containers vs Functions
    Function is a container with a
    set of known traits:
    ● Short running
    ● Ephemeral
    ● Stateless
    ● Invoked
    ● Single Purpose
    ● Self-contained

    View Slide

  6. What about Microservices?

    View Slide

  7. 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

    View Slide

  8. For Developers

    View Slide

  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.

    View Slide

  10. Fn CLI
    ● fn init --runtime go
    ● fn run
    ● fn test
    ● fn deploy --app myapp
    ● fn call myapp myfunc
    → http://localhost:8080/r/myapp/myfunc

    View Slide

  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

    View Slide

  12. Debugging
    ● fn calls list myapp
    ● fn calls get myapp
    ● fn logs get myapp
    ● Metrics created using OpenTracing w/ initial collectors and
    extensions for Prometheus, ZipKin, and soon Jaeger

    View Slide

  13. Fn UI

    View Slide

  14. Under the Hood

    View Slide

  15. Architecture

    View Slide

  16. 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

    View Slide

  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

    View Slide

  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

    View Slide

  19. 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

    View Slide

  20. Fn Demo

    View Slide

  21. More Advanced Fn

    View Slide

  22. 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!

    View Slide

  23. Plate Detect
    Function
    Draw
    Function
    Slack
    Function
    Twitter
    Function
    Scraper

    View Slide

  24. Scraper
    Plate Detect
    Function
    Draw
    Function
    Slack
    Function
    Twitter
    Function
    FlowFuture.invoke()
    thenCompose()
    thenCompose()
    allOf()
    whenComplete()

    View Slide

  25. Scraper
    Plate Detect
    Function
    Draw
    Function
    Slack
    Function
    Twitter
    Function
    FlowFuture.invoke()
    thenCompose()
    thenCompose()
    allOf()
    whenComplete()
    Flow Function

    View Slide

  26. View Slide

  27. Flow Demo

    View Slide

  28. 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:
    [email protected]
    Chad Arimura
    VP Serverless, Oracle
    @chadarimura
    Get Involved

    View Slide