We talk with developers from the team here at SmartLogic about our current practices on deploying Elixir and Phoenix in production. Dan Ivovich - Director of Development Operations @ SmartLogic Learn more about how SmartLogic uses Phoenix and Elixir. (https://smartlogic.io/phoenix-and-elixir) 00:00 - Fade In 00:30 - Introductions to Eric, Dan and SmartLogic Dan Ivovich - Director of Development Operations @ SmartLogic Eric Oestrich - Developer, Elixir Lead @ SmartLogic Justus Eapen - Full stack developer @ SmartLogic Introduced to Elixir by an old colleague. 1:20 - What Elixir projects do you have in production? Several client projects in production. Several Mobile Apps with APIs powered by Phoenix and Elixir. Baltimore Water Taxi. A digital marketplace. And more! 1:57 - Advantages and disadvantages to using Elixir. We made the switch when a colleague was stoked about Functional Programming and introduced us to Elixir. We were won over by the performance and rich feature sets, OTP, etc. 2:43 - Where are we hosting our Elixir Apps? Heroku AWS Linode Digital Ocean 6:20Deployment process, tools, scripting Ansible - for underlying VPS’s, servers, and more recently deployment itself. (Similar to Capistrano). Distillery Mix.release 7:18 - Zero Downtime Deployments Old school load balancers and rolling restarts 7:46 - What are the performance metrics like? Comparatively. Ruby ends up with memory leaks. That doesn’t happen with Elixir. Memory utilization is flat and low no matter what. “Phenomenal response times” 8:54 - How does Eric think about clustered applications in Elixir? Going Multi Node (https://www.youtube.com/watch?v=lCUKQnkjajo (https://www.youtube.com/watch?v=lCUKQnkjajo)) Pg2 (http://erlang.org/doc/man/pg2.html) - process groups Mnesia (http://erlang.org/doc/man/mnesia.html) distributed database (beware!) “Just sending messages to pids because Erlang is great” Swarm (https://github.com/bitwalker/swarm) / Horde (https://github.com/derekkraan/horde) 12:40 - How do we handle background tasks? Started with verk (https://github.com/edgurgel/verk) Recently becoming more comfortable with spinning up GenServers (https://hexdocs.pm/elixir/GenServer.html) “The language itself is built to be concurrent.” 15:06 What libraries are we using in prod? First thing: You don’t need a whole lot because the language is so well designed. Phoenix (https://phoenixframework.org/) - web framework Ecto (https://hexdocs.pm/ecto/Ecto.html) - sort of an ORM Distillery (https://github.com/bitwalker/distillery) - for releases Bamboo (https://github.com/thoughtbot/bamboo) - for sending emails Quantum (https://github.com/c-rack/quantum-elixir) - for task scheduling Timex (https://github.com/bitwalker/timex) - for dates and times, and timezones Cachex (https://github.com/whitfin/cachex) - for caching 18:20- What third party integrations have we attempted Stripe Square Twilio Mindbody Always building our own clients. Using HTTPoison (https://github.com/edgurgel/httpoison) 19:58Has Elixir ever saved the day in production? It’s saved many days by PREVENTING ISSUES. Systems are architected for reliability and fault-tolerance. 21:48 - Where do supervision trees come from? What is OTP? OTP is an Erlang standard lib Includes supervision trees, genservers, ETS, and a lot of stuff we don’t even know about! gen_tcp (http://erlang.org/doc/man/gen_tcp.html) Mnesia dets (http://erlang.org/doc/man/dets.html) 23:43- Tips for devs considering running elixir in production. Jump in and read the docs Understand how systems boot, distillery releases, config providers, etc. “Good server monitoring hygiene” “DIVE IN!” 19:54 Outro Learn more about how SmartLogic uses Phoenix and Elixir. (https://smr.tl/2Hyslu8) Special Guest: Dan Ivovich.