Twitter clone in 15 minutes is mind-blowing if you are aware what it takes to build something similar with other stacks.
Oh, yeah! That one’s also great!
My first pick is definitely The Soul of Erlang and Elixir as well, but as a followup to that I also like the practical demo in (by an employee of Quicken/Rocket Mortgage):
This is a good talk, but right in the middle Saša tells the audience not to use Elixir for distributed systems. The second sentence on Elixir’s website says:
Elixir leverages the Erlang VM, known for running low-latency, distributed and fault-tolerant systems
I’m not sure how I can try to convince my team to try Elixir to build a new distributed system while also showing them a talk that says “do not use Elixir” for distributed systems.
Does he? What I remember him saying is to not use the built in support for distribution in the BEAM VM, but rather look at libraries e.g. Swarm.
If that’s what he meant it wasn’t apparent to me.
I like the talk very much and I think this just shows honesty of a tech person. If someone tell you: here is a distributed solution that can scale linearly from one node to one thousand nodes, I will be very skeptical. Of cause using Elixir for a distributed system would has its own pros and cons and sweet spot, but it is beyond the scope of Saša’s talk.
Except he didn’t say it had a sweet spot. He said don’t use it for distributed systems.
Some people use it in production, some don’t, there are serious problems all the way, but they are mostly mechanical and could be fixed …
He could have phrase it more positively but this is not “don’t use it for distributed systems” but rather “use it at your own discretion and brace yourself for some rough ride”
Another talk by one of my coworkers, @bryanhunter –
I presume you’re refering to the part at 32:33 when I say that “BEAM distribution is plagued with a bunch of serious issues”. This definitely came out stronger than I intended (I guess I got carried away in the heat of the moment ), and somewhat sloppy. What I wanted to say is that there are some issues & challenges with distributed BEAM (aka distributed Erlang). I talked about those issues during the Q&A, which is unfortunately not recorded, but you can find the summary in this Redis response.
First, it’s worth noting that distributed BEAM is not the only way how you can build distributed systems running on multiple machines. Many other languages don’t even have such high-level support for that, and people still build distributed systems with them, using various techniques such as coordinating through 3rd party services (e.g. database, message queue, k-vs such as etcd or Redis, …), and/or building their own in-cluster communication protocol on top of TCP or HTTP.
Nothing stops you from doing the same with BEAM languages, i.e. bypassing distributed BEAM completely. For example, you could use Oban to distribute jobs accross multiple instances of BEAM nodes which are not even connected into a cluster. A few months ago I advised one client to do exactly that, instead of trying to coordinate things using distributed BEAM, because I believe that in this particular case such approach would simplify things significantly. Over the past years I’ve seen various reports of people building large-scale distributed systems with Erlang and Elixir, but without using distributed BEAM. It’s worth mentioning Partisan as an example of this approach.
That said, I also acknowledged that people use distributed BEAM in production. I don’t think I’ve seen a single BEAM-focused conference where there wasn’t at least one talk about distributed BEAM in practice. So I definitely don’t think that distributed BEAM is not usable, it’s just that I think it’s not as simple as it could be, or as it look like in the demo (though admittedly, distributed systems are never easy).
Finally, in the talk I also mentioned that distributed BEAM issues are mechanical, and that they can be fixed with time and effort. Only a few days after I gave the talk, OTP 22 has been released with one important improvement in this area. I’ve seen some improvements in the ecosystem too. For example, I’m excited about the ra library, which seems like a really solid and well tested Raft implementation in BEAM. While this is still relatively low-level, I feel it could be used as a toolkit for building simpler-to-use higher-level abstractions for distributed systems.
So tl;dr I never said “don’t use Elixir for distributed systems”, and that’s definitely not what I meant to communicate when I mentioned that there are some issues
Excellent. My take away from this and the reddit thread is as of OTP 22, small scale, (say 50 nodes) same data center clustering using nothing but the built-in distributed BEAM is already a viable solution for some problem domains. I’d like to read some recent real world testimonies in this regard.
Saša, thanks for responding to this thread. I want my teammates to watch this talk and was worried that the part at 32:33 would turn them off from Elixir, especially when one of Elixir’s tag line is “Distributed”. I’ve finally got a team here at Microsoft that’s willing to take a look at Elixir and I want that first look to go really well!
You can check Zandra Norman - Scaling Distributed Erlang if you want a deeper look into how distributed Erlang (and Elixir by extension) might work in the future.
Not a talk, but the opening chapter and preface in Programming Phoenix is brilliant - and it’s free to download too
First mentioned here:
And again here:
I’ve got slides only, but this talk has been very well received. I probably need to give it somewhere that I can record it one day.
Right, that was the one that came to mind for me as well. If you are presenting to a group of developers that are full-stack, the LiveView demo that Chris McCord gave is very impressive. You have to watch Chris’ presentation more than once to fully appreciate all that he did so quickly with Elixir/Phoenix/LiveView.
I liked this one when I was first getting into Elixir: Elixir by the Bellyful - Bryan Hunter. It’s a little older, but made it super simple to understand.
Honestly, I think Sasa’s talk is one of the most impressive conference talks I’ve seen online. I always loved this slide from this talk:
In the The Language of the System talk, Rich Hickey comes to the same conclusion, namely that Erlang provides a holistic approach to building systems. The main challenge is that the industry prefers heterogeneous architectures, for various reasons.
I always recommend Dave Thomas keynote from the 2014 ElixirConf: https://youtu.be/5hDVftaPQwY