abdelaz3r

abdelaz3r

Hi, elixir programmers (and at first I hope you would excuse my English),

I’m developing a backend server for a video game project. It is basically a real-time multi-agent simulation. Agents are implemented as GenServer, and of course, I make intensive use of Supervisor, DynamicSupervisor, and Registry. That part is fine. I now struggle trying to make multiple simulations under the same supervision tree. The idea is to have a GameSupervisor that can spawn a new instance of the simulation. Each instance is a Supervisor that has some DynamicSupervisor that manage GenServer. Each simulation is totally closed to the outside (eventually, I’ll have to connect the simulations to a socket dispatcher).

The issue that I now encounter is for “dynamic” DynamicSupervisor, and “dynamic” Registry. These ones need to have a proper name, but it can only be atoms. So I’m trying to figure out how to deal with this problem.

My current solution (which is absolutely not optimal, you’ll see why) it create, for Supervisor and Registry only, on runtime atoms, from strings. Agents (GenServer) are registered using Registry mechanism. It could be fine (I won’t create thousands of instances at the same moment) but it will eventually reach the atom number limit.

Here is a picture of an example process diagram that I use now. Elixir.Game is an application, it starts and Instance.Registry and a Game.Supervisor which is a DynamicSupervisor. There, I can spawn an instance (<0.474.0> or <0.510.0>) which are supervisors. Every following node that begins with “Instance*_” is either a Supervisor or a Registry, that have a dynamic name (strong to atom conversion). And then DynamicSupervisors spawn Agents which are registered into the Registry.

(It appear that I don’t have rights to upload images, so here is the link DELIMAJITU | Situs Resmi Game Angka & Link Login Aman)

What would be the Elixir way of achieving that?

Showing Posts 1 to 4

Phillipp

Phillipp

You can also use tuples for the name in the registry.

I am building a position tracking service and my Supervisor which is a child under a DynamicSupervisor uses {:position_tracker, user_id} as name.

Then one of its children uses {:position_tracker, user_id, :state} as name (e.g. name = {:via, Registry, {@registry, {:position_tracker, user_id, :state}}}).

That way, you don’t need to generate atoms on runtime.

abdelaz3r

abdelaz3r OP

Ok, thanks a lot for the hint.

I have tryied rewriting my code considering your advise and it seems to work fine.

However it appear that we can’t register Registry name via the via mechanism. So I ended up using only one “global” registry, which may be ok, but I worried about the bottleneck that this Registry would become. Since I’ll have a quite big number of agent for each instance, they all would try to reach this Registry. What about that?

Here is the previous node diagram :

And here is the new one :

Phillipp

Phillipp

One registry should be fine. As far as I know, it uses ETS so it’s quite fast. I wouldn’t worry about it until I see some real performance degradation related to it.

abdelaz3r

abdelaz3r OP

Ok fine, I’ll go with that so.

Thanks again a lot for that.

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New

Other Trending Topics Top

mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
webofbits
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself. My main conc...
#ai
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews