Putting the F in FaaS

4841b262608160b87e5e9766ee041a2a?s=47 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

4841b262608160b87e5e9766ee041a2a?s=128

Lars Trieloff

February 16, 2018
Tweet

Transcript

  1. Putting the F in FaaS

  2. ! @trieloff

  3. ⚡⚡⚡

  4. ! @adobeio

  5. Opinions are my own

  6. Ideas are not

  7. ⚡ Putting the F in FaaS

  8. WTF?

  9. WT ?

  10. F is for Functions

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

  12. Functions in FaaS

  13. Stateless

  14. Stateless Short-lived

  15. Stateless Short-lived Single-purpose

  16. Stateless Short-lived Single-purpose Boring

  17. !"

  18. ⚡ Serverless Functional Patterns for the Aspiring Enterprise Architect

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

  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
  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
  22. ! @ben11kehoe What's Missing From Serverless Providers Node is the

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

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

    WRONG runtime for serverless (because it’s making you do async wrong)
  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
  26. ⚡ What LISP can Teach You About Serverless Patterns

  27. LISP !" Clojure

  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.
  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.
  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.
  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.
  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.
  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.
  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.
  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.
  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.
  37. That’s all the F you need

  38. ⏰❓

  39. Can my Serverless Vendor do this?

  40. Probably. You need: 1. A Serverless (FaaS) Runtime 2. An

    Event Passing System 3. A Document Database with Triggers
  41. ! @trieloff