4 ms·
We’ve used Phoenix for 5 years for an important internal project in a large tech company. We don’t do a ton with Phoenix itself, it’s just a simple MVC web app
by bluesnowmonkey 4y ago
We’ve used Phoenix for 5 years for an important internal project in a large tech company. We don’t do a ton with Phoenix itself, it’s just a simple MVC web app for managing a more complicated Elixir thing. No Liveview or even Ecto, for instance. But it has worked just fine.
We push Elixir to its absolute limits, though, and after years of being on call for a production Elixir system, I’m still totally in love with it. Plenty of experience with Ruby, Python, PHP, Java. Elixir is a game changer. If I build basically anything in the future it will be in Elixir. And it will probably need some kind of web interface, so that will definitely be Phoenix.
- nazka 4y agoWhat do you mean by pushing it to the limit? And do you have any insight of what’s it’s like to be on call with Elixir? From what I saw it has many great tools to debug problem. Also the “it never crashes” is quite appealing.
- bluesnowmonkey 4y agoPushing it in terms of performance and complexity. We have high QPS and need low latency, a few milliseconds to do a lot of work. Baseline performance of nice idiomatic Elixir is good enough mostly for general business logic. Tools like Recon help you find bottlenecks. You can move state off heap into ETS to reduce GC, or share a public ETS table to eliminate inter-process communication. You can dynamically recompile a module at runtime when configuration changes. You can move really hot loops into NIFs. These are all relatively easy once you know how and really good at eliminating bottlenecks. On call is great. Tail latency (p99.9 and up) is great, much better than Java, due to per-process vs stop-the-world GC. Remote console is a superpower, lets you debug in production. Minor flakiness tends to get handled silently be supervised processes crashing and getting restarted. Elixir stuff just pages us much, much less than other languages.