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

Elixir - Exploring actor-based systems

Elixir - Exploring actor-based systems

Talk given at PartialConf 2017 in Sofia, Bulgaria

Michał Muskała

September 23, 2017
Tweet

More Decks by Michał Muskała

Other Decks in Programming

Transcript

  1. ELIXIR
    Exploring actor-based systems

    View Slide

  2. ELIXIR
    Exploring actor-based systems
    The good parts

    View Slide

  3. THE COMMUNITY

    View Slide

  4. View Slide

  5. MICHAŁ MUSKAŁA
    http://michal.muskala.eu/
    https://github.com/michalmuskala/
    @michalmuskala

    View Slide

  6. http://omt.tech/
    Orther Mulelid-Tynes Technology, Inc.

    View Slide

  7. THE MODERN COMPUTING

    View Slide

  8. View Slide

  9. View Slide

  10. ACTOR MODEL

    View Slide

  11. Actor Model
    Communicating Sequential Processes
    π-calculus
    Software Transactional Memory

    View Slide

  12. View Slide

  13. FUNCTIONAL PROGRAMMING

    View Slide

  14. • Explicit state
    • Transformation instead of mutation

    View Slide

  15. – José Valim
    “Functional programming is associated with concurrency but it
    was not by design. It just happens that, by making the complex
    parts of our system explicit, solving more complicated issues like
    concurrency becomes much simpler.”

    View Slide

  16. View Slide

  17. View Slide

  18. Switch
    Switch

    View Slide

  19. Server
    Server
    Browser
    Endpoints
    Mobile

    View Slide

  20. View Slide

  21. 2 MILLION
    CONNECTIONS
    on a single server
    https://blog.whatsapp.com/196/1-million-
    is-so-2011

    View Slide

  22. View Slide

  23. View Slide

  24. http://www.phoenixframework.org/blog/the-road-to-2-million-websocket-connections

    View Slide

  25. ELIXIR
    CONCURRENT
    FUNCTIONAL

    View Slide

  26. Sequential code

    View Slide

  27. Sequential code
    Functional code

    View Slide

  28. View Slide

  29. x1 = async_func1()
    x2 = async_func2(x1)
    x3 = async_func3(x2)
    x4 = async_func4(x3)
    x5 = async_func5(x4)
    x6 = async_func6(x5)

    View Slide

  30. async_func1()
    |> async_func2()
    |> async_func3()
    |> async_func4()
    |> async_func5()
    |> async_func6()

    View Slide

  31. View Slide

  32. View Slide

  33. OTP

    View Slide

  34. DB Web Mailer
    Websockets

    View Slide

  35. DB Web Mailer
    Websockets
    Supervisor

    View Slide

  36. Application

    View Slide

  37. View Slide

  38. View Slide

  39. app1@node1
    app1@node2

    View Slide

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

    View Slide

  41. GOALS OF ELIXIR

    View Slide

  42. THE GOALS OF ELIXIR
    • COMPATIBILITY
    • EXTENSIBILITY
    • PRODUCTIVITY

    View Slide

  43. View Slide

  44. THE GOALS OF ELIXIR
    • COMPATIBILITY
    • EXTENSIBILITY
    • PRODUCTIVITY

    View Slide

  45. THE GOALS OF ELIXIR
    • COMPATIBILITY
    • EXTENSIBILITY
    • PRODUCTIVITY
    • PRODUCTIVITY
    • MAINTAINABILITY
    • RELIABILITY

    View Slide

  46. COMPATIBILITY

    View Slide

  47. https://elixir-lang.org/crash-course.html

    View Slide

  48. EXTENSIBILITY

    View Slide

  49. defmodule Test do
    use ExUnit.Case, async: true
    test "math works" do
    assert 1 + 2 == 2
    end
    end

    View Slide

  50. View Slide

  51. from w in Weather,
    where: w.prcp <= 0.0 or is_nil(w.prcp),
    order_by: w.city,
    select: w

    View Slide

  52. defmacro if(condition, clauses) do
    optimize_boolean(quote do
    case unquote(condition) do
    x when x in [false, nil] ->
    unquote(else_clause)
    _ ->
    unquote(do_clause)
    end
    end)
    end

    View Slide

  53. PRODUCTIVITY

    View Slide

  54. View Slide

  55. View Slide

  56. View Slide

  57. View Slide

  58. HEXDOCS
    • https://hexdocs.pm/elixir/String.html
    • https://hexdocs.pm/elixir/1.5.0/String.html
    • https://hexdocs.pm/phoenix/Phoenix.Channel.html
    • https://hexdocs.pm/phoenix/1.2.0/Phoenix.Channel.html

    View Slide

  59. View Slide

  60. View Slide

  61. View Slide

  62. View Slide

  63. View Slide

  64. DEMO

    View Slide

  65. MAINTAINABILITY

    View Slide

  66. RELIABILITY

    View Slide

  67. HOW DO I START?

    View Slide

  68. elixir-lang.org

    View Slide

  69. View Slide

  70. View Slide

  71. • http://elixir-lang.org
    • http://www.erlang.org
    • http://nerves-project.com
    • http://www.phoenixframework.org/

    View Slide

  72. ELIXIR
    Exploring actor-based systems

    View Slide

  73. View Slide