Through Erlang, Elixir developers have access to some amazing tools for building resilient distributed systems. riak_core is one such tool: it provides the framework behind Riak’s high availability KV store. In this talk, I’d like to explore some unconventional architecture by using riak_core and Phoenix to build fault-tolerant stateful web applications. What happens when the app servers are also the database nodes? Can we avoid some of the traditional pitfalls of stateful servers? Is this a remotely good idea? Let’s take a look!
Objectives (targeting ~40 minutes):
1) Stateless/stateful setups for web applications — what do these words mean? 5 min
2) CAP in brief, consistent hash rings for distributing work: what are the tradeoffs? 5 min
3) riak_core - what does it do? Paraphrasing Mariano Guerra’s excellent work. 10 min
4) Build a Phoenix application that cohabitates on a riak_core hash ring. What superpowers do we gain from this? What do we have to watch out for? Can we do cool tricks with load balancing or channels? In-memory databases for super-speedy responses? 15 min
5) Loosely comparable systems in production/prior art (Microsoft Orleans, Facebook Scuba, others) 5 min
Intermediate+ Elixir programmers, web developers, students of distributed systems.
Ben works on service discovery, maps of the infrastructure, and human<->system reliability.
In short, elixir -e 'use Bitwise; [296, 260, 276, 288, 176] |> Stream.map(fn x -> x |> (&>>>/2).(2) end) |> Enum.take(5) |> IO.puts # JAPH, :)'