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

Elixir. There and Back Again

Elixir. There and Back Again

Nikolay Sverchkov

March 06, 2018
Tweet

More Decks by Nikolay Sverchkov

Other Decks in Programming

Transcript

  1. View Slide

  2. View Slide

  3. EVIL MARTIANS

    View Slide

  4. EVIL MARTIANS

    View Slide

  5. Nikolay Sverchkov
    @ssnickolay

    View Slide

  6. Battle of facts

    View Slide

  7. Dependencies

    View Slide

  8. ???
    “Welcome email”
    ???

    View Slide

  9. Sidekiq (Redis)
    “Welcome email”
    ???

    View Slide

  10. GenServer
    defmodule EmailSender do
    use GenServer
    def handle_cast({:send, email}, state) do
    # send email
    {:noreply, state}
    end
    end
    # Start the server
    {:ok, pid} = GenServer.start_link(EmailSender, [])
    # This is the client
    GenServer.cast(pid, {:send, “[email protected]"})
    #=> :ok

    View Slide

  11. Sidekiq (Redis)
    “Welcome email”
    [OTP] GenServer

    View Slide

  12. Sidekiq (Redis)
    ???
    “We love cashcache”
    [OTP] GenServer
    ???

    View Slide

  13. Sidekiq (Redis)
    Memcached
    “We love cashcache”
    [OTP] GenServer
    ???

    View Slide

  14. Memcached vs ETS

    View Slide

  15. Sidekiq (Redis)
    Memcached
    “We love cashcache”
    [OTP] GenServer
    [OTP] ETS

    View Slide

  16. Sidekiq (Redis)
    Memcached
    ???
    “Where is my long polling?”
    [OTP] GenServer
    [OTP] ETS
    ???

    View Slide

  17. Sidekiq (Redis)
    Memcached
    AnyCable
    “Where is my long polling?”
    [OTP] GenServer
    [OTP] ETS
    ???

    View Slide

  18. Sidekiq (Redis)
    Memcached
    AnyCable
    “Where is my long polling?”
    [OTP] GenServer
    [OTP] ETS
    Phoenix Channels

    View Slide

  19. Sidekiq (Redis)
    Memcached
    AnyCable
    ???
    Message broker
    [OTP] GenServer
    [OTP] ETS
    Phoenix Channels
    ???

    View Slide

  20. Sidekiq (Redis)
    Memcached
    AnyCable
    RabbitMQ
    Message broker
    [OTP] GenServer
    [OTP] ETS
    Phoenix Channels
    RabbitMQ

    View Slide

  21. View Slide

  22. Wait, it's like…

    View Slide

  23. View Slide

  24. Erlang -> Java
    BEAM -> JVM
    Elixir -> ???

    View Slide

  25. View Slide

  26. Development

    View Slide

  27. ???
    Speed
    ???

    View Slide

  28. Spring + Bootsnap
    Speed
    By Design

    View Slide

  29. Spring + Bootsnap
    ???
    Architecture [DDD]
    By Design
    ???

    View Slide

  30. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Architecture [DDD]
    By Design
    By Design

    View Slide

  31. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    ???
    Umbrella
    By Design
    By Design
    ???

    View Slide

  32. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Hanami?
    Umbrella
    By Design
    By Design
    By Design

    View Slide

  33. Flawless Victory?

    View Slide

  34. I have to rewrite everything
    with Elixir

    View Slide

  35. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Hanami?
    ???
    Debugging
    By Design
    By Design
    Umbrella
    ???

    View Slide

  36. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Hanami?
    Pry
    Debugging
    By Design
    By Design
    Umbrella
    IEx.pry

    View Slide

  37. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Hanami?
    Pry
    ???
    Deploy
    By Design
    By Design
    Umbrella
    IEx.pry
    ???

    View Slide

  38. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Hanami?
    Pry
    Docker\Capistrano
    Deploy
    By Design
    By Design
    Umbrella
    IEx.pry
    Mix\Distillery

    View Slide

  39. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Hanami?
    Pry
    Docker\Capistrano
    ???
    Tests tooling
    By Design
    By Design
    Umbrella
    IEx.pry
    Mix\Distillery
    ???

    View Slide

  40. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Hanami?
    Pry
    Docker\Capistrano
    Rspec\Capybara
    Tests tooling
    By Design
    By Design
    Umbrella
    IEx.pry
    Mix\Distillery
    Espec\Hound

    View Slide

  41. Overtime

    View Slide

  42. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Hanami?
    ActiveRecord (Rom?)
    Docker\Capistrano
    Rspec\Capybara
    Upload Image
    By Design
    By Design
    Umbrella
    Ecto
    Mix\Distillery
    Espec\Hound

    View Slide

  43. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Hanami?
    ActiveRecord (Rom?)
    Docker\Capistrano
    Rspec\Capybara
    Send Email with attachment
    By Design
    By Design
    Umbrella
    Ecto
    Mix\Distillery
    Espec\Hound

    View Slide

  44. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Hanami?
    ActiveRecord (Rom?)
    Docker\Capistrano
    Rspec\Capybara
    Authorization
    By Design
    By Design
    Umbrella
    Ecto
    Mix\Distillery
    Espec\Hound

    View Slide

  45. Spring + Bootsnap
    Trailblazer\Dry(Hanami?)
    Hanami?
    ActiveRecord (Rom?)
    Docker\Capistrano
    Rspec\Capybara
    Update deps
    By Design
    By Design
    Umbrella
    Ecto
    Mix\Distillery
    Espec\Hound

    View Slide

  46. Summary

    View Slide

  47. Good for:
    Monolith
    Microservice
    Terrible for:
    Concurrency
    Key points
    Good for:
    Microservice
    Concurrency
    Terrible for:
    CMS
    Admin panel

    View Slide

  48. Why exactly Elixir?

    View Slide

  49. Why exactly Elixir?
    • Fast learning
    • A lot of job offers
    • http://erlangjobs.ru/
    • High salary (Ruby < Elixir < Go)
    https://t.me/proelixir
    https://wunsh.ru/

    View Slide