Look for any podcast host, guest or anyone

Listen

Description

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.