To use dynamic processes, I would go for DynamicSupervisor.
To ensure there is only one process by device in a cluster, I would refer to How to use the registry for global process?
Maybe Erlang global would be enough, but You might use libraries as mentionned in linked post.
To speed up things, I would use ETS table.
And I would use all tools and benefits coming from OTP… not only GenServer 
You might also find some useful information here






















