<div dir="ltr">In addition to the already mentioned, Game Analytics did a scheduler called gascheduler:<div><br></div><div><a href="https://github.com/GameAnalytics/gascheduler">https://github.com/GameAnalytics/gascheduler</a><br></div><div><br></div><div>which I haven't tried out or read the source code of. But it does sound like a fit for the problem at hand.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 2, 2015 at 7:20 PM, Michael Truog <span dir="ltr"><<a href="mailto:mjtruog@gmail.com" target="_blank">mjtruog@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 09/02/2015 04:52 AM, Alex Hudich wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi!<br>
<br>
I am working on a piece of software which requires start of massive amount of workers (using spawn_link) but now I face with the limitation of one server for handling all the workers.<br>
All workers start with simple spawn_link then do their work and return some piece of data to a caller by sending a message.<br>
<br>
I wonder if I can unload master server and add some additional erlang nodes to perform this job. Of course I looked into pool and slave modules but it seems (beside of setting up ssh keys) does not support dynamic adding or deleting of nodes.<br>
Actually I want to know how to build some node supervising module that allows incoming connections from a new slave nodes and automatically plug them into some pool of nodes (including master) for spawning processes. Also it has to exclude down nodes and load balancing workers amongst nodes (so it has to collect some load statistics from nodes)<br>
<br>
<br>
Could you guys help me to find such component or give me advice how to build such thing?<br>
<br>
Thank you.<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br>
</blockquote></div></div>
If you use the pools pg2 (<a href="http://www.erlang.org/doc/man/pg2.html" rel="noreferrer" target="_blank">http://www.erlang.org/doc/man/pg2.html</a>) or cpg (<a href="https://github.com/okeuday/cpg/" rel="noreferrer" target="_blank">https://github.com/okeuday/cpg/</a>)<br>
and then use node auto-discovery with something like <a href="https://github.com/okeuday/nodefinder/" rel="noreferrer" target="_blank">https://github.com/okeuday/nodefinder/</a> .  That can provide<br>
a way of distributing traffic among processes selected from the pool as nodes are added.  CloudI uses cpg with nodefinder<br>
to make this work with CloudI services, and you could use the same functionality with the cloudi_core dependency<br>
(<a href="https://github.com/CloudI/cloudi_core/" rel="noreferrer" target="_blank">https://github.com/CloudI/cloudi_core/</a>) due to the cloudi_service_api module supporting the API at<br>
<a href="http://cloudi.org/api.html#CloudI" rel="noreferrer" target="_blank">http://cloudi.org/api.html#CloudI</a> .<br>
<br>
Load balancing among nodes is done internally due to the pool lookup.  For monitoring the load to add or remove nodes<br>
you could add some basic monitoring.<br>
<br>
Best Regards,<br>
Michael<div class="HOEnZb"><div class="h5"><br>
<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">J.</div>
</div>