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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><strong>Ergo Framework v3.2.0</strong> - Production-Ready Enterprise Features</p>
<p><em>For Elixir developers: Ergo brings OTP design patterns to Go, enabling seamless interoperability between Go and<br>
Elixir/Erlang services in the same cluster. With mTLS and NAT support in v3.2.0, you can now build heterogeneous distributed systems where Go services (leveraging Go’s performance for CPU-intensive tasks) work alongside your Elixir applications using the same familiar patterns - Supervisors, GenServers, monitors, links, and more. The Erlang protocol implementation remains MIT-licensed for unrestricted commercial use.</em></p>
<p>The Ergo Framework has released version 3.2.0, focusing on enterprise deployment scenarios and production reliability.</p>
<p><strong>Key Enterprise Features</strong></p>
<p>Mutual TLS Support - New gen.CertAuthManager interface enables full mTLS with CA pool management (ClientCAs, RootCAs,<br>
ClientAuth, ServerName). Essential for zero-trust security architectures. See<br>
<a href="https://docs.ergo.services/networking/mutual-tls" class="inline-onebox" rel="noopener nofollow ugc">Mutual TLS | Ergo Framework documentation</a> documentation.</p>
<p>NAT/Load Balancer Support - New RouteHost and RoutePort options in gen.AcceptorOptions allow nodes to run behind NAT or<br>
load balancers with proper address advertisement. Critical for cloud deployments. See<br>
<a href="https://docs.ergo.services/networking/behind-the-nat" class="inline-onebox" rel="noopener nofollow ugc">Behind the NAT | Ergo Framework documentation</a> documentation.</p>
<p>Spawn Time Control - InitTimeout option limits ProcessInit duration (max 15 seconds for remote spawn), preventing hung<br>
initialization from blocking the system. See <a href="https://docs.ergo.services/basics/process" class="inline-onebox" rel="noopener nofollow ugc">Process | Ergo Framework documentation</a> documentation.</p>
<p>Application Tags &amp; Role Mapping - New Tags field enables blue/green deployments, canary releases, and maintenance mode<br>
selection. New Map field provides logical role-to-process mapping. See <a href="https://docs.ergo.services/basics/application" class="inline-onebox" rel="noopener nofollow ugc">Application | Ergo Framework documentation</a><br>
documentation.</p>
<p><strong>Critical Bug Fix</strong></p>
<p>Fixed critical bug where terminate signals (Link/Monitor exits) were incorrectly rejected due to wrong incarnation<br>
validation in network layer. Thanks to <a href="https://github.com/qjpcpu" class="inline-onebox" rel="noopener nofollow ugc">qjpcpu (Jason) · GitHub</a> for reporting<br>
<a href="https://github.com/ergo-services/ergo/issues/248" class="inline-onebox" rel="noopener nofollow ugc">Fix: unable to send termination message to remote monitor due to incorrect creation time check by qjpcpu · Pull Request #248 · ergo-services/ergo · GitHub</a> .</p>
<p><strong>Enhanced API</strong></p>
<p>Extensive API additions across gen.Node, gen.Process, and gen.Meta interfaces:</p>
<ul>
<li>Synchronous Call* methods from Node interface</li>
<li>Priority-based delayed sends (SendWithPriorityAfter)</li>
<li>Important delivery for responses</li>
<li>Reference deadline tracking (gen.Ref.Deadline, IsAlive)</li>
<li>Process/name resolution methods</li>
</ul>
<p><strong>Architecture Improvements</strong></p>
<ul>
<li>Target Manager completely reworked with improved architecture and comprehensive test coverage</li>
<li>Pub/Sub mechanism completely reworked for improved reliability and performance</li>
<li>ProcessInit state enhanced - more methods now available during initialization (Link, Monitor, Call, RegisterName,<br>
CreateAlias)</li>
<li>Graceful shutdown with configurable timeout and detailed process state logging</li>
</ul>
<p><strong>Developer Experience</strong></p>
<ul>
<li>pprof labels for actor goroutines (with --tags pprof) - identify stuck processes instantly</li>
<li>Comprehensive documentation rewritten and included in repository at <a href="https://docs.ergo.services" rel="noopener nofollow ugc">https://docs.ergo.services</a></li>
<li>New articles: <a href="https://docs.ergo.services/basics/project-structure" class="inline-onebox" rel="noopener nofollow ugc">Project Structure | Ergo Framework documentation</a> ,<br>
<a href="https://docs.ergo.services/advanced/building-a-cluster" class="inline-onebox" rel="noopener nofollow ugc">Building a Cluster | Ergo Framework documentation</a> , <a href="https://docs.ergo.services/advanced/message-versioning" class="inline-onebox" rel="noopener nofollow ugc">Message Versioning | Ergo Framework documentation</a> ,<br>
<a href="https://docs.ergo.services/advanced/important-delivery" class="inline-onebox" rel="noopener nofollow ugc">Important Delivery Flag | Ergo Framework documentation</a> , <a href="https://docs.ergo.services/advanced/debugging" class="inline-onebox" rel="noopener nofollow ugc">Debugging | Ergo Framework documentation</a></li>
</ul>
<p><strong>Ecosystem Expansion</strong></p>
<p>Extra Library - Actors (<a href="https://github.com/ergo-services/actor" class="inline-onebox" rel="noopener nofollow ugc">GitHub - ergo-services/actor: Extra library of actors for the Ergo Framework 3.0 (and above) · GitHub</a>):</p>
<ul>
<li>Leader actor - distributed leader election with Raft-inspired consensus, automatic failover, split-brain prevention.<br>
<a href="https://docs.ergo.services/extra-library/actors/leader" class="inline-onebox" rel="noopener nofollow ugc">Leader | Ergo Framework documentation</a></li>
<li>Metrics actor - Prometheus metrics exporter for node/network telemetry.<br>
<a href="https://docs.ergo.services/extra-library/actors/metrics" class="inline-onebox" rel="noopener nofollow ugc">Metrics | Ergo Framework documentation</a></li>
</ul>
<p>Extra Library - Meta Processes (<a href="https://github.com/ergo-services/meta" class="inline-onebox" rel="noopener nofollow ugc">GitHub - ergo-services/meta: Extra library of meta processes for the Ergo Framework 3.0 (and above) · GitHub</a>):</p>
<ul>
<li>SSE (Server-Sent Events) - server-to-client streaming over HTTP with connection pooling.<br>
<a href="https://docs.ergo.services/extra-library/meta-processes/sse" class="inline-onebox" rel="noopener nofollow ugc">SSE | Ergo Framework documentation</a></li>
</ul>
<p><strong>Benchmarks</strong> (<a href="https://github.com/ergo-services/benchmarks" class="inline-onebox" rel="noopener nofollow ugc">GitHub - ergo-services/benchmarks: Benchmarks of the Ergo Framework 3.0 (and above) · GitHub</a>):</p>
<ul>
<li>Distributed Pub/Sub - 1M subscribers across 10 nodes achieving 2.9M msg/sec with only 10 network messages</li>
</ul>
<p><strong>Resources</strong></p>
<ul>
<li>GitHub: <a href="https://github.com/ergo-services/ergo" class="inline-onebox" rel="noopener nofollow ugc">GitHub - ergo-services/ergo: An actor-based Framework with network transparency for creating event-driven architecture in Golang. Inspired by Erlang. Zero dependencies. · GitHub</a></li>
<li>Documentation: <a href="https://docs.ergo.services" rel="noopener nofollow ugc">https://docs.ergo.services</a></li>
<li>Examples: <a href="https://github.com/ergo-services/examples" class="inline-onebox" rel="noopener nofollow ugc">GitHub - ergo-services/examples: examples for demonstrating Ergo Framework features · GitHub</a></li>
<li>Changelog: <a href="https://github.com/ergo-services/ergo/releases/tag/v1.999.320" class="inline-onebox" rel="noopener nofollow ugc">Release v3.2.0 · ergo-services/ergo · GitHub</a></li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="383604" 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/ergo-a-framework-for-creating-microservices-using-technologies-and-design-patterns-of-erlang-otp-in-golang/43898/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-383604" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="383604"
                     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 #11"></div>
  </section>
</div>
    <div class="postbit" id="393720" data-post-id="393720">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yet another update. With some graphics this time <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>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/3X/8/a/8a767b9e9cb651b44e091b2d19b300477db8ea19.jpeg" data-download-href="https://forum.elixirforum.com/uploads/default/8a767b9e9cb651b44e091b2d19b300477db8ea19" title="image" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/3X/8/a/8a767b9e9cb651b44e091b2d19b300477db8ea19_2_690x544.jpeg" alt="image" data-base62-sha1="jKTJQ1D8lb9sWxaBXl7AqefDlq1" width="690" height="544" srcset="https://forum.elixirforum.com/uploads/default/optimized/3X/8/a/8a767b9e9cb651b44e091b2d19b300477db8ea19_2_690x544.jpeg, https://forum.elixirforum.com/uploads/default/optimized/3X/8/a/8a767b9e9cb651b44e091b2d19b300477db8ea19_2_1035x816.jpeg 1.5x, https://forum.elixirforum.com/uploads/default/optimized/3X/8/a/8a767b9e9cb651b44e091b2d19b300477db8ea19_2_1380x1088.jpeg 2x" data-dominant-color="2F3A46"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">image</span><span class="informations">1680×1325 107 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
<p>Ergo Framework 3.3 has been released.</p>
<p>This is a fairly large release, with most of the work focused on observability, testing, and production reliability.</p>
<p>The biggest change is observability.</p>
<p>A number of runtime components were reworked so they can expose their state and activity in real time. Along with that, Observer was redesigned. It can now inspect processes, events, network connections, remote nodes, and message traces across a running Ergo cluster without requiring application-specific instrumentation.</p>
<p>Observer also exposes an MCP interface, so coding agents can inspect the live cluster directly, including processes running on remote nodes.</p>
<p>Distributed tracing has been added at the actor/message level as well. A sampler can be enabled on any process, and tracing metadata is propagated transparently together with messages across nodes. Since tracing happens inside the actor runtime, it can distinguish between message send, delivery, and processing rather than treating everything as a conventional request/response span.</p>
<p>For integration with existing observability stacks, traces can be exported through the Pulse application, including to OpenTelemetry-compatible collectors.</p>
<p>Testing was another major area of work.</p>
<p>The testing harness has been redesigned around a shared validation package:</p>
<p><code>ergo.services/ergo/testing/check</code></p>
<p>There is also a complete set of mocks in:</p>
<p><code>ergo.services/ergo/testing/mock</code></p>
<p>and, probably the most interesting part, the new system-testing environment:</p>
<p><code>ergo.services/ergo/testing/stage</code></p>
<p><code>stage</code> can start multiple real Ergo nodes inside a test, establish networking between them, and capture messages and events produced by actors. This makes it possible to test distributed behavior, remote messaging, failures, supervision, and other cluster scenarios without Docker or external infrastructure.</p>
<p>The framework test coverage is now around 85%.</p>
<p>The Pub/Sub subsystem was also substantially reworked. Subscription and publishing paths are now lock-free, avoiding mutex contention when tens or hundreds of thousands of processes are concurrently subscribing or publishing.</p>
<p>EDF, Ergo’s native data format, now supports pointers and schema evolution, similar in spirit to what you would expect from formats such as Protobuf.</p>
<p>The ecosystem around the framework has grown as well:</p>
<ul>
<li>
<p><code>application/radar</code> for integration with Prometheus/Grafana and the surrounding cloud observability stack</p>
</li>
<li>
<p><code>application/pulse</code> for collecting and exporting distributed traces</p>
</li>
<li>
<p><code>actor/leader</code> for Raft-inspired distributed leader election</p>
</li>
<li>
<p><code>application/grid</code> for an eventually-consistent distributed registry</p>
</li>
</ul>
<p>All of these were released or updated together with 3.3.</p>
<p>For Elixir/Erlang users, the interoperability story remains unchanged: Ergo nodes can participate in heterogeneous distributed systems with Erlang/Elixir nodes using the Erlang distribution protocol. Ergo itself is still a native Go runtime rather than a BEAM implementation, but the programming model remains heavily influenced by OTP: processes, supervisors, links, monitors, applications, aliases, and transparent messaging between nodes.</p>
<p>If you want to see the observability side in action, there is now a complete example environment here:</p>
<aside class="onebox githubfolder" data-onebox-src="https://github.com/ergo-services/examples/tree/master/observability">
  <header class="source">
      <img src="https://github.githubassets.com/favicons/favicon.svg" class="site-icon" alt="" width="32" height="32">

      <a href="https://github.com/ergo-services/examples/tree/master/observability" target="_blank" rel="noopener nofollow ugc">github.com</a>
  </header>

  <article class="onebox-body">
    <h3><a href="https://github.com/ergo-services/examples/tree/master/observability" target="_blank" rel="noopener nofollow ugc">examples/observability at master · ergo-services/examples</a></h3>

  <p><a href="https://github.com/ergo-services/examples/tree/master/observability" target="_blank" rel="noopener nofollow ugc">master/observability</a></p>

  <p><span class="label1">examples for demonstrating Ergo Framework features - ergo-services/examples</span></p>

  </article>

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

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

<p>It starts a loaded multi-node cluster and includes Observer plus ready-made Grafana dashboards and distributed tracing.</p>
<p>Documentation:<br>
<a href="https://docs.ergo.services/" rel="noopener nofollow ugc">https://docs.ergo.services</a></p>
<p>GitHub:</p>
<aside class="onebox githubrepo" data-onebox-src="https://github.com/ergo-services/ergo">
  <header class="source">

      <a href="https://github.com/ergo-services/ergo" target="_blank" rel="noopener nofollow ugc">github.com</a>
  </header>

  <article class="onebox-body">
    <div class="github-row" data-github-private-repo="false">
  <img width="690" height="344" src="https://opengraph.githubassets.com/231b219bb0b7a8c604d542511a24209a/ergo-services/ergo" class="thumbnail">

  <h3><a href="https://github.com/ergo-services/ergo" target="_blank" rel="noopener nofollow ugc">GitHub - ergo-services/ergo: An actor-based Framework with network transparency...</a></h3>

    <p><span class="github-repo-description">An actor-based Framework with network transparency for creating event-driven architecture in Golang. Inspired by Erlang. Zero dependencies. </span></p>
</div>

  </article>

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

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

<p>Full changelog:</p>
<aside class="onebox githubblob" data-onebox-src="https://github.com/ergo-services/ergo/blob/master/CHANGELOG.md">
  <header class="source">

      <a href="https://github.com/ergo-services/ergo/blob/master/CHANGELOG.md" target="_blank" rel="noopener nofollow ugc">github.com/ergo-services/ergo</a>
  </header>

  <article class="onebox-body">
    <h4><a href="https://github.com/ergo-services/ergo/blob/master/CHANGELOG.md" target="_blank" rel="noopener nofollow ugc">CHANGELOG.md</a></h4>

<div class="git-blob-info">
  <a href="https://github.com/ergo-services/ergo/blob/master/CHANGELOG.md" rel="noopener nofollow ugc"><code>master</code></a>
</div>


      <pre><code class="lang-md"># Changelog
All notable changes to this project will be documented in this file.

This format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

#### [v3.3.0](https://github.com/ergo-services/ergo/releases/tag/v1.999.330) 2026-09-04 [tag version v1.999.330] ####

* Added **distributed tracing** - a trace context propagates across `Send`, `Call`, spawn, and every hop a message takes between nodes, with configurable sampling and cross-node clock-skew correction. Enable with `NetworkFlags.EnableTracing` (plus `NetworkFlags.EnableClockSkew` for skew correction). The new `ergo.services/application/pulse` application exports the collected spans over OTLP. See [Distributed Tracing](https://docs.ergo.services/advanced/distributed-tracing) documentation
* Added **EDF schema evolution** - off by default; when `NetworkFlags.EnableSchemaEvolution` is enabled on both nodes, fields appended to the end of a registered struct stay wire-compatible: a peer that does not know the new trailing fields skips them, and a peer missing them zero-fills. By default EDF remains strict and any contract change requires a new package version. A single evolvable struct is bounded at just under 4GB. See [Message Versioning](https://docs.ergo.services/advanced/message-versioning) documentation
* Added a **testing framework** under `ergo.services/ergo/testing` with four layers sharing one fluent assertion grammar: `unit` (in-process single-actor testing against a mock node), `stage` (live multi-node integration), `mock` (standalone `gen.*` mocks), and `check` (the shared assertion core). Covers positive and negative expectations, per-value matching, and observation of messages, calls, spawns, links, monitors, and events. See [Testing](https://docs.ergo.services/testing/overview) documentation
* Added **`act.Router`** - a behavior that picks the destination from the message instead of taking the next worker in order. `RouteMessage` and `RouteCall` return the name of a route; the router resolves that name against its own routes first and the node registry second, then forwards the message with the original sender intact, so the worker answers the caller directly. A router can own its routes, spawning them at init and respawning them on death with the name staying stable; or own none and resolve every name through the registry; or mix the two. Returning `act.RouteDiscard` drops the message, and answers `gen.ErrDiscarded` to a caller. The routing table is editable while the router runs: `AddRoute`, `RemoveRoute`, `ReplaceRoute`, `EnableRoute`, `DisableRoute`, `RespawnRoute`, `Routes`. Only normal-priority traffic is routed at all: high and max priority reach the router's own `HandleMessage` / `HandleCall`, which keeps an admin path open while the routed path is busy. See [Router](https://docs.ergo.services/actors/router) documentation

**Messaging and events**

* Added **open events** - `EventOptions.Open` disables the token check on `SendEvent`, so any local process may publish to an event by name without holding the token returned by `RegisterEvent` (the token is still issued, just not required). `UnregisterEvent` remains restricted to the producer. Off by default. See [Events](https://docs.ergo.services/basics/events) documentation
* Added **`gen.Error` and `gen.Errorf`** - an error that keeps its causes. `gen.Errorf` formats like `fmt.Errorf` and collects every `%w` argument into `Wrapped`, so `errors.Is` and `errors.As` still find the causes through the chain. `errors.Unwrap` does not follow it: the type implements the multi-error `Unwrap() []error`, so read `Wrapped` directly when the cause objects themselves are needed. The chain crosses the wire only when `NetworkFlags.EnableWrappedErrors` is set on both nodes; otherwise the value arrives as flat text. Registered sentinels are still what carries identity between nodes, and `*gen.Error` is built around them rather than registered itself: register the markers with `Network().RegisterError` and wrap them with `gen.Errorf`. The type also carries the mailbox that `ProcessOptions.PreserveMailbox` captures from a panicked process, a field that never leaves the node
* Added **pointer type support** in EDF - `*int`, `*string`, `[]*T`, `map[K]*V`, pointer struct fields. Nil state preserved. Nested pointers (`**T`) not supported. Max encoding depth limit (100) prevents stack overflow on deeply nested structures. See [Network Transparency](https://docs.ergo.services/networking/network-transparency) documentation

**Network**
</code></pre>



  This file has been truncated. <a href="https://github.com/ergo-services/ergo/blob/master/CHANGELOG.md" target="_blank" rel="noopener nofollow ugc">show original</a>

  </article>

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

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

<p>One area I would be particularly interested to hear opinions from the BEAM community about is tracing semantics for asynchronous messaging.</p>
<p>OpenTelemetry maps messaging reasonably well to producer/send/receive/process concepts, but actor systems naturally expose more precise lifecycle information: a message was sent, reached the destination mailbox, and was eventually processed. Ergo can observe all three points directly in the runtime, so I am still considering how much of that richer model should stay native and how much should be projected into OTLP.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="393720" 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/ergo-a-framework-for-creating-microservices-using-technologies-and-design-patterns-of-erlang-otp-in-golang/43898/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-393720" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="393720"
                     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 #12"></div>
  </section>
</div>
    <div class="postbit" id="393725" data-post-id="393725">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jhogberg" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jhogberg/120/24176_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  jhogberg
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Erlang Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="halturin" data-post="13" data-topic="43898">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/halturin/48/26510_2.png" class="avatar"> halturin:</div>
<blockquote>
<p>One area I would be particularly interested to hear opinions from the BEAM community about is tracing semantics for asynchronous messaging.</p>
<p>OpenTelemetry maps messaging reasonably well to producer/send/receive/process concepts, but actor systems naturally expose more precise lifecycle information: a message was sent, reached the destination mailbox, and was eventually processed. Ergo can observe all three points directly in the runtime, so I am still considering how much of that richer model should stay native and how much should be projected into OTLP.</p>
</blockquote>
</aside>
<p>My personal opinion, formed not so much from working on ERTS/“BEAM” but from working in operations, is that you <em>really do</em> want the ability to observe everything to the smallest detail, because things break in the weirdest of ways and you can’t tell in advance what you might need to know.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="393725" 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/ergo-a-framework-for-creating-microservices-using-technologies-and-design-patterns-of-erlang-otp-in-golang/43898/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-393725" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="393725"
                     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 #13"></div>
  </section>
</div>
    <div class="postbit" id="393728" data-post-id="393728">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>yes, they show different problems - network layer, mailbox latency (message storm), long handling - points to heavy logic and need to scale or if it requests to external resource (DB/Web) - need to check remote thing.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="393728" 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/ergo-a-framework-for-creating-microservices-using-technologies-and-design-patterns-of-erlang-otp-in-golang/43898/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-393728" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="393728"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>