Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Putting the F in FaaS

Lars Trieloff
February 16, 2018

Putting the F in FaaS

a.k.a. what LISP can teach you about Serverless function composition. Presented Feb 16th 2018 at JeffConf Hamburg

Lars Trieloff

February 16, 2018
Tweet

More Decks by Lars Trieloff

Other Decks in Programming

Transcript

  1. Putting the F in FaaS

    View Slide

  2. !
    @trieloff

    View Slide

  3. ⚡⚡⚡

    View Slide

  4. !
    @adobeio

    View Slide

  5. Opinions are my own

    View Slide

  6. Ideas are not

    View Slide


  7. Putting the F in
    FaaS

    View Slide

  8. WTF?

    View Slide

  9. WT ?

    View Slide

  10. F is for Functions

    View Slide

  11. Fundamentally, there are
    only two programming
    styles: functional and
    dysfunctional.

    View Slide

  12. Functions in FaaS

    View Slide

  13. Stateless

    View Slide

  14. Stateless
    Short-lived

    View Slide

  15. Stateless
    Short-lived
    Single-purpose

    View Slide

  16. Stateless
    Short-lived
    Single-purpose
    Boring

    View Slide

  17. !"

    View Slide


  18. Serverless
    Functional Patterns
    for the Aspiring
    Enterprise Architect

    View Slide

  19. Fundamentally, there are
    only two architecture
    styles: functional and
    dysfunctional.

    View Slide

  20. !
    @timallenwagner
    The Serverless Manifesto
    1. Functions are the unit of deployment and scaling
    2. bla
    3. bla
    4. bla
    5. Never pay for idle
    6. bla

    View Slide

  21. !
    @yochayk
    Applied Serverless Design
    Patterns
    1. Function Chaining
    2. ASync HTTP (HTTP 202)
    3. Fanout (Parallel)
    4. Fanout + Fan-in
    5. Long Running Function with Timeout

    View Slide

  22. !
    @ben11kehoe
    What's Missing From
    Serverless Providers
    Node is the WRONG runtime for serverless

    View Slide

  23. !
    @ben11kehoe
    What's Missing From Serverless Providers
    Node is the WRONG
    runtime for serverless

    View Slide

  24. !
    @ben11kehoe
    What's Missing From Serverless Providers
    Node is the WRONG
    runtime for serverless
    (because it’s making you do async wrong)

    View Slide

  25. Greenspun's tenth rule
    Any sufficiently complicated C or Fortran program contains an ad-
    hoc, informally-specified, bug-ridden, slow implementation of
    half of Common Lisp.
    tl;dr: LISP did it first

    View Slide


  26. What LISP can
    Teach You About
    Serverless Patterns

    View Slide

  27. LISP
    !"
    Clojure

    View Slide

  28. map/pmap (a.k.a. Fan-Out)
    (map some-function some-data)
    Apply some-function to each entry of the array of data in
    some-data. Then return the result as a new array. In parallel:
    use pmap.
    Why? To process lots of data.

    View Slide

  29. apply (a.k.a. Proxy)
    (apply some-function x y z)
    Call some-function with arguments x, y, and z.
    Why? To make the function to be called a variable itself.

    View Slide

  30. comp (a.k.a. Function Chaining)
    (comp some-function some-other-function)
    Create a function that first calls some-function on the
    arguments, and then some-other-function on the results.
    Why? To call multiple services in order.

    View Slide

  31. reduce (a.k.a. Fan-In)
    (reduce some-function some-data)
    Call some-function on the first item of some-data, then call
    some-function again, using the result of the prior invocation
    and the next item in some-data as arguments.
    Why? To compress large data sets into small results.

    View Slide

  32. fold (a.k.a. Fan-In with on Top)
    (fold reducef combined some-data)
    Break some-data into multiple sets, run (reduce reducef) on
    each, then run (combine combinef) on the results.
    Why? To compress really large data sets into small results, in
    multiple steps.

    View Slide

  33. iterate (a.k.a. Endless Function)
    (iterate start-value some-function)
    Create a function that creates a data stream starting with
    start-value from repeated calls to some-function.
    Why? To turn some-function into a data emitter, without
    some-function needing state.

    View Slide

  34. juxt (a.k.a. Parallel Functions)
    (juxt some-function some-other-function)
    Makes a function that calls some-function and some-other-
    function and returns a combined result.
    Why? To combine the results of multiple functions in one call.

    View Slide

  35. memoize (a.k.a. Good Ol’ Cache)
    (memoize some-function)
    Return a cached version of some-function that returns the
    same value for the same arguments.
    Why? To trade slow computing against fast cache lookups.

    View Slide

  36. partial (a.k.a. Wrapper)
    (partial some-function value)
    Creates a function that calls some-function with value as an
    argument, in addition to other arguments.
    Why? To provide default values and make powerful functions
    less dangerous.

    View Slide

  37. That’s all the F you
    need

    View Slide

  38. ⏰❓

    View Slide

  39. Can my Serverless
    Vendor do this?

    View Slide

  40. Probably. You need:
    1. A Serverless (FaaS) Runtime
    2. An Event Passing System
    3. A Document Database with Triggers

    View Slide

  41. !
    @trieloff

    View Slide