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

Our three years with Elixir

Our three years with Elixir

Presentation from the ElixirConf US 2018. Reflections on what makes Elixir special after 3 years of using it.

Maciej Kaszubowski

September 07, 2018
Tweet

More Decks by Maciej Kaszubowski

Other Decks in Programming

Transcript

  1. mkaszubowski94

    View Slide

  2. mkaszubowski94
    Our three years
    with Elixir
    Maciej Kaszubowski

    View Slide

  3. mkaszubowski94

    View Slide

  4. mkaszubowski94
    August 12th, 2015

    View Slide

  5. mkaszubowski94

    View Slide

  6. mkaszubowski94
    %{"cowboy": {:hex, :cowboy, "1.0.2"},
    "cowlib": {:hex, :cowlib, "1.0.1"},
    "decimal": {:hex, :decimal, "1.1.0"},
    "ecto": {:hex, :ecto, "0.15.0"},
    "fs": {:hex, :fs, "0.9.2"},
    "phoenix": {:hex, :phoenix, "0.16.1"},
    "phoenix_ecto": {:hex, :phoenix_ecto, "0.9.0"},
    "phoenix_html": {:hex, :phoenix_html, "2.1.0"},
    "phoenix_live_reload": {:hex, :phoenix_live_reload, "0.6.0"},
    "plug": {:hex, :plug, "0.14.0"},
    "poison": {:hex, :poison, "1.4.0"},
    "poolboy": {:hex, :poolboy, "1.5.1"},
    "postgrex": {:hex, :postgrex, "0.9.1"},
    "ranch": {:hex, :ranch, "1.1.0"}}

    View Slide

  7. mkaszubowski94

    View Slide

  8. mkaszubowski94

    View Slide

  9. mkaszubowski94
    September 6th, 2018

    View Slide

  10. mkaszubowski94
    Elixir 1.0.5 1.6.1
    Erlang/OTP 17 21
    Phoenix 0.16.1 1.3.4
    Ecto 0.15.0 2.2.7

    View Slide

  11. mkaszubowski94
    2+ years in production

    View Slide

  12. mkaszubowski94
    70_000+ Lines of Code

    View Slide

  13. mkaszubowski94
    Happy Developers

    View Slide

  14. mkaszubowski94
    What made us stay
    with Elixir
    Maciej Kaszubowski

    View Slide

  15. mkaszubowski94
    Functional programming
    Massive concurrency
    Distribution
    Fault tolerance
    OTP

    View Slide

  16. mkaszubowski94
    “The Rails Way”

    View Slide

  17. mkaszubowski94
    www.youtube.com/watch?v=lDKCSheBc-8

    View Slide

  18. mkaszubowski94
    We’re not building
    Phoenix applications

    View Slide

  19. mkaszubowski94
    View
    Controller Model

    View Slide

  20. mkaszubowski94
    App
    Web interface

    View Slide

  21. mkaszubowski94
    Web interface

    View Slide

  22. mkaszubowski94
    Phoenix Contexts

    View Slide

  23. mkaszubowski94
    Concurrency

    View Slide

  24. mkaszubowski94
    Massive Concurrency

    View Slide

  25. mkaszubowski94

    View Slide

  26. mkaszubowski94

    View Slide

  27. mkaszubowski94

    View Slide

  28. mkaszubowski94

    View Slide

  29. mkaszubowski94

    View Slide

  30. mkaszubowski94

    View Slide

  31. mkaszubowski94
    “We do not have one web-server
    handling 2 millions sessions. We have
    2 million webservers handling one
    session each.”
    Joe Armstrong

    View Slide

  32. mkaszubowski94
    Behaviour, fault tolerance
    and performance become
    separate concerns

    View Slide

  33. mkaszubowski94

    View Slide

  34. mkaszubowski94

    View Slide

  35. mkaszubowski94

    View Slide

  36. mkaszubowski94

    View Slide

  37. mkaszubowski94
    www.youtube.com/watch?v=5SbWapbXhKo

    View Slide

  38. mkaszubowski94
    What has changed?

    View Slide

  39. mkaszubowski94
    Not much, really…

    View Slide

  40. mkaszubowski94
    We’ve learned more
    about Elixir

    View Slide

  41. mkaszubowski94
    But mostly, we’ve
    learned more about
    software engineering

    View Slide

  42. mkaszubowski94
    But mostly, we’ve
    learned more about
    our domain logic

    View Slide

  43. mkaszubowski94
    Elixir is transparent

    View Slide

  44. mkaszubowski94
    Disadvantages

    View Slide

  45. mkaszubowski94
    Intensive computations?
    Machine learning?
    Hard real-time systems?

    View Slide

  46. mkaszubowski94
    Massive concurrency
    Distribution
    Fault tolerance
    OTP

    View Slide

  47. mkaszubowski94
    Having great tools can
    make us ignorant

    View Slide

  48. mkaszubowski94

    View Slide

  49. mkaszubowski94
    AWS Lambda

    View Slide

  50. mkaszubowski94
    Distributed Data
    Persistent Actors
    Cluster Sharding
    Streaming

    View Slide

  51. mkaszubowski94
    AWS Lambda

    View Slide

  52. mkaszubowski94
    Full isolation
    No shared memory
    Communication through events
    Activities scheduled by the runtime
    AWS Lambda

    View Slide

  53. mkaszubowski94
    AWS Lambda

    View Slide

  54. mkaszubowski94
    “It is not once, nor twice, but times
    without number that the same idea
    makes its appearance in the world.”
    Aristotle

    View Slide

  55. mkaszubowski94
    Software Architecture
    Domain Driven Design
    Distributed Systems
    Algorithms / Data Structures
    Design Patterns (!) / OO

    View Slide

  56. mkaszubowski94
    “Just modules and functions…”

    View Slide

  57. mkaszubowski94
    Software Architecture
    Domain Driven Design
    Distributed Systems
    Algorithms / Data Structures
    Design Patterns (!) / OO

    View Slide

  58. mkaszubowski94
    www.youtube.com/watch?v=lDKCSheBc-8

    View Slide

  59. mkaszubowski94
    We’re not building
    Phoenix applications

    View Slide

  60. mkaszubowski94
    We’re not building
    Elixir applications

    View Slide

  61. mkaszubowski94
    Let’s not become
    “Elixir Developers”

    View Slide

  62. mkaszubowski94
    Thanks!
    Maciej Kaszubowski

    View Slide

  63. mkaszubowski94
    • http://haskell-distributed.github.io (Cloud Haskell)
    • https://dotnet.github.io/orleans/ (Microsoft Orleans)
    • https://github.com/SpaceTime-IoT/erleans (Orleans for Erlang)
    • https://doc.akka.io/docs/akka/2.5.4/scala/index.html (Akka)
    • www.youtube.com/watch?v=5SbWapbXhKo (Solid Ground by Saša Juric)
    • www.youtube.com/watch?v=lDKCSheBc-8 (Phoenix Is Not Your Application
    by Lance Halvorsen)
    Links

    View Slide