I found this write up extremely useful, along with relevant chapters from Elixir in action, the many posts by Fred Hebert and the many videos from beam confs and the likes.
However I doubt that there will ever be a book or resource explaining how to deploy for scalability in the abstract. Apps, even running on the beam, tend to be complex systems, with highly heterogeneous requirements. Thus, the meaning of scaling, and availability will be highly dependent on the app and the requirements.
As an example, we’ve shipped an app recently, it receives events from sensors that produce (after heavy processing) data that we use to update the database.
With the current implementation, on our server, we can process 10000 events per minute, but it’ll take an hour to update the db accordingly. So in fact we can process 10k events per hour. We need consistency, so a distributed system with eventual consistency can’t work for us. So, for us scaling will mean a bigger connection pool, or improving our updates (possibly with caching) or getting rid of the updates.
Scaling is hard, even with the beam.
That being said, we currently get 30 to 50 events per hour, so I’m not worried.