<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Infinitic’s Newsletter]]></title><description><![CDATA[building next-gen event-driven "workflow as code" resilient orchestration engine]]></description><link>https://infinitic.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!CO1_!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Finfinitic.substack.com%2Fimg%2Fsubstack.png</url><title>Infinitic’s Newsletter</title><link>https://infinitic.substack.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 12 Jun 2026 10:48:21 GMT</lastBuildDate><atom:link href="https://infinitic.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Gilles Barbier]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[infinitic@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[infinitic@substack.com]]></itunes:email><itunes:name><![CDATA[Gilles Barbier]]></itunes:name></itunes:owner><itunes:author><![CDATA[Gilles Barbier]]></itunes:author><googleplay:owner><![CDATA[infinitic@substack.com]]></googleplay:owner><googleplay:email><![CDATA[infinitic@substack.com]]></googleplay:email><googleplay:author><![CDATA[Gilles Barbier]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[🚀 Infinitic 0.18.1 Release]]></title><description><![CDATA[Deployment Control & Cooperative Canceling Of Tasks After Timeout]]></description><link>https://infinitic.substack.com/p/infinitic-0181-release</link><guid isPermaLink="false">https://infinitic.substack.com/p/infinitic-0181-release</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Thu, 10 Jul 2025 15:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b2baf263-e0fd-4831-834a-60627435f286_106x106.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We&#8217;re excited to announce the release of <strong>Infinitic v0.18.1</strong>, a focused update that gives developers <strong>more control over deployment strategies</strong> and introduces <strong>cooperative canceling of tasks after timeouts</strong>.</p><p>These improvements are part of our ongoing path toward <strong>Infinitic v1.0</strong> &#8212; making it easier than ever to build robust, distributed, event-driven systems.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Infinitic&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>&#9881;&#65039; More Control Over Deployment Options</h2><p>With v0.18.1, Infinitic now offers <strong>finer-grained control over how workflows and services are deployed</strong>. Whether you're scaling individual components independently or tailoring deployments for different environments (e.g., staging, production, multi-tenant systems), these new options make configuration both <strong>cleaner and more explicit</strong>.</p><h3>Workflow State Worker Deployment</h3><p>An Infinitic <strong>Workflow State Worker</strong> includes four components:</p><ul><li><p><code>workflowStateEngine</code></p></li><li><p><code>workflowTimerHandler</code></p></li><li><p><code>workflowEventHandler</code></p></li><li><p><code>workflowCommandHandler</code></p></li></ul><p><strong>Before 0.18.1</strong>, all four components were deployed together, sharing the same <code>concurrency</code> parameter.</p><p><strong>Now</strong>, you can optionally set specific concurrency values for:</p><ul><li><p><code>timerHandlerConcurrency</code></p></li><li><p><code>eventHandlerConcurrency</code></p></li><li><p><code>commandHandlerConcurrency</code></p></li></ul><p>If you don&#8217;t specify them, they will default to the general <code>concurrency</code> value, preserving backward compatibility.</p><h3>Executor (Service or Workflow) Worker Deployment</h3><p>An Infinitic <strong>Executor Worker</strong> (used for services or workflows) includes three components:</p><ul><li><p><code>executor</code></p></li><li><p><code>eventHandler</code></p></li><li><p><code>retryHandler</code></p></li></ul><p>Just like for workflow workers, you can now configure:</p><ul><li><p><code>eventHandlerConcurrency</code></p></li><li><p><code>retryHandlerConcurrency</code></p></li></ul><p>These also default to the general <code>concurrency</code> value if not explicitly set.</p><div><hr></div><h2>&#9201;&#65039; Cooperative Canceling for Long-Running Tasks</h2><p>In Infinitic, when a task exceeds its timeout, <strong>it is retried</strong>, but the <strong>current execution is not forcibly stopped</strong>. Instead, the task implementation is expected to <strong>detect cancellation cooperatively</strong> and exit gracefully.</p><p>This design is <strong>intentional</strong> &#8212; and critical for safe, resilient systems.</p><h3>Forced Termination Is Unsafe</h3><p>Forcefully killing a task (e.g., interrupting a thread) can lead to:</p><ul><li><p>Corrupted application state</p></li><li><p>Leaked resources (e.g., locks, DB connections, files)</p></li><li><p>Partial updates or unintended side effects</p></li></ul><p>In distributed systems, where consistency and clean-up matter, abrupt termination is a recipe for trouble.</p><h3>Graceful Cancellation Enables Cleanup</h3><p>Letting a task <strong>continue running after a timeout</strong> gives it the chance to:</p><ul><li><p>Detect that it has been canceled</p></li><li><p>Abort work cleanly</p></li><li><p>Release external resources</p></li><li><p>Report useful logs or metrics</p></li></ul><p>This is the foundation of <strong>cooperative canceling</strong>, introduced in v0.18.1. Infinitic now provides a mechanism for task implementations to check for a cancellation signal and respond accordingly.</p><p>&#128073; <strong><a href="https://docs.infinitic.io/docs/services/implementation#cooperative-canceling">Learn how to implement cooperative canceling &#8594;</a></strong></p><h3>Safe Retrying with Idempotency</h3><p>When a timeout occurs, <strong>a new task attempt is scheduled</strong>. This retry mechanism assumes your tasks are either:</p><ul><li><p><strong>Idempotent</strong> (safe to retry without harmful effects), or</p></li><li><p><strong>Compensated</strong> (with a mechanism to roll back or handle duplicates)</p></li></ul><div><hr></div><h2>&#128301; Looking Ahead</h2><p>We&#8217;re actively working toward <strong>Infinitic v1.0</strong>.</p><p>If you're moving away from centralized orchestrators &#8212; or designing distributed logic from scratch &#8212; now is the perfect time to explore what Infinitic can offer.</p><div><hr></div><h2>&#128230; Upgrade Now</h2><p>Update your dependencies to <strong>v0.18.1</strong> and start benefiting from the latest features today:</p><pre><code><code>implementation("io.infinitic:infinitic-client:0.18.1")
implementation("io.infinitic:infinitic-worker:0.18.1")</code></code></pre><ul><li><p>&#128216; <a href="https://docs.infinitic.io/">Documentation</a></p></li><li><p>&#129489;&#8205;&#128187; <a href="https://github.com/infiniticio/infinitic">GitHub Repository</a></p></li></ul><div><hr></div><h2>&#128172; Need Help?</h2><p>If you&#8217;re evaluating Infinitic for production use, I&#8217;d love to hear about your specific requirements. Reach out directly at gilles@infinitic.io for:</p><ul><li><p>Architecture consultation</p></li><li><p>Custom integration discussions</p></li><li><p>Performance benchmarking assistance</p></li><li><p>Roadmap input and prioritization</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Infinitic&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Infinitic 0.18.0: How We Fixed a Critical Orchestration Pattern Challenge]]></title><description><![CDATA[Solving Critical Message Ordering in Distributed Workflows]]></description><link>https://infinitic.substack.com/p/infinitic-0180-how-we-fixed-a-critical</link><guid isPermaLink="false">https://infinitic.substack.com/p/infinitic-0180-how-we-fixed-a-critical</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Mon, 31 Mar 2025 10:34:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6ded9be4-ee26-4cbf-aed0-491c4d2e1cad_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>TL;DR</h2><ul><li><p><a href="https://docs.infinitic.io/docs/community/releases#v0-18-0">Infinitic 0.18.0</a> fixes Pulsar critical message ordering issues that could cause unexpected workflow behavior</p></li><li><p>We implemented transient storage for out-of-order messages and an optimistic locking pattern</p></li><li><p>These fixes ensure reliable workflow orchestration even during workers rebalancing events</p></li><li><p><strong>Required action</strong>: Database migration needed to add a version column for optimistic locking</p><div><hr></div></li></ul><p>As we release <a href="https://infinitic.io">Infinitic</a> 0.18.0 today, I wanted to share some insights into a fundamental challenge we tackled in this version. If you've been using our workflow orchestration framework, this update will significantly improve reliability, especially when scaling up or down your workers.</p><h2>The Critical Role of Key-Ordering in Orchestration</h2><p>When I first designed Infinitic, one of my core principles was building a rock-solid foundation for workflow orchestration. At the heart of any reliable orchestration system lies a seemingly simple but absolutely critical requirement: <strong>key-ordering guarantee</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Infinitic&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>What exactly is key-ordering and why is it so essential?</p><p>In distributed systems like Infinitic, messages are constantly flowing between components. When these messages relate to the same workflow instance (identified by a unique key), the ordering of those messages can mean the difference between correct execution and subtle, dangerous race conditions.</p><p>Imagine a workflow that's waiting for two task completions before proceeding to the next step. If both tasks complete at nearly the same time and send their completion messages back to the workflow engine:</p><ol><li><p>Task A completes and sends a completion message</p></li><li><p>Task B completes and sends a completion message</p></li><li><p>The workflow should process these in order to correctly update its state</p></li></ol><p>Without key-ordering guarantees, the workflow might process Task B's completion first, then Task A's, potentially leading to incorrect state transitions, especially if the workflow logic depends on the specific order of completion or if the state update is done at the same exact moment.</p><p>This example illustrates why key-ordering isn't just a nice-to-have feature&#8212;it's fundamental to predictable workflow behavior. Without it, workflows become non-deterministic, making debugging nearly impossible and reducing reliability to unacceptable levels.</p><h2>Apache Pulsar and the Key-Ordering Challenge</h2><p>Infinitic has been built on Apache Pulsar since day one. We chose Pulsar for its modern architecture, scalability, and&#8212;crucially&#8212;its promised key-ordering guarantee.</p><p>In theory, Pulsar should ensure that all messages with the same key are delivered in the order they were published. However, as our users pushed Infinitic, we discovered edge cases where Pulsar's key-ordering guarantees weren't as robust as we expected.</p><p>The specific issue occurred during certain scaling scenarios. When Pulsar rebalances consumers (which happens during scaling events or after failures of a worker), there's actually a small window where messages with the same key could be processed out of order if they were assigned to different consumers.</p><p>For most messaging applications, this brief reordering might be acceptable. But for a workflow orchestration engine like Infinitic, even rare ordering violations can lead to incorrect workflow states and unpredictable behavior.</p><h2>The Fix in Infinitic 0.18.0</h2><p>Here's how we approached the problem:</p><ol><li><p><strong>Transient storage for out-of-order messages</strong>: We've implemented a system that detects when messages arrive out of sequence and temporarily stores them in a dedicated buffer. This ensures that even if Pulsar delivers messages in the wrong order, Infinitic can reorder them correctly before processing. When the expected preceding messages finally arrive, we can retrieve the buffered messages and process them in the correct sequence.</p></li><li><p><strong>Optimistic locking pattern for state storage</strong>: We've introduced an optimistic locking mechanism when storing workflow state. Here's how it works:</p><ul><li><p>When retrieving a workflow state, we also fetch its current version number</p></li><li><p>Before saving any updates to that state, we verify the version hasn't changed</p></li><li><p>If another process has updated the state in the meantime (detected by a version mismatch), we abort the current update, re-fetch the latest state, and retry the operation</p></li></ul><p>This approach prevents multiple workers from overwriting each other's changes and maintains state consistency even when processing concurrent messages.</p></li></ol><p>These changes work together to create a significantly more robust orchestration engine that maintains strict key-ordering guarantees even under heavy load, consumer failures, or scaling events.</p><h2>What This Means for Infinitic Users</h2><p>If you're upgrading to Infinitic 0.18.0, you'll experience improved overall reliability for mission-critical workflows</p><p><strong>Important upgrade note</strong>: This release requires a database migration to add a version column to your workflow state tables. This version column is essential for the new optimistic locking mechanism. We've provided migration scripts for all supported databases in our documentation, and the migration process is straightforward. Be sure to run these migrations before deploying the new version to production environments.</p><h2>Looking Forward</h2><p>Key-ordering isn't a flashy feature, but it's fundamental to the correctness guarantees that make Infinitic valuable for critical business workflows.</p><p>The solutions we've implemented not only fix the immediate issues but strengthen Infinitic's architecture for future scalability. </p><p>As always, we welcome your feedback on this release. The real-world scenarios you bring to Infinitic continue to push us to build a better product.<br><br><a href="https://docs.infinitic.io/docs/community/releases#v0-18-0">UPGRADE NOW</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Infinitic&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Our First Customer Use Case Is Live!]]></title><description><![CDATA[How Splio transformed its Campaign Management System with Infinitic in just months: scaling to billions of workflows with Ease.]]></description><link>https://infinitic.substack.com/p/our-first-customer-use-case-is-live</link><guid isPermaLink="false">https://infinitic.substack.com/p/our-first-customer-use-case-is-live</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Thu, 16 Jan 2025 22:21:31 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3f639b51-f800-4cb3-b588-bb69caaa3b3c_1522x1046.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We&#8217;re thrilled to share our first customer success story: <a href="https://www.infinitic.io/post/splio-case-study-using-infinitic">Splio&#8217;s Case Study</a>.</p><p>A big thank you to Yvonne from Infinitic and Matthieu from Splio for collaborating on this fantastic milestone.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Infinitic&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><strong>TL;DR:</strong></p><p><strong>Splio&#8217;s Challenge</strong><br>Splio, a SaaS marketing platform for retail and e-commerce brands, faced a critical challenge in 2020. Their existing campaign management system couldn&#8217;t keep up with modern demands for real-time, event-driven functionality. Scaling to handle millions of workflows daily required a significant overhaul. Their pain points included:</p><ul><li><p><strong>Legacy infrastructure</strong>: Relied on database polling, which was resource-intensive and unsuitable for real-time responsiveness.</p></li><li><p><strong>Brittle custom code</strong>: Difficult to maintain, hindering innovation and draining engineering resources.</p></li></ul><div><hr></div><p><strong>Why They Chose Infinitic</strong><br>Infinitic provided a solution that enabled Splio to modernize their system without the burden of building and maintaining complex backend tooling. Key benefits included:</p><ul><li><p><strong>Event-driven architecture</strong>: Transitioned seamlessly without adding technical debt.</p></li><li><p><strong>Time to Production</strong>:  state management, error handling, and queuing were all ready to use, freeing engineers to focus on delivering features.</p></li><li><p><strong>Simplified codebase</strong>: Decoupled business logic from infrastructure, dramatically reducing complexity and improving maintainability.</p></li></ul><div><hr></div><p><strong>The Impact</strong><br>The results of adopting Infinitic were transformative:</p><ul><li><p><strong>Faster Time-to-Market</strong>: The first version of their new campaign manager was delivered in just six months&#8212;saving 12 months of development, testing, and iteration.</p></li><li><p><strong>Rapid Feature Development</strong>: Over 20 new features were released in mere months, compared to years on their old system.</p></li><li><p><strong>Massive Scalability</strong>: Handled over <strong>3 billion workflows</strong> with minimal incidents, supporting more than <strong>600 clients</strong>.</p></li><li><p><strong>Increased Agility</strong>: Reduced feature development cycles to just two weeks, enabling faster iteration and user-driven updates.</p></li></ul><div><hr></div><p><strong>Why the Splio Engineering Team Loves Infinitic</strong></p><ul><li><p><strong>Clean, maintainable code</strong>: Simplified, focused code requires less upkeep, leaving more time for innovation.</p></li><li><p><strong>Seamless testing and versioning</strong>: New features integrate smoothly without disrupting live campaigns.</p></li><li><p><strong>Infrastructure handled for them</strong>: Infinitic takes care of the "plumbing," so engineers can focus on business logic and delivering customer value.</p></li></ul><div><hr></div><p>With Infinitic, Splio has revolutionized its ability to deliver value to customers, all while keeping its engineering team lean, agile, and effective.</p><p>Check out the full story here: <a href="https://www.infinitic.io/post/splio-case-study-using-infinitic">Splio Case Study</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Infinitic&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How To Use Infinitic Within An Existing Infrastructure]]></title><description><![CDATA[A Practical Guide to Infinitic for Established Infrastructures.]]></description><link>https://infinitic.substack.com/p/how-to-use-infinitic-within-an-existing</link><guid isPermaLink="false">https://infinitic.substack.com/p/how-to-use-infinitic-within-an-existing</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Thu, 05 Dec 2024 21:36:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For most teams, starting a project from scratch is a rarity. Chances are, you&#8217;re already working with established applications and infrastructure. If you&#8217;re considering introducing <strong>Infinitic</strong> into your stack to leverage its orchestration pattern, event-driven architecture, and built-in observability, you might be wondering how to do it without disrupting your existing systems. This guide will show you how.</p><p>Infinitic allows you to launch workflows using its client. These workflows can be triggered by various sources, including webhooks, application servers, and events processed by message brokers like <strong>Kafka</strong> or <strong>RabbitMQ</strong>. Whether you&#8217;re managing order events or integrating with existing APIs, Infinitic provides the tools to make the transition seamless.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for free to receive new posts.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Using Existing Events To Start Workflows</h2><p>Imagine you&#8217;re handling order fulfillment and want to manage its lifecycle through  existing events like <code>OrderStartedEvent</code> and <code>OrderUpdatedEvent</code> already present in a Kafka topic. Infinitic enables you to start workflows based on these events. Here&#8217;s an example of an order fulfillment workflow interface:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mB-2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc91846c1-c62e-4de4-a159-ce2b829419b6_3550x986.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mB-2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc91846c1-c62e-4de4-a159-ce2b829419b6_3550x986.png 424w, https://substackcdn.com/image/fetch/$s_!mB-2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc91846c1-c62e-4de4-a159-ce2b829419b6_3550x986.png 848w, https://substackcdn.com/image/fetch/$s_!mB-2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc91846c1-c62e-4de4-a159-ce2b829419b6_3550x986.png 1272w, https://substackcdn.com/image/fetch/$s_!mB-2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc91846c1-c62e-4de4-a159-ce2b829419b6_3550x986.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mB-2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc91846c1-c62e-4de4-a159-ce2b829419b6_3550x986.png" width="1456" height="404" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c91846c1-c62e-4de4-a159-ce2b829419b6_3550x986.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:404,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:166826,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mB-2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc91846c1-c62e-4de4-a159-ce2b829419b6_3550x986.png 424w, https://substackcdn.com/image/fetch/$s_!mB-2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc91846c1-c62e-4de4-a159-ce2b829419b6_3550x986.png 848w, https://substackcdn.com/image/fetch/$s_!mB-2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc91846c1-c62e-4de4-a159-ce2b829419b6_3550x986.png 1272w, https://substackcdn.com/image/fetch/$s_!mB-2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc91846c1-c62e-4de4-a159-ce2b829419b6_3550x986.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can set up a Kafka consumer that listens for OrderStartedEvent and triggers a OrderFulfillmentWorkflow:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zS3x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zS3x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png 424w, https://substackcdn.com/image/fetch/$s_!zS3x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png 848w, https://substackcdn.com/image/fetch/$s_!zS3x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png 1272w, https://substackcdn.com/image/fetch/$s_!zS3x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zS3x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png" width="1456" height="1398" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1398,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1186587,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zS3x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png 424w, https://substackcdn.com/image/fetch/$s_!zS3x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png 848w, https://substackcdn.com/image/fetch/$s_!zS3x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png 1272w, https://substackcdn.com/image/fetch/$s_!zS3x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f93cec0-19de-4a1b-9b08-da92ceff845a_2354x2260.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Pro Tip:</strong> Use tags like <code>orderId:{orderId}</code> to identify workflows. Tags make it easy to cancel workflows, or send signals later.</p><h2>Sending Existing Events To Running Workflows</h2><p>Infinitic also supports dynamic interaction with running workflows. You can trigger new <a href="https://docs.infinitic.io/docs/workflows/parallel#parallel-methods">methods in parallel</a> or use <a href="https://docs.infinitic.io/docs/workflows/signals">channels</a>. </p><p>For example, you can extend the Kafka consumer to forward some <code>OrderUpdatedEvent</code> and <code>OrderDeliveryEvent</code> events to their respective running workflows:<code> </code></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n3yY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70c36c-9189-4720-8935-2b29295d0f9c_1782x2314.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n3yY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70c36c-9189-4720-8935-2b29295d0f9c_1782x2314.png 424w, https://substackcdn.com/image/fetch/$s_!n3yY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70c36c-9189-4720-8935-2b29295d0f9c_1782x2314.png 848w, https://substackcdn.com/image/fetch/$s_!n3yY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70c36c-9189-4720-8935-2b29295d0f9c_1782x2314.png 1272w, https://substackcdn.com/image/fetch/$s_!n3yY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70c36c-9189-4720-8935-2b29295d0f9c_1782x2314.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n3yY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70c36c-9189-4720-8935-2b29295d0f9c_1782x2314.png" width="1456" height="1891" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a70c36c-9189-4720-8935-2b29295d0f9c_1782x2314.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1891,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1385149,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!n3yY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70c36c-9189-4720-8935-2b29295d0f9c_1782x2314.png 424w, https://substackcdn.com/image/fetch/$s_!n3yY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70c36c-9189-4720-8935-2b29295d0f9c_1782x2314.png 848w, https://substackcdn.com/image/fetch/$s_!n3yY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70c36c-9189-4720-8935-2b29295d0f9c_1782x2314.png 1272w, https://substackcdn.com/image/fetch/$s_!n3yY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70c36c-9189-4720-8935-2b29295d0f9c_1782x2314.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Leveraging Existing API-Based Services</h2><p>Also, Integrating Infinitic doesn&#8217;t mean abandoning your existing API services. On the contrary, Infinitic allows you to reuse these services, offering:</p><ul><li><p><strong>Automatic Retries:</strong> Handle failures seamlessly.</p></li><li><p><strong>Batch Processing:</strong> Improve efficiency.</p></li><li><p><strong>Timeout and Error Handling:</strong> Ensure robust operations.</p></li></ul><p>Here&#8217;s an example of integrating a payment API:</p><ol><li><p>Define the service interface:</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K06E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76956feb-aaaf-4374-924a-a6f71d29b9e8_3550x650.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K06E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76956feb-aaaf-4374-924a-a6f71d29b9e8_3550x650.png 424w, https://substackcdn.com/image/fetch/$s_!K06E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76956feb-aaaf-4374-924a-a6f71d29b9e8_3550x650.png 848w, https://substackcdn.com/image/fetch/$s_!K06E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76956feb-aaaf-4374-924a-a6f71d29b9e8_3550x650.png 1272w, https://substackcdn.com/image/fetch/$s_!K06E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76956feb-aaaf-4374-924a-a6f71d29b9e8_3550x650.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K06E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76956feb-aaaf-4374-924a-a6f71d29b9e8_3550x650.png" width="1456" height="267" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76956feb-aaaf-4374-924a-a6f71d29b9e8_3550x650.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:267,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:104637,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!K06E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76956feb-aaaf-4374-924a-a6f71d29b9e8_3550x650.png 424w, https://substackcdn.com/image/fetch/$s_!K06E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76956feb-aaaf-4374-924a-a6f71d29b9e8_3550x650.png 848w, https://substackcdn.com/image/fetch/$s_!K06E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76956feb-aaaf-4374-924a-a6f71d29b9e8_3550x650.png 1272w, https://substackcdn.com/image/fetch/$s_!K06E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76956feb-aaaf-4374-924a-a6f71d29b9e8_3550x650.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ol start="2"><li><p>Implement the service with an HTTP client:</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3YGw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a3a33cd-2343-4155-a4e4-d54a13ef84b6_3566x1854.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3YGw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a3a33cd-2343-4155-a4e4-d54a13ef84b6_3566x1854.png 424w, https://substackcdn.com/image/fetch/$s_!3YGw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a3a33cd-2343-4155-a4e4-d54a13ef84b6_3566x1854.png 848w, https://substackcdn.com/image/fetch/$s_!3YGw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a3a33cd-2343-4155-a4e4-d54a13ef84b6_3566x1854.png 1272w, https://substackcdn.com/image/fetch/$s_!3YGw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a3a33cd-2343-4155-a4e4-d54a13ef84b6_3566x1854.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3YGw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a3a33cd-2343-4155-a4e4-d54a13ef84b6_3566x1854.png" width="1456" height="757" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a3a33cd-2343-4155-a4e4-d54a13ef84b6_3566x1854.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:757,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:383631,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3YGw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a3a33cd-2343-4155-a4e4-d54a13ef84b6_3566x1854.png 424w, https://substackcdn.com/image/fetch/$s_!3YGw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a3a33cd-2343-4155-a4e4-d54a13ef84b6_3566x1854.png 848w, https://substackcdn.com/image/fetch/$s_!3YGw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a3a33cd-2343-4155-a4e4-d54a13ef84b6_3566x1854.png 1272w, https://substackcdn.com/image/fetch/$s_!3YGw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a3a33cd-2343-4155-a4e4-d54a13ef84b6_3566x1854.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol start="3"><li><p>Incorporate it into your workflow:</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uBwA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186a1c90-10d5-46be-a7e2-77c7f7405a30_3730x1512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uBwA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186a1c90-10d5-46be-a7e2-77c7f7405a30_3730x1512.png 424w, https://substackcdn.com/image/fetch/$s_!uBwA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186a1c90-10d5-46be-a7e2-77c7f7405a30_3730x1512.png 848w, https://substackcdn.com/image/fetch/$s_!uBwA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186a1c90-10d5-46be-a7e2-77c7f7405a30_3730x1512.png 1272w, https://substackcdn.com/image/fetch/$s_!uBwA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186a1c90-10d5-46be-a7e2-77c7f7405a30_3730x1512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uBwA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186a1c90-10d5-46be-a7e2-77c7f7405a30_3730x1512.png" width="1456" height="590" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/186a1c90-10d5-46be-a7e2-77c7f7405a30_3730x1512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:590,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:292766,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uBwA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186a1c90-10d5-46be-a7e2-77c7f7405a30_3730x1512.png 424w, https://substackcdn.com/image/fetch/$s_!uBwA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186a1c90-10d5-46be-a7e2-77c7f7405a30_3730x1512.png 848w, https://substackcdn.com/image/fetch/$s_!uBwA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186a1c90-10d5-46be-a7e2-77c7f7405a30_3730x1512.png 1272w, https://substackcdn.com/image/fetch/$s_!uBwA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186a1c90-10d5-46be-a7e2-77c7f7405a30_3730x1512.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Why Infinitic?</h2><p>By adopting Infinitic, you gain:</p><ul><li><p><strong>Seamless Integration:</strong> Work with your existing systems without disruption.</p></li><li><p><strong>Flexibility</strong>: Harness the full power of loops, conditions, and data manipulation to define durable processes.</p></li><li><p><strong>Easy Maintenance</strong>: Workflows are easy to understand, consolidated in a single class, and version-controlled like standard code.</p></li><li><p><strong>Enhanced Observability</strong>: Comprehensive monitoring with detailed insights available on dashboards.</p></li><li><p><strong>Unmatched Reliability</strong>: Workflows remain resilient to service or worker failures, ensuring consistent operation.</p></li><li><p><strong>High Scalability</strong>: Infinitic's core event-driven architecture guarantees exceptional scalability.</p></li></ul><p>With Infinitic, you&#8217;re not just adopting a tool&#8212;you&#8217;re future-proofing your infrastructure.</p><p>Ready to get started? Visit <a href="https://docs.infinitic.io/">Infinitic Documentation</a> for more details.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Infinitic&#8217;s Newsletter! Subscribe for free to receive new posts.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Unlocking Performance With Batches]]></title><description><![CDATA[Infinitic 0.16.2's new batch processing feature boosts performance by up to 10x, making it ideal for high-scale systems.]]></description><link>https://infinitic.substack.com/p/unlocking-performance-with-batches</link><guid isPermaLink="false">https://infinitic.substack.com/p/unlocking-performance-with-batches</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Tue, 26 Nov 2024 10:59:05 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/bc95b996-01b1-48cc-a4ff-073a4098bdcf_1621x296.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Infinitic 0.16.2 introduces <strong>batch processing</strong>, a powerful feature designed to optimize performance by processing multiple messages in batches instead of individually. This capability can boost throughput by up to <strong>10x</strong> in high-volume scenarios.</p><p>By reducing the frequency of network calls and database operations, batching enhances the performance of both Infinitic's internal processes (e.g., database updates) and user-defined tasks (e.g., bulk API calls). </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>How Batch Processing Works in Infinitic</h3><h4><strong>Message Consumption</strong></h4><p>Infinitic components can consume multiple messages in a single batch from the message broker. This reduces the number of network calls required to retrieve messages.</p><p>For instance, instead of making 1,000 individual network calls to consume 1,000 messages, Infinitic retrieves them all in one call, minimizing <strong>latency</strong> and <strong>network overhead</strong>, particularly in high-volume environments.</p><h4><strong>Message Processing</strong></h4><p>Once consumed, messages are processed in batches, optimizing performance across two areas:</p><ul><li><p><strong>Internal Components</strong>: Infinitic's internal engines, such as the Workflow State Engine and Service Tag Engine, consolidate multiple database operations into a single transaction.</p></li><li><p><strong>User-defined Tasks</strong>: Tasks are grouped and processed together, enabling efficient bulk operations, such as executing a batch of API calls.</p></li></ul><p><strong>Batching also applies to message sending</strong>, reducing the number of network calls required for publishing messages. For example, instead of sending 1,000 messages one at a time, a single network call can send them all.</p><h4><strong>Message Acknowledgment</strong></h4><p>Similarly, message acknowledgments (or negative acknowledgments) are batched. Rather than sending an acknowledgment for each message, Infinitic groups and sends acknowledgments collectively, further reducing network traffic.</p><p>For example, successfully processing 1,000 messages requires just one batch acknowledgment instead of 1,000 individual ones.</p><h3>Executors: Comparing Processing Modes</h3><h4><strong>Without batching</strong></h4><p>Messages are processed individually and in parallel based on the <code>concurrency</code> setting. Each message goes through three sequential phases:</p><ol><li><p>Deserialization - The message is deserialized from its transport format</p></li><li><p>Processing - The actual logic is executed</p></li><li><p>Acknowledgment - The message broker is notified of successful processing</p></li></ol><p>These phases happen independently for each message, as shown in the diagram below:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dYxX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa40a011f-822b-41db-bfa4-6c08f53af533_1311x273.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dYxX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa40a011f-822b-41db-bfa4-6c08f53af533_1311x273.png 424w, https://substackcdn.com/image/fetch/$s_!dYxX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa40a011f-822b-41db-bfa4-6c08f53af533_1311x273.png 848w, https://substackcdn.com/image/fetch/$s_!dYxX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa40a011f-822b-41db-bfa4-6c08f53af533_1311x273.png 1272w, https://substackcdn.com/image/fetch/$s_!dYxX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa40a011f-822b-41db-bfa4-6c08f53af533_1311x273.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dYxX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa40a011f-822b-41db-bfa4-6c08f53af533_1311x273.png" width="1311" height="273" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a40a011f-822b-41db-bfa4-6c08f53af533_1311x273.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:273,&quot;width&quot;:1311,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49096,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dYxX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa40a011f-822b-41db-bfa4-6c08f53af533_1311x273.png 424w, https://substackcdn.com/image/fetch/$s_!dYxX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa40a011f-822b-41db-bfa4-6c08f53af533_1311x273.png 848w, https://substackcdn.com/image/fetch/$s_!dYxX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa40a011f-822b-41db-bfa4-6c08f53af533_1311x273.png 1272w, https://substackcdn.com/image/fetch/$s_!dYxX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa40a011f-822b-41db-bfa4-6c08f53af533_1311x273.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h4><strong>With batching</strong></h4><p>Messages are processed in batches and in parallel. Messages are received into batches based on the <code>batch.maxMessages</code> setting (e.g. 1000 messages per batch).</p><p>These batches are then processed in parallel according to the <code>concurrency</code> setting (e.g. 10 concurrent batches).</p><p>For example, with <code>concurrency = 10</code> and <code>batch.maxMessages = 1000</code>, the system can process up to 10,000 messages simultaneously in memory</p><p>For Service Executors specifically, messages within each batch can be further re-grouped using a custom <code>batchKey</code>. This allows related messages to be processed together efficiently, as shown in the diagram below:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wRL5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85ec65de-c13c-4072-b2d2-9735a211f8d3_1577x273.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wRL5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85ec65de-c13c-4072-b2d2-9735a211f8d3_1577x273.png 424w, https://substackcdn.com/image/fetch/$s_!wRL5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85ec65de-c13c-4072-b2d2-9735a211f8d3_1577x273.png 848w, https://substackcdn.com/image/fetch/$s_!wRL5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85ec65de-c13c-4072-b2d2-9735a211f8d3_1577x273.png 1272w, https://substackcdn.com/image/fetch/$s_!wRL5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85ec65de-c13c-4072-b2d2-9735a211f8d3_1577x273.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wRL5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85ec65de-c13c-4072-b2d2-9735a211f8d3_1577x273.png" width="1456" height="252" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85ec65de-c13c-4072-b2d2-9735a211f8d3_1577x273.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:252,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59878,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wRL5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85ec65de-c13c-4072-b2d2-9735a211f8d3_1577x273.png 424w, https://substackcdn.com/image/fetch/$s_!wRL5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85ec65de-c13c-4072-b2d2-9735a211f8d3_1577x273.png 848w, https://substackcdn.com/image/fetch/$s_!wRL5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85ec65de-c13c-4072-b2d2-9735a211f8d3_1577x273.png 1272w, https://substackcdn.com/image/fetch/$s_!wRL5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85ec65de-c13c-4072-b2d2-9735a211f8d3_1577x273.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>Workflow State and Tag Engines: Special Considerations</h2><p>The Workflow State and Tag Engines require special handling to maintain data consistency:</p><ul><li><p>The Workflow State Engine must process messages for a given workflow instance sequentially to maintain workflow state integrity. For example, if workflow A has two pending messages, they must be processed one after another, not simultaneously.</p></li><li><p>Similarly, the Workflow Tag Engine must process messages for a given workflow tag sequentially, to avoid race conditions.</p></li></ul><h4>Without batching</h4><p>Messages are first sharded by their key (workflow ID for State Engine, workflow tag for Tag Engine) to ensure sequential processing within each key. Then messages are processed individually and in parallel based on the <code>concurrency</code> setting, but messages with the same key are never processed simultaneously. This is illustrated in the diagram below:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FSyQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7a2edf-902d-4390-98fc-4813de83853f_1402x267.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FSyQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7a2edf-902d-4390-98fc-4813de83853f_1402x267.png 424w, https://substackcdn.com/image/fetch/$s_!FSyQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7a2edf-902d-4390-98fc-4813de83853f_1402x267.png 848w, https://substackcdn.com/image/fetch/$s_!FSyQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7a2edf-902d-4390-98fc-4813de83853f_1402x267.png 1272w, https://substackcdn.com/image/fetch/$s_!FSyQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7a2edf-902d-4390-98fc-4813de83853f_1402x267.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FSyQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7a2edf-902d-4390-98fc-4813de83853f_1402x267.png" width="1402" height="267" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f7a2edf-902d-4390-98fc-4813de83853f_1402x267.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:267,&quot;width&quot;:1402,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47502,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FSyQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7a2edf-902d-4390-98fc-4813de83853f_1402x267.png 424w, https://substackcdn.com/image/fetch/$s_!FSyQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7a2edf-902d-4390-98fc-4813de83853f_1402x267.png 848w, https://substackcdn.com/image/fetch/$s_!FSyQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7a2edf-902d-4390-98fc-4813de83853f_1402x267.png 1272w, https://substackcdn.com/image/fetch/$s_!FSyQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7a2edf-902d-4390-98fc-4813de83853f_1402x267.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h4>With batching</h4><p>Messages are first collected into batches based on the <code>batch.maxMessages</code> setting (e.g. 1000 messages per batch). These batches are then sharded by their key (workflow ID for State Engine, workflow tag for Tag Engine) to group related messages together. The resulting key-based batches are processed in parallel according to the <code>concurrency</code> setting, while ensuring sequential processing within each key.</p><p>This approach optimizes throughput while maintaining data consistency by:</p><ul><li><p>Processing multiple independent keys in parallel</p></li><li><p>Batching related messages with the same key together</p></li><li><p>Preserving sequential processing order within each key</p></li><li><p>Minimizing database transactions through batch processing (only one read and one write by batch)</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cVO9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8feac715-3e88-4566-a3cd-5463573415de_1621x296.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cVO9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8feac715-3e88-4566-a3cd-5463573415de_1621x296.png 424w, https://substackcdn.com/image/fetch/$s_!cVO9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8feac715-3e88-4566-a3cd-5463573415de_1621x296.png 848w, https://substackcdn.com/image/fetch/$s_!cVO9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8feac715-3e88-4566-a3cd-5463573415de_1621x296.png 1272w, https://substackcdn.com/image/fetch/$s_!cVO9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8feac715-3e88-4566-a3cd-5463573415de_1621x296.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cVO9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8feac715-3e88-4566-a3cd-5463573415de_1621x296.png" width="1456" height="266" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8feac715-3e88-4566-a3cd-5463573415de_1621x296.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:266,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65922,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cVO9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8feac715-3e88-4566-a3cd-5463573415de_1621x296.png 424w, https://substackcdn.com/image/fetch/$s_!cVO9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8feac715-3e88-4566-a3cd-5463573415de_1621x296.png 848w, https://substackcdn.com/image/fetch/$s_!cVO9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8feac715-3e88-4566-a3cd-5463573415de_1621x296.png 1272w, https://substackcdn.com/image/fetch/$s_!cVO9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8feac715-3e88-4566-a3cd-5463573415de_1621x296.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Real-World Performance Gains</h3><p>While Infinitic hasn&#8217;t yet undergone third-party benchmarking, internal testing highlights its potential:</p><ul><li><p><strong>Local Testing:</strong> Up to 10x throughput improvement with batching enabled.</p></li><li><p><strong>Scale Benefits:</strong> More pronounced at larger scales, especially under high-concurrency workloads.</p></li></ul><p>In one test, Infinitic processed <strong>100,000 simple workflows (2 tasks each) in just 1 minute</strong> with only 2 workers on a single MacBook.</p><div><hr></div><h3><strong>Get Started with Infinitic 0.16.2</strong></h3><p>The addition of batch processing underscores Infinitic&#8217;s commitment to delivering scalable, high-performance solutions. Whether you&#8217;re managing high-throughput systems or orchestrating complex workflows, this feature is a game-changer for efficiency.</p><p>Explore the  <a href="https://docs.infinitic.io/docs/community/releases#v0-16-2">official documentation</a> to start integrating batch processing into your applications today!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Infinitic&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[New in Infinitic 0.16.0: Batch Processing]]></title><description><![CDATA[The release of Infinitic 0.16.0 introduces Batch Processing, a feature designed to optimize high-volume tasks by processing them in bulk.]]></description><link>https://infinitic.substack.com/p/batch-processing</link><guid isPermaLink="false">https://infinitic.substack.com/p/batch-processing</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Mon, 28 Oct 2024 10:34:26 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d6ae036c-7a66-4493-b5cb-e1d073626fb6_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The release of <strong><a href="https://github.com/infiniticio/infinitic/releases/tag/v0.16.0">Infinitic 0.16.0</a></strong> introduces <strong>Batch Processing</strong>, a feature designed to optimize high-volume tasks by processing them in bulk. </p><h4><strong>Why Batch Processing Matters</strong></h4><p>Batch processing in Infinitic is ideal for scenarios such as:</p><ul><li><p><strong>Bulk Database Operations</strong>: Minimize connection overhead with grouped inserts or updates. Instead of executing 1,000 individual inserts, perform them in batches of 100, reducing connection overhead by 99%.</p></li><li><p><strong>API costs</strong>: Efficiently manage external service requests within usage constraints. If you pay an API per request, Infinitic optimizes request batching to reduce costs while processing as many tasks as possible.</p></li><li><p><strong>Resource-Intensive Computations</strong>: Optimize CPU and memory use by consolidating tasks. Process multiple computations together, reducing system overhead and improving overall throughput.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div></li></ul><h4><strong>How It Works</strong></h4><p>The new batch execution model lets developers define batch parameters using annotations like <code>@Batch(maxMessages, maxSeconds)</code>, configuring tasks based on size and timing. </p><ul><li><p><strong>maxMessages</strong>: Defines the maximum number of tasks that can be grouped into a single batch. Once this threshold is reached, the batch is immediately processed. Example: With <code>maxMessages = 50</code>, if your system receives 175 tasks:</p><ul><li><p>First 50 tasks &#8594; Batch 1 (processed immediately)</p></li><li><p>Next 50 tasks &#8594; Batch 2 (processed immediately)</p></li><li><p>Next 50 tasks &#8594; Batch 3 (processed immediately)</p></li><li><p>Remaining 25 tasks &#8594; Wait for more tasks or maxSeconds timeout</p></li></ul></li><li><p><strong>maxSeconds</strong>: Sets a maximum waiting period after receiving the first task in a batch. Ensures tasks don't wait indefinitely if the maxMessages threshold isn't met. Example: With <code>maxSeconds = 1.0</code>:</p><ul><li><p>First task arrives at T+0</p></li><li><p>Only 24 more tasks arrive within 1 second</p></li><li><p>At T+1 second, all 25 tasks are processed together, even though maxMessages wasn't reached</p></li></ul></li></ul><p>Additionally, an optional <strong><a href="https://docs.infinitic.io/docs/services/batched#optional-batch-key">batch key</a></strong> can be added to the task metadata. When present, the task will be added in a batch with other tasks having the same batch key.</p><p>Note:  batches are counted as a single execution for the <a href="http://localhost:3000/docs/services/implementation#concurrency">concurrency</a> parameter, meaning up to <code>concurrency</code> batches may be processed in parallel. </p><h4><strong>Use Case Highlight</strong></h4><p>Consider a high-traffic service needing to process bulk email requests. With batch processing, you can set <code>maxMessages = 50</code> and <code>maxSeconds = 1.0</code> to efficiently send emails while adhering to API rate limits. Yet each email&#8217;s response remains distinct, allowing fine control over individual results in the workflow.</p><p>Let's examine a practical implementation:</p><pre><code>@Batch(maxMessages = 50, maxSeconds = 1.0)
Map&lt;String, EmailResult&gt; sendEmail(Map&lt;String, EmailRequest&gt; requests) {
  // Batch process up to 50 emails or after 1 second
 return emailService.sendBatch(requests);
}</code></pre><p>This simple configuration delivers impressive benefits:</p><ul><li><p>Reduces API calls by up to 98%</p></li><li><p>Preserves workflow flexibility</p></li></ul><h4><strong>Getting Started</strong></h4><p>To dive deeper into implementing batched tasks, explore our <strong><a href="https://docs.infinitic.io/docs/services/batched">documentation</a></strong>. Try out this feature and share your experience with the community!<br></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://infinitic.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Rethinking Event-Driven Applications: Why the Orchestrator Pattern is the Way Forward]]></title><description><![CDATA[If managing event-driven applications feels like untangling a web of interconnected services, you&#8217;re not alone. The root cause? The widely adopted choreography pattern.]]></description><link>https://infinitic.substack.com/p/rethinking-event-driven-applications</link><guid isPermaLink="false">https://infinitic.substack.com/p/rethinking-event-driven-applications</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Fri, 25 Oct 2024 12:28:57 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2a567619-d3e7-4f21-9a8c-8642c78fd958_1121x573.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Overwhelmed by the Complexity of Event-Driven Applications?</strong></h2><p>If managing event-driven applications feels like untangling a web of interconnected services, you&#8217;re not alone. Many developers encounter chaos and technical debt as new services react to one another in unpredictable ways. The root cause? The widely adopted choreography pattern.</p><div class="pullquote"><p>Read my full article <a href="https://gillesbarbier.medium.com/the-way-we-are-building-event-driven-applications-is-misguided-7f7c5f1a9061">on Medium</a>.</p></div><h2>Why Choreography Leads to Chaos</h2><p>The choreography pattern, where services directly consume and react to other services&#8217; events, is technically efficient at runtime, when your system is in production. However, this operational efficiency comes at a cost as it is difficult to code, maintain, and scale. Let&#8217;s explore why:</p><ul><li><p><strong>No Clear Ownership of Business Processes</strong>: In a choreography setup, business logic is dispersed across multiple services, making it challenging to assign ownership or even document the overall process.</p></li><li><p><strong>No Clear Path for Versioning Processes</strong>: When business processes are scattered across numerous event-driven services, rolling out updates or implementing changes without breaking running processes becomes a daunting task. </p></li><li><p><strong>Limited Service Decoupling</strong>: In the choreography pattern, services are tightly coupled by their reliance on consuming and reacting to each other&#8217;s events. This  coupling increases the risk of making changes as you do not really know who is consuming your events.</p></li><li><p><strong>Security and Governance Concerns</strong>: In a choreography model, services may receive and process data that they don&#8217;t need, simply because it&#8217;s required further down the line. Without a single orchestrator to manage interactions, enforcing security policies and governance standards becomes complex and less reliable.</p></li></ul><h2>Why Choose the Orchestrator Pattern?</h2><p>In contrast to the complexity of the choreography pattern, the orchestrator pattern provides a structured and centralized approach to managing business processes. Here&#8217;s why it stands out as a more effective solution:</p><ul><li><p><strong>Clear Ownership of Business Processes</strong>: With an orchestrator, there&#8217;s a dedicated service that oversees and coordinates each workflow. This makes it easier to assign clear ownership and accountability, as well as document processes comprehensively.</p></li><li><p><strong>Streamlined Versioning and Change Management</strong>: The orchestrator acts as a single point of control, making versioning straightforward. Changes to business processes can be rolled out consistently and reliably.</p></li><li><p><strong>Enhanced Service Decoupling</strong>: The orchestrator pattern improves decoupling by reducing the direct dependencies between services. Services communicate via commands and events through the orchestrator, allowing them to focus on their specific tasks without needing to know the internal workings of other services.</p></li><li><p><strong>Enhanced Security and Governance</strong>: The orchestrator controls what data services receive, ensuring that services only access the information they need. This centralized oversight allows for more effective enforcement of security policies and governance standards.</p></li></ul><h2>Introducing Infinitic</h2><p>Embracing the orchestrator pattern requires the right tools, and this is where <a href="https://infinitic.io">Infinitic</a> truly shines. Infinitic is designed to simplify the adoption of an orchestrated, event-driven architecture by automating much of the behind-the-scenes complexity.</p><p>Infinitic&#8217;s SDK manages essential components of event-driven systems, such as topic creation, schema management, serialization, and event definition. Developers only need to define business workflows and services; Infinitic takes care of communication between services by implementing message consumers and producers. </p><p>Infinitic also provides built-in error handling and resilience features, which keep workflows running smoothly even in the face of worker or service failures. This resilience gives developers confidence that their business processes are durable and reliable.</p><p>In essence, <a href="https://infinitic.io">Infinitic</a> removes much of the heavy lifting involved in adopting the orchestrator pattern. It allows developers to focus on their business logic while ensuring that infrastructure, scalability, and resilience are taken care of automatically. With Infinitic, you can build robust, scalable event-driven applications without sacrificing maintainability or simplicity.</p><h2>Simplify and Strengthen Your Architecture</h2><p>If you&#8217;re struggling with the pitfalls of the choreography pattern, it might be time to rethink your approach. Give Infinitic a try, even on an existing code base, and see how it simplifies the development of new features.</p><p>I&#8217;d love to hear your thoughts! Have you faced challenges with event-driven architectures? What has your experience been with orchestration versus choreography? Share your insights in the comments below or reach out directly!</p><div class="pullquote"><p>Read my full article <a href="https://gillesbarbier.medium.com/the-way-we-are-building-event-driven-applications-is-misguided-7f7c5f1a9061">on Medium</a>.</p></div>]]></content:encoded></item><item><title><![CDATA[Infinitic: Recent Updates and Documentation Enhancements]]></title><description><![CDATA[As more companies adopt Infinitic and provide valuable feedback, we've been making numerous updates and tweaks to enhance its implementation and flexibility.]]></description><link>https://infinitic.substack.com/p/infinitic-recent-updates-and-documentation</link><guid isPermaLink="false">https://infinitic.substack.com/p/infinitic-recent-updates-and-documentation</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Mon, 14 Oct 2024 14:53:39 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/bc221841-3845-4463-943c-2e88ffd99fba_200x200.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As more companies adopt Infinitic and provide valuable feedback, we've been making numerous updates and tweaks to enhance its implementation and flexibility. Here are some of the key improvements:</p><h2>Core Enhancements</h2><ul><li><p>Added support for PostgreSQL for storing workflow states</p></li><li><p>Developed configuration using builders instead of configuration files, enabling easier integration with frameworks like Spring</p></li></ul><h2>Documentation Expansion</h2><p>We've made significant additions to our documentation website:</p><h3>New Playbook Section</h3><p>Our new Playbook section is born from real user questions about implementing specific use cases. It serves a dual purpose: demonstrating Infinitic's capabilities and providing practical guidance to our users. This section includes:</p><ul><li><p><strong>Workflow Scheduler</strong>: Learn <a href="https://docs.infinitic.io/docs/playbook/workflow-scheduler">how to build a scheduler</a>  to execute workflows on a recurring basis. Remarkably, Infinitic achieves this without requiring additional infrastructure like cron jobs or dedicated database tables.</p></li><li><p><strong>Promises on Remote Tasks</strong>: Discover how to execute remote tasks asynchronously while still maintaining the ability to <a href="https://docs.infinitic.io/docs/playbook/promises">handle their errors or perform actions</a> after task completion. </p></li></ul><p>These examples not only showcase what Infinitic can do but also offer ready-to-use solutions for common scenarios our users face</p><h3>Third-Party Pulsar Provider Guide</h3><p>We've added a comprehensive guide on using Infinitic with external Pulsar providers, including:</p><ul><li><p><a href="https://docs.infinitic.io/docs/references/pulsar#clever-cloud">CleverCloud</a>: A Europe-based Platform as a Service (PaaS) provider offering a managed Pulsar service with a focus on developer experience and scalability.</p></li><li><p><a href="https://docs.infinitic.io/docs/references/pulsar#datastax">Datastax</a>: Known for their expertise in Apache Cassandra, DataStax offers Astra Streaming, a cloud-native messaging and event streaming platform built on Apache Pulsar.</p></li><li><p><a href="https://docs.infinitic.io/docs/references/pulsar#stream-native">StreamNative</a>: Founded by Pulsar's original creators, StreamNative provides a cloud platform for messaging and event streaming, with deep expertise in Pulsar technology.</p></li></ul><h3>Serialization Guide</h3><p>A new section detailing Infinitic's updated approach (as of version 0.15.0) to data <a href="https://docs.infinitic.io/docs/references/serialization">serialization</a> has been added to help you understand how Infinitic uses and leverage serialization.</p><p>We encourage you to explore these new resources and provide feedback as we continue to evolve both Infinitic and its documentation. Your input is invaluable in shaping the future of our platform and ensuring our documentation meets your real-world needs.</p>]]></content:encoded></item><item><title><![CDATA[News from Infinitic: New Website, Support Plans & Customer Spotlight. ]]></title><description><![CDATA[Scaling Infinitic with Improved Resources and Support]]></description><link>https://infinitic.substack.com/p/news-from-infinitic-new-website-support</link><guid isPermaLink="false">https://infinitic.substack.com/p/news-from-infinitic-new-website-support</guid><dc:creator><![CDATA[Yvonne Jouffrault]]></dc:creator><pubDate>Tue, 20 Aug 2024 06:35:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d8d706c0-9005-4fcf-80b5-5e05cfd835e7_995x810.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello there! I&#8217;m <a href="https://www.linkedin.com/in/yvonnejouffrault/">Yvonne Jouffrault</a> and have worked with <a href="https://www.linkedin.com/in/gillesbarbier/">Gilles</a> over the last 5 years on several projects and companies. I recently joined the Infinitic team to help focus on growing visibility for our open source project AND offering more support to businesses that rely on Infinitic for mission critical projects at scale. [See our new support plans below!]</p><p>We&#8217;ve been talking with a lot of teams lately to understand the friction points of implementing Infinitic and downstream benefits that teams realize after they are in production. So far we&#8217;ve learned:</p><p><strong>Frictions</strong>: </p><ul><li><p>People are initially excited about Infinitic's potential, but often grapple with implementing its 'architectural pattern'. Infinitic eliminates the need to develop and maintain a variety of separate tools and systems: cron jobs, state management and continuous database polling, background workers, resilient API construction. Avoiding these disparate systems streamlines development, but the paradigm shift can be challenging to grasp at first.</p></li><li><p>Additionally, two main hurdles currently exist for adoption: teams must manage Apache Pulsar, and applications need to be written in Java or Kotlin. These requirements can present significant barriers, despite the potential benefits of Infinitic's unified approach.</p></li></ul><p><strong>Benefits</strong>: once teams have figured it out and are using it, they rave about how quickly they built their use case and how they can quickly (and reliably) make updates with new versions. See our customer spotlight below to hear more! &#128071;</p><p>So we&#8217;re focused on communicating how Infinitic works (see our new website!) and offering development support plans to help companies with implementation. We&#8217;ve also made improvements to the documentation to help teams get from 0-1 with a managed version of Pulsar (and we&#8217;re considering some ideas to enable applications in other languages to run workflows). </p><h2>Infinitic has a new website!</h2><p>Our <a href="https://infinitic.io">new website</a> is intended to give a high level overview of how Infinitic can help Application teams build scalable event-driven processes, how it works and some use cases. Check out and let us know what you think.</p><h2>Infinitic Support Plans</h2><p>While we&#8217;ve always offered support for companies using Infinitic, we&#8217;ve recently formalized our offering and now offer 2 tiers of support starting at $2,000/month. We also offer Co-development services which can include extending the functionality of Infinitic or developing complementary modules specific to the company's needs. Just hit reply if you would like more details.</p><h2>Company Spotlight</h2><p><a href="https://splio.com/en/">Splio</a> has been using Infinitic for almost 3 years and is running millions of workflow instances per day. Their platform enables mid-market retailers to build workflows that send personalized communications to customers based on their behavior and signals.</p><p>When Splio first implemented Infinitic 3 years ago, it enabled them to build the backend infrastructure and logic for this important feature on their platform in a matter of weeks instead of months - without compromising scalability or reliability.</p><p>Using Infinitic has also allowed them to easily make tweaks to the logic based on product requirements AND offered their clients flexibility in the personalization and timing of communications. Anytime they make updates to the logic or UI, they appreciate being able to deploy a new version of their workflows without disrupting running workflow instances.</p><h2>We Want To Hear From You!</h2><p>Have questions or want to talk about some ways that your team can build better event-driven processes with Infinitic? <a href="https://calendar.app.google/Eme4M5Y4fSyzAk596">Schedule a time to chat</a>.</p><p><strong>Connect with Infinitic:</strong></p><p><a href="https://www.linkedin.com/company/infinitic-io">Follow Infinitic on Linkedin</a></p><p><a href="https://www.github.com/infiniticio/infinitic">Star us on Github!</a></p><div><hr></div><p><strong>About Infinitic:</strong></p><p>Infinitic is an open source orchestration framework for application teams to build durable and flexible event-driven workflows without managing the complexities of infrastructure or accumulating tech debt.</p><p><em>Workflows as Code</em>: Replace distributed logic and fragmented execution across crons and API calls with centrally managed workflows that define the logic for each instance according to incoming data and events.</p><p><em>Orchestration Layer</em>: Infinitic is the central &#8216;brain&#8217; of your microservices and communicates through events to trigger &#8216;tasks&#8217; in multiple services at the right time - and manage the state of each workflow instance.</p><p><em>Built-in Durability</em>: The state of each step is automatically stored and no messages are never lost. Workflows are reliable and any issues can easily be traced in any workflow instance and resolved and restarted. Includes an API for end to end observability</p>]]></content:encoded></item><item><title><![CDATA[Simplifying The Building Of Event-Driven Processes]]></title><description><![CDATA[From time-to-time, It&#8217;s important to remember WHY we built Infinitic.]]></description><link>https://infinitic.substack.com/p/simplifying-the-building-of-event</link><guid isPermaLink="false">https://infinitic.substack.com/p/simplifying-the-building-of-event</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Tue, 28 May 2024 05:47:27 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>TL;DR - I invite you to upvote and join the discussion on <a href="https://news.ycombinator.com/item?id=40497602">Hacker News</a> regarding my last article. Your participation will help challenge the current industry status quo in building event-driven processes and spread awareness about Infinitic!</p></blockquote><p>Good morning.</p><p>I've never been fully convinced by the traditional way of building event-driven applications, where services react to the events emitted by other services. The more I explored this pattern, the more it became apparent that every new reaction step implemented following this approach contributed to mounting technical debt. This debt manifested itself through increasing technical and organizational complexity, heightened risks of failures or race conditions, leading to challenges in maintaining the integrity of business objects.</p><p>For this reason, at Infinitic we advocate the orchestrator pattern, where dedicated workflow services manage the execution of business processes by producing commands to services and consuming the corresponding events. This approach offers several benefits, including better service decoupling, easier comprehension of process implementations, and simpler handling of complex workflows, transactions, and versioning.</p><p>I delve deeper into this discussion in a blog post where I also introduce Infinitic as a way to enable teams to implement event-driven processes without the pain and complexity of building and managing an event-driven system themselves.</p><p>I invite you to take a moment to <a href="https://news.ycombinator.com/item?id=40497602">upvote or discuss this article on Hacker News</a>. Your support will help challenge the current industry status quo and spread awareness about Infinitic!</p><p>Best,</p><p>Gilles</p><p></p>]]></content:encoded></item><item><title><![CDATA[New 0.13.0 release]]></title><description><![CDATA[Build your own dashboards with the new Infinitic events!]]></description><link>https://infinitic.substack.com/p/new-0130-release</link><guid isPermaLink="false">https://infinitic.substack.com/p/new-0130-release</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Tue, 05 Mar 2024 10:11:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0962c423-1356-434c-bbe5-ae8d49963b3c_1501x1501.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi,<br><br>I&#8217;m thrilled to announce the release of <a href="https://github.com/infiniticio/infinitic/releases/tag/v0.13.0">Infinitic version 0.13.0</a>, packed with exciting new features, performance improvements, and bug fixes that will enhance your experience with Infinitic.</p><blockquote><p>Infinitic is an easiest way to build scalable and reliable even-driven applications, without having to deal with all the complexity.</p></blockquote><h2>Introducing CloudEvents (Beta)</h2><p>One of the most significant additions in this release is the introduction of CloudEvents. Infinitic now exposes its events in the CloudEvents JSON format, allowing users to build their own dashboards, logs, or even add hooks to specific events. This feature opens up a world of possibilities for monitoring, auditing, and integrating Infinitic with other systems.</p><p>Some of the events exposed include:</p><ul><li><p>Workflow-related events, such as <code>methodCanceled</code>, <code>methodCompleted</code>, <code>methodFailed</code>, <code>methodTimedOut</code></p></li><li><p>Task-related events, such as <code>taskDispatched</code>, <code>taskCompleted</code>, <code>taskFailed</code>, <code>taskTimedOut</code></p></li><li><p>Child-workflow-related events, such as <code>remoteMethodDispatched</code>, <code>remoteMethodCompleted</code>, <code>remoteMethodFailed</code>, <code>remoteMethodCanceled</code>, <code>remoteMethodTimedOut</code></p></li></ul><p>Each event is accompanied by relevant data, such as error details or method arguments, providing valuable context for monitoring and troubleshooting.</p><p><em>This feature is currently in beta and may be refined based on user feedback.</em></p><h2>Delegated Tasks</h2><p>Infinitic 0.13.0 introduces the concept of "delegated tasks," addressing scenarios where tasks cannot be processed directly by a worker and instead require invoking an external system. Previously, if the external system could not provide a synchronous response, Infinitic would be left without a clear indication of the task's outcome or the ability to retrieve the result.</p><p>With the delegated task feature, enabled through an annotation on the task, Infinitic understands that the method's completion does not signify the task's completion and awaits asynchronous notification of the task's outcome. A new <code>completeDelegatedTask</code> method has been added to the Infinitic client to support this functionality.</p><h2>Performance Improvements</h2><p>Infinitic 0.13.0 brings several performance improvements to enhance the efficiency of your data operations:</p><p><strong>Sortable UUIDs</strong>: Infinitic now uses UUID version 7, which includes a timestamp, expected to enhance performance when used as primary keys in databases.</p><p><strong>Idempotency Keys</strong>: The <code>taskId</code> can now be reliably used as an idempotent key, as Infinitic will generate the same value for <code>taskId</code> even if the task creation process is duplicated.</p><p><strong>Optimized Workflow Initiation</strong>: The topics architecture has been optimized, allowing the first task to be processed immediately upon dispatch, substantially reducing the "time to first execution" during surges in workflows launch.</p><p><strong>Worker Graceful Shutdown</strong>: Workers now attempt to complete any ongoing executions before shutting down, with a configurable grace period, ensuring less duplicated messages during shutdown.</p><p><strong>Quicker Worker Start</strong>: Upon startup, workers now verify and set up the necessary resources (tenant, namespace, topics) in parallel, significantly reducing startup time, especially in scenarios with a large number of tasks or workflows.</p><p></p><div class="pullquote"><p>I&#8217;m excited to see how you leverage the capabilities introduced in Infinitic 0.13.0 to streamline your workflows. As always, we value your feedback and encourage you to share your experiences or any suggestions you may have.</p></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Infinitic&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[New release v0.12.1]]></title><description><![CDATA[Significant update to Infinitic, the scalable workflow engine for distributed services]]></description><link>https://infinitic.substack.com/p/new-release-v0121</link><guid isPermaLink="false">https://infinitic.substack.com/p/new-release-v0121</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Wed, 13 Dec 2023 08:31:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3931c682-602d-4513-bc18-d062d3b91855_200x200.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Dear Infinitic Community,</p><p>I&#8217;m thrilled to announce 0.12.1 a significant update to Infinitic, the scalable workflow engine that extends your event streaming cluster with durable execution capabilities.</p><div class="pullquote"><p>I'd also like to mention that I am now open to consultancy opportunities. Feel free to reach out by responding to this message for any collaboration or consultation needs &#10084;&#65039;.</p></div><h2>&#128640; <strong>New Feature</strong>: <strong>Global Timeout</strong> </h2><p>In previous versions of Infinitic, you already had the option to implement a 'runtime timeout' for tasks. Essentially, if a task's execution time exceeded the predetermined limit, it would be flagged as a failure by the task worker. However, there were limitations, such as the inability of the worker to report timeouts in cases of crashes, memory shortages, or network issues. To address this, we're introducing a new 'global timeout' feature in this latest release. This feature designates a task or child-workflow as timed out at the workflow level if no result is provided within the set timeframe. This feature is useful to ensure that your workflow is not stuck even when workers experience malfunctions. Remember to consider the time spent in queues and potential retries when setting a global timeout.</p><h2>&#129714; <strong>Bug Fixes</strong></h2><p>In my pursuit of maintaining seamless backward compatibility, I conducted thorough tests on the new version and discovered a previously unnoticed bug. Since version 0.9.0, we've systematically ensured that new releases can interpret messages from all prior versions. However, an oversight occurred with a class serialized within a message, leading to potential workflow stalling during Infinitic upgrades. Although <a href="https://docs.infinitic.io/docs/clients/retry-failed-workflow-task">a simple retry</a> could resolve this issue, it was still a bug. I'm pleased to report that this issue has been addressed and rigorously tested in the current release, ensuring smoother upgrades and system stability.</p><h2>&#128300; <strong>Improvements</strong></h2><p>This release brings several key under-the-hood enhancements:</p><ul><li><p>Pulsar resources are dynamically created as needed. In particular, your client does not create its own topic anymore if it does not need it</p></li><li><p>Infinitic now validates worker configurations, checking that provided implementations actually implement the named tasks or workflows. This feature prevents the launch of misconfigured workers and saves you from potential confusion.</p></li><li><p>Workers have been improved to notify the workflow engines about messages automatically sent to dead letter queues by Pulsar. Moreover, an automatic subscription to these queues has been added to ensure no message loss.</p></li><li><p>A significant refactoring of Pulsar and inMemory implementations lays the groundwork for future compatibility with other data stream technologies like RabbitMQ and Kafka, broadening Infinitic's applicability.</p></li></ul><p>Stay tuned for more updates as I continue to evolve Infinitic to meet your distributed workflow needs!<br><br>Gilles Barbier</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Infinitic&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[State of Infinitic - v0.11.2]]></title><description><![CDATA[What's new for the Infinitic framework and what's next]]></description><link>https://infinitic.substack.com/p/state-of-infinitic-v0112</link><guid isPermaLink="false">https://infinitic.substack.com/p/state-of-infinitic-v0112</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Sun, 30 Oct 2022 14:44:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wTTo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>What&#8217;s new since 0.9.4</h2><p>It has been a while since I released an Infinitic newsletter. 6 months actually - you can not say I&#8217;m cluttering your mailbox! I should have been given news more often, but I&#8217;ve been pretty busy. Infinitic reached version 0.11.2 - here is what happened since 0.9.4:</p><h3>Workflows state can be stored in MySQL</h3><p>This is the first significant contribution coming from external contributors :) Until now, Redis was the only store proposed to store states of workflows; now you can use MySQL. To do so, just provide <a href="https://docs.infinitic.io/workflows/workers#storage">this configuration</a> to your workers:</p><pre><code><code>storage:
  mysql:
    host: 127.0.0.1
    port: 3306
    user: root
    password: 
    database: infinitic</code></code></pre><h3>Backward compatibility ensured</h3><p>Infinitic now has tests to ensure that all versions have backward-compatible schemas since 0.9.0. This ensures that messages already in Pulsar - and binary states stored in databases - can be handled when you upgrade your Infinitic version.<br><br>As it&#8217;s a backward compatibility only, you can still have issues if you mix workers/clients of different versions or if you try to roll back Infinitic after an upgrade. I&#8217;m thinking of introducing a full-compatibility policy before the first stable release. </p><h3>Timers can be manually completed</h3><p>When using timers, please check that topics containing delayed messages have a <a href="https://pulsar.apache.org/docs/cookbooks-retention-expiry/#time-to-live-ttl">TTL</a>  covering the duration of your timers. Per default, Infinitic now sets a one-year TTL in those topics (whose name contains &#8220;delay&#8221;). Make sure that your Pulsar cluster allows <a href="https://streamnative.io/en/blog/release/2020-12-25-pulsar-270/">topic-level settings</a>. </p><p>Be careful; if your timer&#8217;s duration is longer than the TTL, the timers won&#8217;t be fired. For those situations, Infinitic now proposes a `<a href="https://docs.infinitic.io/clients/complete-timers">completeTimers</a>` command to complete the running timers manually when needed.</p><h3>Improved workers configuration</h3><ul><li><p><a href="https://docs.infinitic.io/services/syntax#task-timeout">Timeout</a> and <a href="https://docs.infinitic.io/services/syntax#task-retries">retry</a> policies are now easier to configure at the worker level. Those policies can now be independent of services/tasks implementation.</p></li><li><p>Services can also be <a href="https://docs.infinitic.io/services/workers#service-registration">manually registered</a> to workers. This allows dependency injections if needed.</p></li><li><p>Default settings for Pulsar&#8217;s <a href="https://docs.infinitic.io/references/pulsar/#default-consumer-settings">consumers</a> and <a href="https://docs.infinitic.io/references/pulsar/#default-producer-settings">producers</a> can now be provided.</p></li></ul><h3>Workflow versioning</h3><p>Infinitic now lets you version your workflows. Workflow versioning is a tricky subject, and I waited a bit on this one to make sure to provide the simplest API.</p><p>The easiest way to update a workflow today is to have the new instances use the latest version while the current instances continue to run the version they were started with. This is now possible with a <a href="https://docs.infinitic.io/workflows/versioning/#new-workflows">simple configuration</a> of workers.</p><h2>What&#8217;s next for Infinitic?</h2><p>I&#8217;d like to mention here a few things that I believe are worth discussing before reaching a stable 1.0 version.</p><h3>Use of protobuf - RPC framework</h3><p>At its core, Infinitic is also an RPC framework, allowing distributed executions of remote services. By pure ignorance, I did not consider the ongoing works in this area (e.g. gRPC), when developing the foundations of Infinitic. I believe today that Infinitic should evolve as a  generic Pulsar-based RPC framework. One way to follow this direction is to start using <a href="https://developers.google.com/protocol-buffers">Protobuf</a> for declaring services and their input/output and to code an Infinitic protobuf plugin to generate stubs. <br><br>I&#8217;m also looking at other emerging initiatives such as <a href="https://cloudevents.io/">CloudEvents</a> and <a href="https://www.asyncapi.com/">AsyncApi</a> - but the benefits for Infinitic seem less obvious - but I&#8217;m curious to hear your thoughts about them.</p><h3>State storage</h3><p>Since its beginnings, I wanted Infinitic to be usable with only a Pulsar cluster running - without having to add any other pieces of infrastructure. This vision is not fulfilled yet, as we still must have databases to store states. This should be temporary as those states were supposed - eventually - to be managed by Pulsar stateful functions. But it&#8217;s not that clear anymore:</p><ul><li><p>stateful functions seem to have a hard time reaching a &#8220;production-ready&#8221; label</p></li><li><p>stateful functions would not be suitable for multi-region Pulsar deployment</p></li></ul><p>I wonder if Infinitic should follow an event-sourcing pattern instead of relying on storage. These are preliminary thoughts, and I&#8217;m curious to hear if you have opinions on how (and if) to do this.</p><h3>Dashboarding</h3><p>Infinitic already has a dashboard focused on monitoring its workers and topics. It would be great to extend it to be able to display the state of workflows. Initially, I was hoping not to have to add dedicated databases for requesting events. I believe I should now build connectors and interfaces to work with databases such as elastic or Postgres.</p><p>By the way, the excellent library <a href="https://docs.kweb.io/book/">Kweb</a>  I use to build dynamic UIs without javascript just reached the 1.0 version. I encourage you to test it. </p><h3>Observability</h3><p>This one is probably a quick win - integrating <a href="https://opentelemetry.io/">OpenTelemetry</a> and/or <a href="https://micrometer.io/">Micrometer</a> into Infinitic. Contributions are welcome ;)</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wTTo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wTTo!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif 424w, https://substackcdn.com/image/fetch/$s_!wTTo!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif 848w, https://substackcdn.com/image/fetch/$s_!wTTo!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif 1272w, https://substackcdn.com/image/fetch/$s_!wTTo!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wTTo!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif" width="360" height="640" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Happy Halloween&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Happy Halloween" title="Happy Halloween" srcset="https://substackcdn.com/image/fetch/$s_!wTTo!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif 424w, https://substackcdn.com/image/fetch/$s_!wTTo!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif 848w, https://substackcdn.com/image/fetch/$s_!wTTo!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif 1272w, https://substackcdn.com/image/fetch/$s_!wTTo!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33cbab63-ef1b-4b41-899d-72996dfe627c_360x640.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://infinitic.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Infinitic&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[v0.9.4 and personal news]]></title><description><![CDATA[Is Infinitic alive?]]></description><link>https://infinitic.substack.com/p/v094-and-personal-news</link><guid isPermaLink="false">https://infinitic.substack.com/p/v094-and-personal-news</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Mon, 18 Apr 2022 01:12:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!WQ_V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Is Infinitic alive?</strong></h2><p>You may have noticed or not, but I have been silent since October last year. So you may wonder if <a href="https://docs.infinitic.io/">Infinitic</a> is still alive. The response is Yes! Actually, <a href="https://splio.com/">Splio</a>, the French marketing company I worked with last year, is now using it in production to power its new automation marketing engine. And today, I released version <a href="https://github.com/infiniticio/infinitic/releases/tag/v0.9.4">0.9.4</a>.</p><p>The reason behind my silence is that I have joined a US startup - <a href="https://streamnative.io/">StreamNative</a> - as General Manager for the EMEA region! If you do not know StreamNative yet, its activity is to manage Pulsar clusters for its customers. The company was founded by the original creators of <a href="https://pulsar.apache.org/">Apache Pulsar</a> and has more experience deploying and running large-scale instances than any team in the world. My role there is to accelerate StreamNative&#8217;s growth in the EMEA region by building a local team to serve our customers and increase Pulsar awareness.</p><h2><strong>What does it mean for Infinitic?</strong></h2><p>StreamNative did not buy Infinitic and does not support it officially currently. So obviously, even if I enjoy working on it in my spare time, the development of Infinitic has naturally slowed down due to my new role. But even if I can&#8217;t be sure of the medium-term consequences, I still think that being so close to the Pulsar ecosystem should ultimately benefit Infinitic.</p><h2><strong>So, what&#8217;s new in this 0.9.4 version?</strong></h2><h4>Channels are more versatile!</h4><p>Before 0.9.4, it was impossible to buffer signals in a channel to handle them later. The closest you could do to buffer three signals was:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WQ_V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WQ_V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png 424w, https://substackcdn.com/image/fetch/$s_!WQ_V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png 848w, https://substackcdn.com/image/fetch/$s_!WQ_V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png 1272w, https://substackcdn.com/image/fetch/$s_!WQ_V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WQ_V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png" width="1330" height="1006" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/efd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1006,&quot;width&quot;:1330,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:207466,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WQ_V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png 424w, https://substackcdn.com/image/fetch/$s_!WQ_V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png 848w, https://substackcdn.com/image/fetch/$s_!WQ_V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png 1272w, https://substackcdn.com/image/fetch/$s_!WQ_V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefd50a83-0d1f-4e9b-b9de-1fe8c54f992c_1330x1006.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Since 0.9.4, Infinitic is now able to buffer signals to handle them by a workflow:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8bEG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c678a-de80-4a44-9a9f-0b21f97f1524_1330x708.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8bEG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c678a-de80-4a44-9a9f-0b21f97f1524_1330x708.png 424w, https://substackcdn.com/image/fetch/$s_!8bEG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c678a-de80-4a44-9a9f-0b21f97f1524_1330x708.png 848w, https://substackcdn.com/image/fetch/$s_!8bEG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c678a-de80-4a44-9a9f-0b21f97f1524_1330x708.png 1272w, https://substackcdn.com/image/fetch/$s_!8bEG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c678a-de80-4a44-9a9f-0b21f97f1524_1330x708.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8bEG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c678a-de80-4a44-9a9f-0b21f97f1524_1330x708.png" width="1330" height="708" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/f75c678a-de80-4a44-9a9f-0b21f97f1524_1330x708.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1330,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151390,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8bEG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c678a-de80-4a44-9a9f-0b21f97f1524_1330x708.png 424w, https://substackcdn.com/image/fetch/$s_!8bEG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c678a-de80-4a44-9a9f-0b21f97f1524_1330x708.png 848w, https://substackcdn.com/image/fetch/$s_!8bEG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c678a-de80-4a44-9a9f-0b21f97f1524_1330x708.png 1272w, https://substackcdn.com/image/fetch/$s_!8bEG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75c678a-de80-4a44-9a9f-0b21f97f1524_1330x708.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s even more helpful if you do not know the number of signals you will receive:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iVHs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2864820-9bbe-4139-a5db-09d1b76245ce_1312x820.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iVHs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2864820-9bbe-4139-a5db-09d1b76245ce_1312x820.png 424w, https://substackcdn.com/image/fetch/$s_!iVHs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2864820-9bbe-4139-a5db-09d1b76245ce_1312x820.png 848w, https://substackcdn.com/image/fetch/$s_!iVHs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2864820-9bbe-4139-a5db-09d1b76245ce_1312x820.png 1272w, https://substackcdn.com/image/fetch/$s_!iVHs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2864820-9bbe-4139-a5db-09d1b76245ce_1312x820.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iVHs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2864820-9bbe-4139-a5db-09d1b76245ce_1312x820.png" width="1312" height="820" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/f2864820-9bbe-4139-a5db-09d1b76245ce_1312x820.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1312,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157021,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iVHs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2864820-9bbe-4139-a5db-09d1b76245ce_1312x820.png 424w, https://substackcdn.com/image/fetch/$s_!iVHs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2864820-9bbe-4139-a5db-09d1b76245ce_1312x820.png 848w, https://substackcdn.com/image/fetch/$s_!iVHs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2864820-9bbe-4139-a5db-09d1b76245ce_1312x820.png 1272w, https://substackcdn.com/image/fetch/$s_!iVHs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2864820-9bbe-4139-a5db-09d1b76245ce_1312x820.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Using this pattern ensures that your previous signal is entirely handled before handling the next one. We can imagine multiple use cases:</p><ul><li><p>Send events relative to a user to a loyalty workflow</p></li><li><p>Send events relative to a basket to a workflow managing baskets for an e-commerce website</p></li></ul><p>Let me know your use case.</p><h4>Unique tag</h4><p>Let&#8217;s say you create a workflow describing a loyalty program. Despite having multiple triggers to start this workflow,  you want to ensure that a user can not have more than one workflow running at a given time. Before 0.9.4, the only solution was to tag the workflow with <code>&#8220;userId:b4824916&#8221;</code> then request the existing ids associated with this tag to check if we have already a running workflow before starting a new one:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o0Rf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F06347db4-5f7f-4a30-88f2-b5717a6f9498_1548x744.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o0Rf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F06347db4-5f7f-4a30-88f2-b5717a6f9498_1548x744.png 424w, https://substackcdn.com/image/fetch/$s_!o0Rf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F06347db4-5f7f-4a30-88f2-b5717a6f9498_1548x744.png 848w, https://substackcdn.com/image/fetch/$s_!o0Rf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F06347db4-5f7f-4a30-88f2-b5717a6f9498_1548x744.png 1272w, https://substackcdn.com/image/fetch/$s_!o0Rf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F06347db4-5f7f-4a30-88f2-b5717a6f9498_1548x744.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o0Rf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F06347db4-5f7f-4a30-88f2-b5717a6f9498_1548x744.png" width="1456" height="700" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/06347db4-5f7f-4a30-88f2-b5717a6f9498_1548x744.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:700,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:170480,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!o0Rf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F06347db4-5f7f-4a30-88f2-b5717a6f9498_1548x744.png 424w, https://substackcdn.com/image/fetch/$s_!o0Rf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F06347db4-5f7f-4a30-88f2-b5717a6f9498_1548x744.png 848w, https://substackcdn.com/image/fetch/$s_!o0Rf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F06347db4-5f7f-4a30-88f2-b5717a6f9498_1548x744.png 1272w, https://substackcdn.com/image/fetch/$s_!o0Rf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F06347db4-5f7f-4a30-88f2-b5717a6f9498_1548x744.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This method is cumbersome and sensitive to race conditions. Since 0.9.4, you can do:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y0ri!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a900807-6ad3-4084-8ef0-c3d102ea890b_1212x484.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y0ri!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a900807-6ad3-4084-8ef0-c3d102ea890b_1212x484.png 424w, https://substackcdn.com/image/fetch/$s_!y0ri!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a900807-6ad3-4084-8ef0-c3d102ea890b_1212x484.png 848w, https://substackcdn.com/image/fetch/$s_!y0ri!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a900807-6ad3-4084-8ef0-c3d102ea890b_1212x484.png 1272w, https://substackcdn.com/image/fetch/$s_!y0ri!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a900807-6ad3-4084-8ef0-c3d102ea890b_1212x484.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y0ri!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a900807-6ad3-4084-8ef0-c3d102ea890b_1212x484.png" width="1212" height="484" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/6a900807-6ad3-4084-8ef0-c3d102ea890b_1212x484.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:484,&quot;width&quot;:1212,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:116664,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y0ri!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a900807-6ad3-4084-8ef0-c3d102ea890b_1212x484.png 424w, https://substackcdn.com/image/fetch/$s_!y0ri!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a900807-6ad3-4084-8ef0-c3d102ea890b_1212x484.png 848w, https://substackcdn.com/image/fetch/$s_!y0ri!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a900807-6ad3-4084-8ef0-c3d102ea890b_1212x484.png 1272w, https://substackcdn.com/image/fetch/$s_!y0ri!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a900807-6ad3-4084-8ef0-c3d102ea890b_1212x484.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By prefixing a tag with <code>&#8220;customId:&#8221;</code> we tell Infinitic that this tag is a custom id for this workflow. When dispatching it, Infinitic will check if a workflow (of the same type) with the same tag already exists before starting a new one.</p><p>I hope you will find those new features useful. Let me know what you think by responding to this email &#10084;&#65039;</p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[v0.8]]></title><description><![CDATA[Easy interactions with running workflows]]></description><link>https://infinitic.substack.com/p/v08</link><guid isPermaLink="false">https://infinitic.substack.com/p/v08</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Sun, 24 Oct 2021 21:55:04 GMT</pubDate><enclosure url="https://cdn.substack.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi,</p><p>I'm excited to announce this 0.8.0 release because it's an important step towards the completion of the vision behind Infinitic. With this release, we are now able to run multiple methods in parallel for the same workflow instance, as described in the new <a href="https://docs.infinitic.io/workflows/parallel#parallel-methods">parallelization</a> and <a href="https://docs.infinitic.io/workflows/properties">properties</a> pages of the documentation:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jt5x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F80efd3e5-ad06-4614-b53e-dc515c387043_2596x1732.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jt5x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F80efd3e5-ad06-4614-b53e-dc515c387043_2596x1732.png 424w, https://substackcdn.com/image/fetch/$s_!jt5x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F80efd3e5-ad06-4614-b53e-dc515c387043_2596x1732.png 848w, https://substackcdn.com/image/fetch/$s_!jt5x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F80efd3e5-ad06-4614-b53e-dc515c387043_2596x1732.png 1272w, https://substackcdn.com/image/fetch/$s_!jt5x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F80efd3e5-ad06-4614-b53e-dc515c387043_2596x1732.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jt5x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F80efd3e5-ad06-4614-b53e-dc515c387043_2596x1732.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/80efd3e5-ad06-4614-b53e-dc515c387043_2596x1732.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jt5x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F80efd3e5-ad06-4614-b53e-dc515c387043_2596x1732.png 424w, https://substackcdn.com/image/fetch/$s_!jt5x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F80efd3e5-ad06-4614-b53e-dc515c387043_2596x1732.png 848w, https://substackcdn.com/image/fetch/$s_!jt5x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F80efd3e5-ad06-4614-b53e-dc515c387043_2596x1732.png 1272w, https://substackcdn.com/image/fetch/$s_!jt5x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F80efd3e5-ad06-4614-b53e-dc515c387043_2596x1732.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Why it's a big deal?</p><h2>Easy interactions with running workflows</h2><p>First, it provides an easy way to interact with a running workflow. For example, the code below is all you need to build a simple loyalty system that is scalable, stateful, long-running, and failure-tolerant:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jsxl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jsxl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png 424w, https://substackcdn.com/image/fetch/$s_!jsxl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png 848w, https://substackcdn.com/image/fetch/$s_!jsxl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png 1272w, https://substackcdn.com/image/fetch/$s_!jsxl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jsxl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png" width="1346" height="1704" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/d25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1704,&quot;width&quot;:1346,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:293174,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jsxl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png 424w, https://substackcdn.com/image/fetch/$s_!jsxl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png 848w, https://substackcdn.com/image/fetch/$s_!jsxl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png 1272w, https://substackcdn.com/image/fetch/$s_!jsxl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd25d4269-a7cf-49bd-b7ea-14778c5648ca_1346x1704.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Note how easily the `start` method describes a loyalty program where the user earns one point per week. </p><p>Now the `addBonus` method lets us easily add bonus points based on specific events:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mgWk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1acedc-58fb-465a-bc4c-fc216265a25e_1548x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mgWk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1acedc-58fb-465a-bc4c-fc216265a25e_1548x480.png 424w, https://substackcdn.com/image/fetch/$s_!mgWk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1acedc-58fb-465a-bc4c-fc216265a25e_1548x480.png 848w, https://substackcdn.com/image/fetch/$s_!mgWk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1acedc-58fb-465a-bc4c-fc216265a25e_1548x480.png 1272w, https://substackcdn.com/image/fetch/$s_!mgWk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1acedc-58fb-465a-bc4c-fc216265a25e_1548x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mgWk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1acedc-58fb-465a-bc4c-fc216265a25e_1548x480.png" width="1456" height="451" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/6d1acedc-58fb-465a-bc4c-fc216265a25e_1548x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:451,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115179,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mgWk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1acedc-58fb-465a-bc4c-fc216265a25e_1548x480.png 424w, https://substackcdn.com/image/fetch/$s_!mgWk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1acedc-58fb-465a-bc4c-fc216265a25e_1548x480.png 848w, https://substackcdn.com/image/fetch/$s_!mgWk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1acedc-58fb-465a-bc4c-fc216265a25e_1548x480.png 1272w, https://substackcdn.com/image/fetch/$s_!mgWk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6d1acedc-58fb-465a-bc4c-fc216265a25e_1548x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Easy access to properties of running workflows</h2><p>Second, this new feature provides an easy way to know the internal properties of a workflow just by synchronously running a getter from an Infinitic client:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JmDp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ea7c930-1d42-4947-8dff-c3e4dd18aabe_1312x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JmDp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ea7c930-1d42-4947-8dff-c3e4dd18aabe_1312x480.png 424w, https://substackcdn.com/image/fetch/$s_!JmDp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ea7c930-1d42-4947-8dff-c3e4dd18aabe_1312x480.png 848w, https://substackcdn.com/image/fetch/$s_!JmDp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ea7c930-1d42-4947-8dff-c3e4dd18aabe_1312x480.png 1272w, https://substackcdn.com/image/fetch/$s_!JmDp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ea7c930-1d42-4947-8dff-c3e4dd18aabe_1312x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JmDp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ea7c930-1d42-4947-8dff-c3e4dd18aabe_1312x480.png" width="1312" height="480" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/2ea7c930-1d42-4947-8dff-c3e4dd18aabe_1312x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:1312,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:101291,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JmDp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ea7c930-1d42-4947-8dff-c3e4dd18aabe_1312x480.png 424w, https://substackcdn.com/image/fetch/$s_!JmDp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ea7c930-1d42-4947-8dff-c3e4dd18aabe_1312x480.png 848w, https://substackcdn.com/image/fetch/$s_!JmDp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ea7c930-1d42-4947-8dff-c3e4dd18aabe_1312x480.png 1272w, https://substackcdn.com/image/fetch/$s_!JmDp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ea7c930-1d42-4947-8dff-c3e4dd18aabe_1312x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By removing all the complexity and letting developers focus on the business logic, Infinitic introduces a new paradigm for building failure-proof scalable systems.  This example only scratches the surface of what is possible.</p><p>Let me know what you think, by responding to this email  &#10084;&#65039;</p>]]></content:encoded></item><item><title><![CDATA[Free VIP ticket for the Pulsar Virtual Summit Europe 2021]]></title><description><![CDATA[Hi, Co-hosted by StreamNative and Clever Cloud, the Pulsar Virtual Summit Europe 2021 kicks off next Wednesday and will feature speakers from the Apache Pulsar PMC, Databricks, Elastic, Flipkart, Zilliz, Tencent, Softtech, and more.]]></description><link>https://infinitic.substack.com/p/free-vip-ticket-for-the-pulsar-virtual</link><guid isPermaLink="false">https://infinitic.substack.com/p/free-vip-ticket-for-the-pulsar-virtual</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Thu, 30 Sep 2021 14:29:21 GMT</pubDate><content:encoded><![CDATA[<p>Hi,</p><p>Co-hosted by StreamNative and Clever Cloud, the Pulsar Virtual Summit Europe 2021 kicks off next Wednesday and will feature speakers from the Apache Pulsar PMC, Databricks, Elastic, Flipkart, Zilliz, Tencent, Softtech, and more.&nbsp;</p><p>Thanks to the fine people of StreamNative, <strong><a href="https://hopin.com/events/pulsar-summit-europe-2021?code=XTLFiyIwT3fUyHeieFHwazvRN">I&#8217;m pleased to offer you 20 complimentary VIP tickets</a>.</strong></p><p>You will also be automatically entered for a chance to win an Nvidia Jetson Nano 4GB Developer Kit!</p><p>I hope to see you there,</p><p>Gilles<br><br> </p>]]></content:encoded></item><item><title><![CDATA[v0.7.4 - Running Infinitic on a managed Pulsar]]></title><description><![CDATA[Last news regarding Infinitic, the easiest way to reliably orchestrate your distributed services at scale]]></description><link>https://infinitic.substack.com/p/running-infinitic-on-a-managed-pulsar</link><guid isPermaLink="false">https://infinitic.substack.com/p/running-infinitic-on-a-managed-pulsar</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Sat, 11 Sep 2021 14:25:48 GMT</pubDate><content:encoded><![CDATA[<p>Hi!&nbsp;</p><p>I&#8217;m pleased to announce that release 0.7.4 of Infinitic is now live! In a nutshell:</p><ul><li><p>It's now easy to run Infinitic on various Pulsar on the cloud offerings</p></li><li><p>The Infinitic client was improved with a way to send messages synchronously</p></li><li><p>An in-memory implementation is now proposed for easing the development</p></li></ul><h1>Running Infinitic on a managed Pulsar</h1><p>This release should bring joy to users of Pulsar in the cloud as it's now easy to use Infinitic with a managed Pulsar. To do so:</p><ul><li><p>I have extended the Pulsar configuration in Infinitic with an `authentication` section that allows you to connect with a secure Pulsar cluster online easily.</p></li><li><p>Workers now create missing tenant/namespace/topics at startup. I had to do this because some service providers disable topics auto-creation. This brings two additional good news:</p><ul><li><p>You no longer need to set up a namespace before running any workflow. The worker will check its existence and try to create it at the start time. This eases the deployment to production.</p></li><li><p>When you close a client, Infinitic can now more efficiently delete the topic created for each client to receive synchronous responses. Previously, with topic auto-creation enabled, this topic was often automatically recreated when an engine tried to send a result to an already disconnected client.</p></li></ul></li></ul><p>I did my best to propose a versatile code that works in various environments having different security settings. It has been successfully tested on <a href="https://www.clever-cloud.com/en/">CleverCloud</a>, <a href="https://www.datastax.com/products/astra-streaming">Datastax</a>, and <a href="https://streamnative.io/">Streamnative</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rq4N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a4c9f-a90f-422f-ac2d-cf011f5a5d0b_1612x180.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rq4N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a4c9f-a90f-422f-ac2d-cf011f5a5d0b_1612x180.png 424w, https://substackcdn.com/image/fetch/$s_!rq4N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a4c9f-a90f-422f-ac2d-cf011f5a5d0b_1612x180.png 848w, https://substackcdn.com/image/fetch/$s_!rq4N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a4c9f-a90f-422f-ac2d-cf011f5a5d0b_1612x180.png 1272w, https://substackcdn.com/image/fetch/$s_!rq4N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a4c9f-a90f-422f-ac2d-cf011f5a5d0b_1612x180.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rq4N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a4c9f-a90f-422f-ac2d-cf011f5a5d0b_1612x180.png" width="1456" height="163" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/af9a4c9f-a90f-422f-ac2d-cf011f5a5d0b_1612x180.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:163,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:53654,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rq4N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a4c9f-a90f-422f-ac2d-cf011f5a5d0b_1612x180.png 424w, https://substackcdn.com/image/fetch/$s_!rq4N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a4c9f-a90f-422f-ac2d-cf011f5a5d0b_1612x180.png 848w, https://substackcdn.com/image/fetch/$s_!rq4N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a4c9f-a90f-422f-ac2d-cf011f5a5d0b_1612x180.png 1272w, https://substackcdn.com/image/fetch/$s_!rq4N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a4c9f-a90f-422f-ac2d-cf011f5a5d0b_1612x180.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h1>Sending messages synchronously to Pulsar</h1><p>Per default, the Infinitic client dispatches a task or a workflow *asynchronously* to avoid blocking the current thread while sending a message to Pulsar:</p><pre><code>Deferred&lt;String&gt; d = client.async(wf) { method(...) }</code></pre><p>One drawback of this is that we can lose some messages when the client closes. Also, in some situations, you want to be sure that the client has actually sent your message to Pulsar.&nbsp;</p><p>This release brings a new `join()` method that you can apply on a Deferred to wait up to the reception by Pulsar of the event:</p><pre><code>Deferred&lt;String&gt; d = client.async(wf) { method(...) }.join()</code></pre><p>Also, you can apply this method to the Infinitic client itself to wait until Pulsar receives all messages sent to it by this client.</p><pre><code>client.join()</code></pre><p>Infinitic does this automatically when the client is closed to ensure that no messages are lost due to client closure.</p><h1>In-memory implementation for an easier development experience</h1><p>Running a local dockerized Pulsar during development is cumbersome. It can easily use 4-5GB of Ram of your machine. When developing, it's now possible to process your workflows without Pulsar by using an in-memory implementation and without changing anything in your code!</p><p>To do so, import the new infinitic-factory module and use this method for creating an  Infinitic client:</p><pre><code>InfiniticClient client = InfiniticClientFactory.fromConfigFile("infinitic.yml")</code></pre><p>By default, an implementation of `PulsarInfiniticClient` will be provided, but if you add `transport: inMemory` in your infinitic.yml file, then an InMemoryInfiniticClient instance is returned. This client also instantiates an InMemoryWorker internally and configured it according to your infinitic.yml configuration file.&nbsp;</p><p>From there, when the client dispatch tasks or workflows, it will also process them directly in memory.&nbsp;</p><p>This feature is possible because Infinitic was developed from the beginning using an abstracted transport layer.</p><p>As usual, please answer directly to this email for any feedback; it means a lot to me &#10084;&#65039;.</p>]]></content:encoded></item><item><title><![CDATA[Infinitic Dashboard]]></title><description><![CDATA[Last news regarding Infinitic, the event-based RPC framework to build reliable, observable, and easy to orchestrate distributed services]]></description><link>https://infinitic.substack.com/p/infinitic-dashboard</link><guid isPermaLink="false">https://infinitic.substack.com/p/infinitic-dashboard</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Wed, 21 Jul 2021 17:31:49 GMT</pubDate><enclosure url="https://cdn.substack.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi!&nbsp;</p><p>I&#8217;m pleased to announce that release 0.7.1 of Infinitic, which includes the first version of the Infinitic Dashboard, is now live!</p><p>This first release focuses on providing you an easy way to monitor your infrastructure, showing statistics for Pulsar topics used specifically to manage each task/service or workflow.</p><h2>List of workflows and tasks</h2><p>Once set up with a Pulsar URL, tenant, and namespace,  the dashboard presents all tasks and workflows that have&nbsp;been processed through your cluster:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PcAE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F305d095e-0eb5-46cf-a372-1bad210047ea_2982x1860.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PcAE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F305d095e-0eb5-46cf-a372-1bad210047ea_2982x1860.png 424w, https://substackcdn.com/image/fetch/$s_!PcAE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F305d095e-0eb5-46cf-a372-1bad210047ea_2982x1860.png 848w, https://substackcdn.com/image/fetch/$s_!PcAE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F305d095e-0eb5-46cf-a372-1bad210047ea_2982x1860.png 1272w, https://substackcdn.com/image/fetch/$s_!PcAE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F305d095e-0eb5-46cf-a372-1bad210047ea_2982x1860.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PcAE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F305d095e-0eb5-46cf-a372-1bad210047ea_2982x1860.png" width="1456" height="908" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/305d095e-0eb5-46cf-a372-1bad210047ea_2982x1860.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:908,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:403438,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PcAE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F305d095e-0eb5-46cf-a372-1bad210047ea_2982x1860.png 424w, https://substackcdn.com/image/fetch/$s_!PcAE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F305d095e-0eb5-46cf-a372-1bad210047ea_2982x1860.png 848w, https://substackcdn.com/image/fetch/$s_!PcAE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F305d095e-0eb5-46cf-a372-1bad210047ea_2982x1860.png 1272w, https://substackcdn.com/image/fetch/$s_!PcAE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F305d095e-0eb5-46cf-a372-1bad210047ea_2982x1860.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can see at a glance the # of deployed executors and their total backlog and throughput for each of them.</p><p>Note: for a near-real-time execution, you should have enough executors to prevent the backlog from growing.</p><h2>Detail of topics used to run the workflows</h2><p>For each workflow name, a set of topics are automatically deployed on Pulsar:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bX_W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53607494-249f-4952-aa82-e0657890ea47_1154x446.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bX_W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53607494-249f-4952-aa82-e0657890ea47_1154x446.png 424w, https://substackcdn.com/image/fetch/$s_!bX_W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53607494-249f-4952-aa82-e0657890ea47_1154x446.png 848w, https://substackcdn.com/image/fetch/$s_!bX_W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53607494-249f-4952-aa82-e0657890ea47_1154x446.png 1272w, https://substackcdn.com/image/fetch/$s_!bX_W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53607494-249f-4952-aa82-e0657890ea47_1154x446.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bX_W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53607494-249f-4952-aa82-e0657890ea47_1154x446.png" width="1154" height="446" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/53607494-249f-4952-aa82-e0657890ea47_1154x446.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:446,&quot;width&quot;:1154,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bX_W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53607494-249f-4952-aa82-e0657890ea47_1154x446.png 424w, https://substackcdn.com/image/fetch/$s_!bX_W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53607494-249f-4952-aa82-e0657890ea47_1154x446.png 848w, https://substackcdn.com/image/fetch/$s_!bX_W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53607494-249f-4952-aa82-e0657890ea47_1154x446.png 1272w, https://substackcdn.com/image/fetch/$s_!bX_W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53607494-249f-4952-aa82-e0657890ea47_1154x446.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By clicking on a workflow name on the dashboard, you can see the real-time statistics of all of them:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-jFz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1826c4cd-00cf-4bd5-8d96-2e30fd481a16_1600x857.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-jFz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1826c4cd-00cf-4bd5-8d96-2e30fd481a16_1600x857.png 424w, https://substackcdn.com/image/fetch/$s_!-jFz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1826c4cd-00cf-4bd5-8d96-2e30fd481a16_1600x857.png 848w, https://substackcdn.com/image/fetch/$s_!-jFz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1826c4cd-00cf-4bd5-8d96-2e30fd481a16_1600x857.png 1272w, https://substackcdn.com/image/fetch/$s_!-jFz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1826c4cd-00cf-4bd5-8d96-2e30fd481a16_1600x857.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-jFz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1826c4cd-00cf-4bd5-8d96-2e30fd481a16_1600x857.png" width="1456" height="780" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/1826c4cd-00cf-4bd5-8d96-2e30fd481a16_1600x857.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:780,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-jFz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1826c4cd-00cf-4bd5-8d96-2e30fd481a16_1600x857.png 424w, https://substackcdn.com/image/fetch/$s_!-jFz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1826c4cd-00cf-4bd5-8d96-2e30fd481a16_1600x857.png 848w, https://substackcdn.com/image/fetch/$s_!-jFz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1826c4cd-00cf-4bd5-8d96-2e30fd481a16_1600x857.png 1272w, https://substackcdn.com/image/fetch/$s_!-jFz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1826c4cd-00cf-4bd5-8d96-2e30fd481a16_1600x857.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Detail of topics used to process the tasks</h2><p>For each task name, a set of topics are automatically deployed on Pulsar:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3mUE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace2694-c953-48e3-8d0a-d63978494632_1190x476.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3mUE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace2694-c953-48e3-8d0a-d63978494632_1190x476.png 424w, https://substackcdn.com/image/fetch/$s_!3mUE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace2694-c953-48e3-8d0a-d63978494632_1190x476.png 848w, https://substackcdn.com/image/fetch/$s_!3mUE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace2694-c953-48e3-8d0a-d63978494632_1190x476.png 1272w, https://substackcdn.com/image/fetch/$s_!3mUE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace2694-c953-48e3-8d0a-d63978494632_1190x476.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3mUE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace2694-c953-48e3-8d0a-d63978494632_1190x476.png" width="1190" height="476" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5ace2694-c953-48e3-8d0a-d63978494632_1190x476.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:476,&quot;width&quot;:1190,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3mUE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace2694-c953-48e3-8d0a-d63978494632_1190x476.png 424w, https://substackcdn.com/image/fetch/$s_!3mUE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace2694-c953-48e3-8d0a-d63978494632_1190x476.png 848w, https://substackcdn.com/image/fetch/$s_!3mUE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace2694-c953-48e3-8d0a-d63978494632_1190x476.png 1272w, https://substackcdn.com/image/fetch/$s_!3mUE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace2694-c953-48e3-8d0a-d63978494632_1190x476.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By clicking on a task name on the dashboard, you can see the real-time statistics of all of them:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P8Hq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F94445d29-2f3a-4892-827b-e299decf71fb_1600x922.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P8Hq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F94445d29-2f3a-4892-827b-e299decf71fb_1600x922.png 424w, https://substackcdn.com/image/fetch/$s_!P8Hq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F94445d29-2f3a-4892-827b-e299decf71fb_1600x922.png 848w, https://substackcdn.com/image/fetch/$s_!P8Hq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F94445d29-2f3a-4892-827b-e299decf71fb_1600x922.png 1272w, https://substackcdn.com/image/fetch/$s_!P8Hq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F94445d29-2f3a-4892-827b-e299decf71fb_1600x922.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P8Hq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F94445d29-2f3a-4892-827b-e299decf71fb_1600x922.png" width="1456" height="839" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/94445d29-2f3a-4892-827b-e299decf71fb_1600x922.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:839,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!P8Hq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F94445d29-2f3a-4892-827b-e299decf71fb_1600x922.png 424w, https://substackcdn.com/image/fetch/$s_!P8Hq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F94445d29-2f3a-4892-827b-e299decf71fb_1600x922.png 848w, https://substackcdn.com/image/fetch/$s_!P8Hq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F94445d29-2f3a-4892-827b-e299decf71fb_1600x922.png 1272w, https://substackcdn.com/image/fetch/$s_!P8Hq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F94445d29-2f3a-4892-827b-e299decf71fb_1600x922.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Stats for a topic</h2><p>Note that for each topic, you can see the very detail of its&nbsp; metric by clicking on it:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SW7M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SW7M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png 424w, https://substackcdn.com/image/fetch/$s_!SW7M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png 848w, https://substackcdn.com/image/fetch/$s_!SW7M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png 1272w, https://substackcdn.com/image/fetch/$s_!SW7M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SW7M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png" width="1456" height="896" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:896,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SW7M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png 424w, https://substackcdn.com/image/fetch/$s_!SW7M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png 848w, https://substackcdn.com/image/fetch/$s_!SW7M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png 1272w, https://substackcdn.com/image/fetch/$s_!SW7M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F55472d20-1496-4bb7-ac63-851044ec061d_1600x985.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Next Steps</h2><p>The complete observability of the processings of tasks and workflows is an important part of the vision behind Infinitic. So for the next iteration of the dashboard, I will focus on showing the details of the processing of an instance of task/workflow.&nbsp;</p><h2>Notes</h2><p>It would not have been possible to write such polished UI without those 2 fantastic pieces of software:</p><ul><li><p><a href="https://tailwindui.com/">tailwindUI</a>: a collection of ready-to-use polished UI responsive components written with the tailwind CSS framework</p></li><li><p><a href="http://docs.kweb.io/en/latest/">KWeb</a>: a Kotlin framework that lets you write a reactive interface without writing a single line of javascript (for me, the future of web development!)</p></li></ul><p>I encourage you to have a look at them!</p><p>Please answer directly to this email for any feedback; it means a lot to me :)</p>]]></content:encoded></item><item><title><![CDATA[v0.6.0 Release: Simplified Deployment And Improved Error Management]]></title><description><![CDATA[Building Infinitic, an event-driven orchestration engine providing reliable and scalable workflows, even in distributed environments.]]></description><link>https://infinitic.substack.com/p/v060-release-simplified-deployment</link><guid isPermaLink="false">https://infinitic.substack.com/p/v060-release-simplified-deployment</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Tue, 11 May 2021 07:32:19 GMT</pubDate><enclosure url="https://cdn.substack.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi!&nbsp;</p><p>It has been a while since my last email, but a lot happened meanwhile:</p><ul><li><p>Infinitic v0.6.0 is out with simplified deployment and improved error management.</p></li><li><p>Infinitic has had its first formal load testing during the last Pulsar Hackathon.</p></li><li><p>Infinitic will be at the next <a href="https://www.na2021.pulsar-summit.org">Pulsar Summit North America</a>!</p></li></ul><p><strong>Simplified deployment</strong></p><p>You may remember that Infinitic is based on engines (workflow engines, task engines, tag engines&#8230;) you need to deploy along with some workers actually processing tasks and workflows. Well, since Infinitic v0.6, the deployment is greatly simplified with only task workers and workflow workers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!drDD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2532-b5a6-4162-a727-b16ca4942885_1561x820.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!drDD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2532-b5a6-4162-a727-b16ca4942885_1561x820.png 424w, https://substackcdn.com/image/fetch/$s_!drDD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2532-b5a6-4162-a727-b16ca4942885_1561x820.png 848w, https://substackcdn.com/image/fetch/$s_!drDD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2532-b5a6-4162-a727-b16ca4942885_1561x820.png 1272w, https://substackcdn.com/image/fetch/$s_!drDD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2532-b5a6-4162-a727-b16ca4942885_1561x820.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!drDD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2532-b5a6-4162-a727-b16ca4942885_1561x820.png" width="1456" height="765" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/c15f2532-b5a6-4162-a727-b16ca4942885_1561x820.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:765,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!drDD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2532-b5a6-4162-a727-b16ca4942885_1561x820.png 424w, https://substackcdn.com/image/fetch/$s_!drDD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2532-b5a6-4162-a727-b16ca4942885_1561x820.png 848w, https://substackcdn.com/image/fetch/$s_!drDD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2532-b5a6-4162-a727-b16ca4942885_1561x820.png 1272w, https://substackcdn.com/image/fetch/$s_!drDD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc15f2532-b5a6-4162-a727-b16ca4942885_1561x820.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Since v0.6, the task and workflow engines are embedded per default into task workers and workflow workers. And each task and workflow have their own engine instances. The first motivation to do that was to optimize the flow of messages into Pulsar: a large afflux of messages for a specific workflow should not delay another workflow.&nbsp;</p><p>Incidentally, it provided the opportunity to simplify the deployment by embedding everything a task/workflow needed into a task/workflow worker. The Pulsar topics architecture is still the same:&nbsp;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ahju!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F07f9c557-c2c6-412c-aafd-b271f879404c_1600x400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ahju!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F07f9c557-c2c6-412c-aafd-b271f879404c_1600x400.png 424w, https://substackcdn.com/image/fetch/$s_!ahju!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F07f9c557-c2c6-412c-aafd-b271f879404c_1600x400.png 848w, https://substackcdn.com/image/fetch/$s_!ahju!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F07f9c557-c2c6-412c-aafd-b271f879404c_1600x400.png 1272w, https://substackcdn.com/image/fetch/$s_!ahju!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F07f9c557-c2c6-412c-aafd-b271f879404c_1600x400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ahju!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F07f9c557-c2c6-412c-aafd-b271f879404c_1600x400.png" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/07f9c557-c2c6-412c-aafd-b271f879404c_1600x400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ahju!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F07f9c557-c2c6-412c-aafd-b271f879404c_1600x400.png 424w, https://substackcdn.com/image/fetch/$s_!ahju!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F07f9c557-c2c6-412c-aafd-b271f879404c_1600x400.png 848w, https://substackcdn.com/image/fetch/$s_!ahju!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F07f9c557-c2c6-412c-aafd-b271f879404c_1600x400.png 1272w, https://substackcdn.com/image/fetch/$s_!ahju!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F07f9c557-c2c6-412c-aafd-b271f879404c_1600x400.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>But now, a lot of this complexity is internal to workers.</p><p><strong>Error management&nbsp;</strong></p><p>Up to now, a task could not fail in a workflow. Of course, a task could fail, but Infinitic would automatically retry it to its completion and the workflow's resume. It implied that a workflow could be stuck forever if a task failed unrecoverably.&nbsp;</p><p>I recognize that there are situations where workflow needs to continue even if a task could not complete. So, from v0.6, you can catch the task failure directly within the workflow code to react to this situation. It is quite a sophisticated piece of code; also, I recommend you look at the <a href="https://docs.infinitic.io/workflows/errors">documentation</a>.</p><p>A pleasant consequence of this new feature is that a workflow now raises an exception when stalled due to a task failure. And this exception recursively contains the reason for the chain of failures. It means you can easily find the root cause of the issue (that could be a failed task in a child workflow, for example). Debugging an event-driven architecture is notoriously tricky, and this new feature will tell you where exactly the root failure occurred in your distributed infrastructure.</p><p><strong>Load testing Infinitic during the last Pulsar Hackaton</strong></p><p>With Matthieu Jacquet (from marketing company Splio) and John Kinson, we have participated in the last <a href="https://streamnative.io/en/blog/community/2021-03-11-introducing-the-apache-pulsar-hackathon-2021">Pulsar hackathon</a>. We decided to build the prototype of a bench to load-test Infinitic. During this 48h hackathon:</p><ul><li><p>We have written a workflow launcher to be able to dispatch workflows according to a scenario defined in a configuration file;</p></li><li><p>We have written a workflow, emulating the request of 2 different providers for a product,&nbsp; followed by an order ordering to the quickest one responding positively;</p></li><li><p>We have set up a local Docker configuration to run Prometheus and Grafana to get nice dashboards;</p></li><li><p>We were able to run all developments above on a hosted Pulsar provided by CloudNative;</p></li><li><p>We did a nice 10' min video of this work that I hope to release soon.</p></li></ul><p>I'm thrilled with the results, as we were able to reach consistently a completion rate of 20 workflows/second (nearly 2 million workflows per day) with a unique worker (basic Macbook Pro) and a minimal Pulsar cluster.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BsXN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BsXN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png 424w, https://substackcdn.com/image/fetch/$s_!BsXN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png 848w, https://substackcdn.com/image/fetch/$s_!BsXN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png 1272w, https://substackcdn.com/image/fetch/$s_!BsXN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BsXN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png" width="1456" height="808" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BsXN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png 424w, https://substackcdn.com/image/fetch/$s_!BsXN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png 848w, https://substackcdn.com/image/fetch/$s_!BsXN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png 1272w, https://substackcdn.com/image/fetch/$s_!BsXN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2bed2f3-4359-4779-bdfa-e72f10300387_1600x888.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Workflow engines often have a bad reputation for being slow and a single point of failure. Event-driven workflow engines like Infinitic are pushing those limits. I really believe that this technology will be more and more common in the coming years.</p><p><strong>Pulsar Summit</strong></p><p>Last but not least, I'm thrilled to share that my paper "<strong>Infinitic: Building a Workflow Engine on Top of Pulsar"</strong> has been accepted for the next <a href="https://www.na2021.pulsar-summit.org">Pulsar Summit</a>:</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wwdj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff434a552-2025-464a-954f-d4ca6614a8d3_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wwdj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff434a552-2025-464a-954f-d4ca6614a8d3_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!wwdj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff434a552-2025-464a-954f-d4ca6614a8d3_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!wwdj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff434a552-2025-464a-954f-d4ca6614a8d3_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!wwdj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff434a552-2025-464a-954f-d4ca6614a8d3_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wwdj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff434a552-2025-464a-954f-d4ca6614a8d3_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/f434a552-2025-464a-954f-d4ca6614a8d3_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:279438,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wwdj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff434a552-2025-464a-954f-d4ca6614a8d3_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!wwdj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff434a552-2025-464a-954f-d4ca6614a8d3_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!wwdj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff434a552-2025-464a-954f-d4ca6614a8d3_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!wwdj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff434a552-2025-464a-954f-d4ca6614a8d3_1600x900.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is a great event for anyone interested in messaging and event streaming to learn the latest Pulsar project updates, use cases, and best practices! I can&#8217;t recommend enough you to join :)<br><br>That&#8217;s it for today. Be safe. </p>]]></content:encoded></item><item><title><![CDATA[V0.5.0 Tags!]]></title><description><![CDATA[This release introduces tags! Using tags avoids you maintaining mapping tables between Infinitic Ids and your own ids.]]></description><link>https://infinitic.substack.com/p/v050-tags</link><guid isPermaLink="false">https://infinitic.substack.com/p/v050-tags</guid><dc:creator><![CDATA[Gilles Barbier]]></dc:creator><pubDate>Wed, 07 Apr 2021 20:09:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sFdP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi!</p><p>I&#8217;m happy to announce the 0.5.0 release of Infinitic with an important new feature: tags!</p><p>You can now label workflow instances with tags. And <a href="https://docs.infinitic.io/clients/managing-workflows#running-workflow-stub">apply commands</a>, such as sending events, or canceling, to all workflows marked with a tag.&nbsp;</p><p><em>By using tags, Infinitic avoids you maintaining mapping tables between Infinitic Ids and your own ids.</em></p><p>Let's take an example continuing the example in my last email: how to plug Infinitic into an existing event stream (from Kafka, for example):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sFdP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sFdP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png 424w, https://substackcdn.com/image/fetch/$s_!sFdP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png 848w, https://substackcdn.com/image/fetch/$s_!sFdP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png 1272w, https://substackcdn.com/image/fetch/$s_!sFdP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sFdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png" width="1064" height="628" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:628,&quot;width&quot;:1064,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sFdP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png 424w, https://substackcdn.com/image/fetch/$s_!sFdP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png 848w, https://substackcdn.com/image/fetch/$s_!sFdP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png 1272w, https://substackcdn.com/image/fetch/$s_!sFdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4174810e-6042-4a7d-8a7b-88876abf425e_1064x628.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To do so, you will need a dispatcher between your current event stream and Infinitic. This dispatcher should:&nbsp;</p><ul><li><p>trigger workflows based on events type and values</p></li><li><p>forward events to existing workflows.</p></li></ul><p>A requirement to keep the code simple is to have this dispatcher as dumb as possible. This release 0.5.0 (and the previous 0.4.3) brings an elegant solution to this problem.</p><p>Most of the time, your events have a primary id describing your resources. Depending on your activity, it could be a UserId, an OrderId&#8230;. When starting a new workflow, you can label it with a tag containing this id, such as </p><pre><code>"userId:d15376a4-600b-483b-9eeb-373209361557"</code></pre><p>By introspecting the type of <a href="https://docs.infinitic.io/workflows/writing-workflows#channel">channels</a> for each workflow interface, the dispatcher knows which type of workflows waits for which event. When receiving a new event, the dispatcher can forward it to the relevant workflows having the right tag. The workflow engine will automatically discard the event if not waited and will process it otherwise.</p><p>I hope you start to see how tags can greatly simplify your implementations.&nbsp;</p><p>This 0.5.0 release contains even more goodies: <a href="https://github.com/infiniticio/infinitic/releases/tag/v0.5.0">have a look</a>!</p><p>As always,&nbsp; I need your feedback, question, or reaction &#10084;&#65039;.</p>]]></content:encoded></item></channel></rss>