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

Elixir dev to prod

Elixir dev to prod

A talk about the road taken by us at Xerpa using Elixir since day-0.

Guilherme de Maio, nirev

September 23, 2016
Tweet

More Decks by Guilherme de Maio, nirev

Other Decks in Technology

Transcript

  1. Elixir

    Dev to Prod
    Challenges starting from Zero
    @nirev
    Guilherme Nogueira

    View full-size slide

  2. Stack
    Elixir 1.3 + Phoenix
    ClojureScript + Reagent
    PostgreSQL
    ElasticSearch
    Cassandra
    Others: C#, Python, C, Bash, Jenkins
    (In Production)

    View full-size slide

  3. What was the
    road like?

    View full-size slide

  4. Easy steps
    1.gather a team
    2.code
    3.?????
    4.PROFIT

    View full-size slide

  5. Actually…
    1. Why Elixir?
    2. Assembling a team
    3. Starting to Code
    4. Going to production
    5. Feature Cycles
    6. Monitoring
    7. The Good, The Bad, and The Ugly

    View full-size slide

  6. Why Elixir?
    Functional Programming; so what?

    View full-size slide

  7. Why Elixir?
    Functional Programming; so what?
    • CPUs are not getting faster for single-thread apps
    • Concurrency is the next major thing for development
    • NO MORE FREE LUNCH (2005):
    • Java5
    • WindowsXP
    • RoR launching on December

    View full-size slide

  8. Why Elixir?
    Functional Programming; so what?
    • What does it have to do with Functional Programming?
    • FP is easier for concurrency: 

    mainly because immutability + guarantees

    View full-size slide

  9. Why Elixir?
    Functional Programming; so what?
    • Actually, FP is a very old paradigm (even older than OOP):
    • 1960 → Lisp
    • 1973 → ML
    • 1980s → Lazy langs: Miranda, KRC, SASL, Orwell...
    • 1986 → Erlang
    • 1990 → Haskell 1.0

    View full-size slide

  10. Why Elixir?
    Functional Programming; so what?
    • Elixir embraces distributed computation and concurrency
    • Builds upon battle-tested Erlang
    • Enhances it with Metaprogramming and a arguably easier

    syntax
    • Created by the great VALINHO

    View full-size slide

  11. Assembling a
    Team

    View full-size slide

  12. Assembling a Team
    or, How I learned Elixir
    • Few Elixir programmers around (what a surprise!)
    • But increasingly number of people interested in it

    and coming from all kinds of background
    • No “competition”
    • The first one is the hardest (lol)

    View full-size slide

  13. "Os alquimistas
    estão chegando"
    Jorge Ben

    View full-size slide

  14. "Os alquimistas
    estão chegando"
    Jorge Ben
    George Guimarães

    View full-size slide

  15. Starting to
    Code

    View full-size slide

  16. Starting to Code
    Elixir first impressions
    • mix is awesome
    • plenty of editors: atom, vim, IntelliJ 

    Emacs + Alchemist = <3 <3 <3
    • Documentation is taken seriously
    • Quite easy to get acquainted to the language
    • OTP on the other hand….

    View full-size slide

  17. Starting to Code
    Elixir first impressions
    • Elixir takes the best ideas from a lot of languages:
    • |> from F#
    • Protocols e Metaprog from Clojure
    • the whole OTP from Erlang
    • Umbrella Apps from .NET
    • Ecto query DSL from LINQ
    • Doctest from Python …..

    View full-size slide

  18. Starting to Code
    Elixir first impressions
    • Everything is immutable.
    • There is a compiler
    • Elixir is pragmatic
    • Performance is great. GC is per-process
    • Documentation & tooling are take seriously
    • Macros
    • The runtime & OTP are AWESOME. 

    Every process is preempted. No bad neighbors.

    View full-size slide

  19. Going to
    Production

    View full-size slide

  20. Going to Production
    We got this (somewhat)
    • Quick first way: Heroku + Elixir build pack
    • works great
    • just one server though and 

    we only used PostgreSQL at the time

    View full-size slide

  21. Going to Production
    We got this (somewhat)
    • Delivery Pipeline:
    • SemaphoreCI embraced Elixir quite early

    works great, very easy to configure
    • But we just love Jenkins
    • Did not test any other

    View full-size slide

  22. Going to Production
    We got this (somewhat)
    • Delivery Pipeline:
    • SemaphoreCI embraced Elixir quite early

    works great, very easy to configure
    • But we just love Jenkins
    • Did not test any other

    View full-size slide

  23. • Deployment, part 2:
    • PITA to use GraphicsMagick in Heroku

    (we have a buildpack for it on github)
    • Needed:
    • ElasticSearch
    • More control
    Going to Production
    We got this (somewhat)

    View full-size slide

  24. • Deployment, current: AWS
    • everything managed by Terraform + Ansible
    • Phoenix app compiled and packaged in .deb
    • deb is a no-brainer for us
    • no hot-deploy
    Going to Production
    We got this (somewhat)

    View full-size slide

  25. • # TODO:
    • Deployment with distributed Erlang nodes
    • Better understand how Elixir releases
    should be done
    Going to Production
    We got this (somewhat)

    View full-size slide

  26. Feature
    Cycles
    AKA build stuff

    View full-size slide

  27. Feature Cycles
    Building Stuff with Elixir
    • Core libs (Ecto, Phoenix, Plug) are 

    incredibly reliable!
    • releases are hard and not 12factor
    • hot code reloads are not that simple
    • The Ecosystem is really young

    View full-size slide

  28. Feature Cycles
    Building Stuff with Elixir
    • The Ecosystem is really young
    • no usable ElasticSearch client
    • (at the time) no json-api library
    • (at the time) no good auth libs
    • nothing to handle images

    github.com/Xerpa/exmagick :)

    View full-size slide

  29. Feature Cycles
    Building Stuff with Elixir
    You gotta get your hands dirty!

    View full-size slide

  30. Feature Cycles
    Building Stuff with Elixir

    View full-size slide

  31. Feature Cycles
    Building Stuff with Elixir

    View full-size slide

  32. Feature Cycles
    Building Stuff with Elixir

    View full-size slide

  33. Feature Cycles
    Building Stuff with Elixir

    View full-size slide

  34. Feature Cycles
    Building Stuff with Elixir
    You gotta get your hands dirty!

    View full-size slide

  35. Monitoring
    Everybody ships bugs
    • Suddenly, we were reminded that 

    writing software IS HARD
    • And when going too fast, 

    things are going to brake

    View full-size slide

  36. Monitoring
    Everybody ships bugs

    View full-size slide

  37. Monitoring
    Everybody ships bugs
    • Plug n Play solutions are not that common:

    Honeybadger officially supports it

    AppSignal in alpha testing
    • the BEAM is highly instrumentable
    • Great talk about it by Milhouse @ ElixirConf2016

    https://confreaks.tv/events/elixirconf2016

    View full-size slide

  38. Monitoring
    Everybody ships bugs
    • But we monitor machine states and so what with
    SENSU, which is great!

    View full-size slide

  39. The Good, The Bad

    and The Ugly
    Key takeaways

    View full-size slide

  40. Takeways
    Was it worth?
    • Starting with a new, evolving language is hard
    • We had to figure out a lot of stuff ourselves
    • And we got it wrong a few times:
    • Trying to Haskellize Enums to use with Ecto
    • No good cassandra client (lacks a lot of features)
    • Not using Ecto.Type correctly from the start
    • Dates

    View full-size slide

  41. Takeways
    Was it worth?
    • But we did get a lot of things right, and the platform is

    AMAZING
    ~3k commits, 700 PRs

    View full-size slide

  42. Takeways
    Was it worth?
    • Elixir is very promissing, and growing FAST
    • The community learns a lot from other languages
    • The community is helpful, open, inclusive and active
    • You have to be willing to deal with not-ready things and

    contribute yourself to the ecosystem
    • But even so, it’s highly recommended

    View full-size slide

  43. Thanks!
    https://xerpa.recruiterbox.com/
    Estamos contratando!
    @nirev
    Guilherme Nogueira

    View full-size slide