Congrats on the success! I’ve come to view Elixir/Erlang as providing a nice toolbox for distributed applications but you’ve still got to craft it. We do an embedded IoT Sensor at my company, and I was super happy that moving a process from one node to two was super simple. I can give some thoughts on Riak core.
Regarding Riak core, it’d likely be stable enough despite having a hiatus, as in my (somewhat limited) experience that once an Erlang/Elixir project is stable it doesn’t require too much babysitting or aging. Also Riak was/is run by companies with large data stores and most stories were that Riak (ala Erlang) rarely “broke” but flexed and might slow down.
I played around with Riak core a bit for a potential KV/data processor and store. It’d take a little bit to “wrap your head” around the Riak core model but at its core it’s relatively straightforward. It’s main benefits would be that there is a “virtual hash ring” that maps your request ID/trip ID to a hash which is then mapped to specific Erlang node(s) that is a stable mapping. Although I can’t recall if Riak core handles long living processes, but you could easily lookup or create local node processes or ets entries. Riak core does provide hooks to handle transferring data (or trips) to new nodes (draining, etc).
Riak core allows you to specify how many nodes to duplicate your request to and allows the Riak client to handle missing nodes and their responses. You can specify just one node to call in Riak client, but I could see using 2/3 redundant nodes as being a possible way to provide redundancy for high availability. Essentially something like “riak_call(:gps update, 1234, nodes: 3)” wherein the call would replicate the action across three nodes. Then if a specific node goes down you wouldn’t loose your (cached?) data. I’d only go that duplicated route if you don’t need to run expensive calculations or don’t mind the extra server overhead… And depending on your data, storing your data using rocksdb wouldn’t be infeasible either.


















