<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="67891" data-post-id="67891">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mkunikow" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mkunikow/120/235_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mkunikow
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>When you want to access Kafka you go to ZK and it points you direct to node.<br>
In this way you can add nodes for scaling and client does not need to know about this …<br>
The same works Solr <a href="http://lucene.apache.org/solr/" class="inline-onebox" rel="noopener nofollow ugc">Welcome to Apache Solr - Apache Solr</a></p>
<p>But ZK can be also problematic</p><aside class="onebox allowlistedgeneric" data-onebox-src="https://se-radio.net/2015/06/episode-229-flavio-junqueira-on-distributed-coordination-with-apache-zookeeper/">
  <header class="source">
      <img src="https://se-radio.net/wp-content/uploads/2023/11/cropped-ser-logo-icon-500-32x32.png" class="site-icon" alt="" width="32" height="32">

      <a href="https://se-radio.net/2015/06/episode-229-flavio-junqueira-on-distributed-coordination-with-apache-zookeeper/" target="_blank" rel="noopener nofollow ugc">se-radio.net</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:501/604;"><img src="https://se-radio.net/wp-content/uploads/2015/06/flavio.jpg" class="thumbnail" alt="" width="501" height="604"></div>

<h3><a href="https://se-radio.net/2015/06/episode-229-flavio-junqueira-on-distributed-coordination-with-apache-zookeeper/" target="_blank" rel="noopener nofollow ugc">SE Radio 229: Flavio Junqueira on Distributed Coordination with Apache...</a></h3>



  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="67891" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/erlang-elixir-native-etcd-zookeeper-alternative/11874/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-67891" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="67891"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #31"></div>
  </section>
</div>
    <div class="postbit" id="67917" data-post-id="67917">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="andre1sk" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/andre1sk/120/1380_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  andre1sk
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="CptnKirk" data-post="31" data-topic="11874">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/c/3e96dc/48.png" class="avatar"> CptnKirk:</div>
<blockquote>
<p>If you want RAFT internal to your cluster, this looks pretty good</p>
</blockquote>
</aside>
<p>Yep looks interesting thank you</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="67917" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/erlang-elixir-native-etcd-zookeeper-alternative/11874/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-67917" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="67917"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #32"></div>
  </section>
</div>
    <div class="postbit" id="67994" data-post-id="67994">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="CptnKirk" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  CptnKirk
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I think other’s have also pointed out:</p>
<p><a href="https://github.com/bitwalker/libcluster" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/bitwalker/libcluster</a><br>
<a href="https://github.com/bitwalker/swarm" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/bitwalker/swarm</a></p>
<p>Swarm uses libcluster under the covers (it seems nice for stand-alone node discovery).  You might also roll in rafted_value on top of one or both of these to build your solution.</p>
<p>You’ll just have to ask yourself what kind of solution you’re trying to bake into your app cluster.  Is it distributed queueing with individual consumer offset (like Kafka)?  Is it stateful actors?  Is it stateless workers?</p>
<p>For distributed queueing with individual consumer offsets, Kafka is pretty popular.  For stateless workers registered across a cluster, swam seems like it solves that.</p>
<p>It could be interesting to marry stateful persistent actors and an intelligent global registry.  This appears to be missing in the Elixir world, although there may be some distributed Ecto project that I’m unaware of.  The characteristics would be:</p>
<ul>
<li>Actors/processes have state</li>
<li>They delegate to backends for save/restore functionality</li>
<li>They have a formal API for interaction (GenServer vs Agent – although a persistent agent wrapper would be ok for some projects)</li>
<li>They are sharded across your cluster</li>
<li>They are communicated to in a location transparent way</li>
<li>Node failures are detected immediately</li>
<li>Network splits are detected immediately and fall back to a well defined “mode”</li>
<li>Node rebalancing and recovery is fast and deterministic</li>
</ul>
<p>This ought to be a pretty idiomatic strategy for “stateful elixir”, but it’s not easy to get right.  It depends on a single authoritative writer and those aren’t easy to deterministically manage in a distributed system.  Process crashes, node crashes, and netsplits need to be considered.  If you want to increase read throughput you can add replicas, but this further complicates things.  If you want to get really fancy you could configure dynamic support for ETS or FastGlobal reads.</p>
<p>A lot of the complexity is in the distribution and coordination methodology.  Let’s say you need need to track 10 million persistent actors.  That’s too big for gossip. How about RAFT?  I don’t know.  What happens when the cluster detects a node has gone down?  Do you have the ability to hand off work to another node immediately and deterministically?  If the original node comes back, does it have the ability to take back over?  Do nodes benefit from local state caching, or do nodes that fail need to regenerate state from a remote master, possibly flooding that system with millions of requests as they come back up?</p>
<p>This would be a PC/EC libriak that seeks to keep A has high as possible.  You could probably tune this to be PC/EL if you wanted to support additional replicas and could track exactly what the latest state version of each actor was.</p>
<p>That would be a project I’d be interested in playing with.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="67994" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/erlang-elixir-native-etcd-zookeeper-alternative/11874/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-67994" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="67994"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #33"></div>
  </section>
</div>
    <div class="postbit" id="68053" data-post-id="68053">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="michalmuskala" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/michalmuskala/120/20288_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  michalmuskala
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I think some of the goals are shared by <a href="https://github.com/SpaceTime-IoT/erleans" rel="noopener nofollow ugc">Erleans</a> - it strives to implement a similar ecosystem of “virtual actors” to that available in .NET through Microsoft’s Orleans framework. It also uses <a href="https://github.com/lasp-lang/lasp" rel="noopener nofollow ugc">lasp</a> underneath and CRDTs to guarantee evental consistency. It’s definitely an interesting project to look out for.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="68053" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/erlang-elixir-native-etcd-zookeeper-alternative/11874/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-68053" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="68053"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #34"></div>
  </section>
</div>
    <div class="postbit" id="68056" data-post-id="68056">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aseigo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aseigo/120/10674_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aseigo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>As has already been pointed out by many here, there are many, many great libraries / frameworks that provide the underpinnings for these things for Elixir already. RiakCore, RaftFleet, libCluster, mNesia, etc. etc.</p>
<p>But I think what is being missed a bit is the “batteries included” part of this. Yes, you can build pretty much any distributed system you need from those lego blocks but etcd/zookeeper are very specific applications: distributed configuration data.</p>
<p>It would not be hard to build something that is a config store with distribution, pub/sub on changes, initial load on application start, etc. but AFAIK that specific application does not exist. The lego pieces are still in the bucket waiting to be put together, and this pattern results in many higher-level applications (like distributed config management) left as an exercise to the individual developer rather than being pulled together into reusable projects.</p>
<p>Hopefully over time more of these sorts of projects will hit hex.pm, so Elixir can have more “finished pieces” to use alongside the underlying toolboxes.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="68056" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/erlang-elixir-native-etcd-zookeeper-alternative/11874/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-68056" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="68056"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #35"></div>
  </section>
</div>
    <div class="postbit" id="68075" data-post-id="68075">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="cdegroot" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cdegroot/120/4644_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  cdegroot
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="CptnKirk" data-post="29" data-topic="11874">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/c/3e96dc/48.png" class="avatar"> CptnKirk:</div>
<blockquote>
<p>Ask Kafka if it would rather process 10x 1MB messages a second or 5 million 1 byte messages a second.  I’m pretty sure the answer isn’t “it doesn’t matter”.</p>
</blockquote>
</aside>
<p>The answer is “it depends”. Kafka does a lot of batching <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" loading="lazy" width="20" height="20"></p>
<p>Just for fun, I wrote a Raft implementation as well (<a href="https://github.com/cdegroot/palapa/tree/master/apps/erix" rel="noopener nofollow ugc">https://github.com/cdegroot/palapa/tree/master/apps/erix</a>); it’s not too hard, and I religiously TDD’d by basically converting the specifications from the paper into tests, and I <em>might</em> this year or next year give a fun demo at some meetup or conference about it…</p>
<p>But would I use it in any production-like case? Nope. Ditto for most of the other Elixir/Erlang based stuff out there, including riak_core. Look at the stream of work that goes into Zookeeper, Consul and etcd; getting this right is <em>hard</em>, and I think that if you want industrial strength, you have to leverage one of these large projects. Using your own or having something maintained by the tiny Elixir/Erlang community is most likely going to end up in tears.</p>
<aside class="quote no-group" data-username="aseigo" data-post="36" data-topic="11874">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aseigo/48/10674_2.png" class="avatar"> aseigo:</div>
<blockquote>
<p>It would not be hard to build something</p>
</blockquote>
</aside>
<p>Yes it would. Do a round through the issue lists of the aforementioned “big three” products.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="68075" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/erlang-elixir-native-etcd-zookeeper-alternative/11874/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-68075" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="68075"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #36"></div>
  </section>
</div>
    <div class="postbit" id="68077" data-post-id="68077">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aseigo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aseigo/120/10674_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aseigo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="cdegroot" data-post="37" data-topic="11874">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cdegroot/48/4644_2.png" class="avatar"> cdegroot:</div>
<blockquote>
<p>Using your own or having something maintained by the tiny Elixir/Erlang community is most likely going to end up in tears.</p>
</blockquote>
</aside>
<p>The counterpoint to the size of the community is the size and mission-criticality of the products some of these components are used in, and the testing they get.</p>
<p>You mentioned raft; we’re using am Elixir raft implementation here at work that is written, used and maintained by a reasonably large Japanese company. They commit regularly, and they use the libraries themselves. And that’s a very small example compared to e.g. riak libraries being used for <em>core</em> functionality at companies like Bet365.</p>
<p>On the flip side the Javascript community is absolutely immensely huge, and the quality of projects that come from there is often scary-low and the lifespan way shorter than one would hope for.</p>
<p>Size of community alone is really not enough to make decisions based on. It can help, but it needs to be put into the context of the technology and commitments to it.</p>
<aside class="quote no-group" data-username="cdegroot" data-post="37" data-topic="11874">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cdegroot/48/4644_2.png" class="avatar"> cdegroot:</div>
<blockquote>
<p>Do a round through the issue lists of the aforementioned “big three” products.</p>
</blockquote>
</aside>
<p>I’m very familiar with them, but thanks! <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"> The original poster mentioned etcd and zookeeper, and having something that provided that specific functionality out-of-the-box would really not be a huge effort within the existing Elixir ecosystem as a lot of the really hard work (distribution, global naming, CRDTs and other EC helpers ..) has already been done either in the core libraries or widely used add-on libraries that have been proven stable over time, under load, and at scale.</p>
<p>So why are these things such monumental efforts for other communities? Because they don’t start with the tools Elixir benefits from when it comes to distributed computing. They have to build a lot more of the primitives from the ground up which we get to just pick off the ol’ hex.pm tree, or which are baked into the language design itself.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="68077" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/erlang-elixir-native-etcd-zookeeper-alternative/11874/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-68077" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="68077"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #37"></div>
  </section>
</div>
    <div class="postbit" id="68079" data-post-id="68079">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="andre1sk" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/andre1sk/120/1380_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  andre1sk
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="cdegroot" data-post="37" data-topic="11874">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cdegroot/48/4644_2.png" class="avatar"> cdegroot:</div>
<blockquote>
<p>or having something maintained by the tiny Elixir/Erlang community</p>
</blockquote>
</aside>
<p>Well tiny Erlang community already maintains pretty much the most advanced commercially viable VM  for distributed systems. CoreOS (or whatever the current name is) was a tiny company until few days ago when it was acquired by Red Hat etcd obviously benefited greatly from being part of k8s efforts though.  This def. would take concentrated effort from larger players that have use cases for something like this e.g the likes of Toyota, bet365, Erlang Solutions, Ericsson, Pinterest etc. or alternatively by a startup that for example was building event processing PaaS.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="68079" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/erlang-elixir-native-etcd-zookeeper-alternative/11874/39">Post #38</a>
	                </div>
	            </div>
              <div id="likers-container-68079" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="68079"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #38"></div>
  </section>
</div>
    <div class="postbit" id="68080" data-post-id="68080">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="cdegroot" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cdegroot/120/4644_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  cdegroot
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="aseigo" data-post="38" data-topic="11874">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aseigo/48/10674_2.png" class="avatar"> aseigo:</div>
<blockquote>
<p>So why are these things such monumental efforts for other communities?</p>
</blockquote>
</aside>
<p>I’d grant you that for ZK ;-). etcd and Nomad are written in Golang, and while our respective communities may disagree about a lot, I think we can agree on the fact that Golang was created with distribution in mind.</p>
<p>My experience with these sorts of systems are that they’re 20% use case, 80% edge case. <a href="https://www.pagerduty.com/blog/the-discovery-of-apache-zookeepers-poison-packet/" rel="noopener nofollow ugc">https://www.pagerduty.com/blog/the-discovery-of-apache-zookeepers-poison-packet/</a> is a good example.</p>
<p>You fix an edge case, and another edge case appears on someone else’s system. Frankly, the couple of times I wrote low level networking stuff I had the feeling it was a fractal all the way down and it ended up costing me way more time than I cared for. I guess that if you have limited deployment and stay in the sweet spot, things will be relatively easy; something that works for all of the Erlang/Elixir community, I’m less sure. My take so far has been to just use ZK for the one or two use cases where we need network-wide singletons; pretty much everything else we do uses Kafka and thus relies on its consumer group functionality to divide up work, hence indirectly using ZK as well. One less headache for me. YMMV.</p>
<aside class="quote no-group quote-modified" data-username="aseigo" data-post="38" data-topic="11874">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aseigo/48/10674_2.png" class="avatar"> aseigo:</div>
<blockquote>
<p>.. lifespan way shorter than one would hope for.</p>
</blockquote>
</aside>
<p>Most Javascript projects deserve a lifespan of zero. Starting with the language itself. As far as I have any hopes for the GUI platform called the web browser, it’s that webassembly takes off and proper languages can be used as first-class citizens <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="68080" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/erlang-elixir-native-etcd-zookeeper-alternative/11874/40">Post #39</a>
	                </div>
	            </div>
              <div id="likers-container-68080" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="68080"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #39"></div>
  </section>
</div>
    <div class="postbit" id="68082" data-post-id="68082">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="gon782" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  gon782
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="cdegroot" data-post="40" data-topic="11874">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cdegroot/48/4644_2.png" class="avatar"> cdegroot:</div>
<blockquote>
<p>I think we can agree on the fact that Golang was created with distribution in mind.</p>
</blockquote>
</aside>
<p>Yet it has none of the features that make creating and monitoring work and state on another node possible, much less a way to actually connect two runtimes. Does it even have a primitive for referring to threads?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="68082" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/erlang-elixir-native-etcd-zookeeper-alternative/11874/41">Post #40</a>
	                </div>
	            </div>
              <div id="likers-container-68082" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="68082"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #40"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/11874/load_more?page=5">Load more posts (14 remaining)</a>
</div></template></turbo-stream>