<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Temporal Internals on Random Tech Excursions</title><link>https://ssushant.me/temporal/</link><description>Recent content in Temporal Internals on Random Tech Excursions</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://ssushant.me/temporal/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://ssushant.me/temporal/chapter-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ssushant.me/temporal/chapter-1/</guid><description>&lt;h1 id="chapter-1-public-api-and-service-routing" class="relative group"&gt;Chapter 1: Public API and Service Routing &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#chapter-1-public-api-and-service-routing" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;Welcome! Before we dive into Temporal, imagine walking into a busy restaurant. There is a host at the door, waiters moving around, and a kitchen in the back. You don&amp;rsquo;t walk into the kitchen and start cooking. Instead, you tell the host what you want, and the host directs you to the right place. In Temporal, that host is the &lt;strong&gt;Public API&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title/><link>https://ssushant.me/temporal/chapter-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ssushant.me/temporal/chapter-2/</guid><description>&lt;h1 id="chapter-2-durable-persistence" class="relative group"&gt;Chapter 2: Durable Persistence &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#chapter-2-durable-persistence" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;In &#10; &#10; &lt;a href="https://ssushant.me/temporal/chapter-1/"&gt;Chapter 1: Public API and Service Routing&lt;/a&gt;, we walked through the front door of Temporal. We learned how requests are routed to different services. But a front door is not enough. What if the server loses power in the middle of a workflow? If everything lives in memory, it’s gone. That’s why Temporal has &lt;strong&gt;durable persistence&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title/><link>https://ssushant.me/temporal/chapter-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ssushant.me/temporal/chapter-3/</guid><description>&lt;h1 id="chapter-3-task-queues-and-matching" class="relative group"&gt;Chapter 3: Task Queues and Matching &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#chapter-3-task-queues-and-matching" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;In &#10; &#10; &lt;a href="https://ssushant.me/temporal/chapter-2/"&gt;Chapter 2: Durable Persistence&lt;/a&gt;, we learned that Temporal writes every important workflow event into durable storage. That’s how workflows survive crashes. But a ledger can’t do work. A workflow must run code: charge a credit card, ship a package, send an email. Temporal needs a way to connect &lt;em&gt;work that needs doing&lt;/em&gt; to &lt;em&gt;a worker that can do it&lt;/em&gt;. That’s where &lt;strong&gt;task queues and matching&lt;/strong&gt; come in.&lt;/p&gt;</description></item><item><title/><link>https://ssushant.me/temporal/chapter-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ssushant.me/temporal/chapter-4/</guid><description>&lt;h1 id="chapter-4-visibility-and-search" class="relative group"&gt;Chapter 4: Visibility and Search &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#chapter-4-visibility-and-search" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;In &#10; &#10; &lt;a href="https://ssushant.me/temporal/chapter-3/"&gt;Chapter 3: Task Queues and Matching&lt;/a&gt;, we saw how workflows get their work done through workers. But think about this: what if you have thousands of workflows running at the same time? How do you find the one that belongs to customer Alice? Or how do you find all workflows that are stuck on a payment problem?&lt;/p&gt;</description></item><item><title/><link>https://ssushant.me/temporal/chapter-5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ssushant.me/temporal/chapter-5/</guid><description>&lt;h1 id="chapter-5-archival-and-object-storage" class="relative group"&gt;Chapter 5: Archival and Object Storage &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#chapter-5-archival-and-object-storage" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;In &#10; &#10; &lt;a href="https://ssushant.me/temporal/chapter-4/"&gt;Chapter 4: Visibility and Search&lt;/a&gt;, you learned how to find workflows by querying metadata. You can locate a workflow, but what happens when that workflow finishes? Does Temporal keep every workflow history in its main database forever? If it did, the database would eventually become huge, slow, and expensive.&lt;/p&gt;&#10;&lt;p&gt;Think about a busy office. Your team uses nice filing cabinets for current paperwork. But every closed project also goes into the same cabinet. After a few years, the cabinet is overflowing. You can barely find anything, and the office rent is too expensive for storing old paper.&lt;/p&gt;</description></item><item><title/><link>https://ssushant.me/temporal/chapter-6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ssushant.me/temporal/chapter-6/</guid><description>&lt;h1 id="chapter-6-observability-and-telemetry" class="relative group"&gt;Chapter 6: Observability and Telemetry &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#chapter-6-observability-and-telemetry" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;In &#10; &#10; &lt;a href="https://ssushant.me/temporal/chapter-5/"&gt;Chapter 5: Archival and Object Storage&lt;/a&gt;, we saw how old workflow histories can be moved to cheap object storage. That keeps the primary database fast. But now imagine you are the person who runs the Temporal server. The server is processing thousands of workflows. Is it healthy? Is it slow? Is a worker broken? You need a way to see what is happening inside the server.&lt;/p&gt;</description></item><item><title/><link>https://ssushant.me/temporal/chapter-7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ssushant.me/temporal/chapter-7/</guid><description>&lt;h1 id="chapter-7-cluster-membership-and-internal-rpc" class="relative group"&gt;Chapter 7: Cluster Membership and Internal RPC &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#chapter-7-cluster-membership-and-internal-rpc" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;In &#10; &#10; &lt;a href="https://ssushant.me/temporal/chapter-6/"&gt;Chapter 6: Observability and Telemetry&lt;/a&gt;, we learned how to monitor a Temporal server and see what is happening inside it. But so far, we have talked about Temporal as if it were a single server. In real life, Temporal runs as a &lt;strong&gt;cluster&lt;/strong&gt; of multiple nodes. That raises a big question: when there are many nodes, how do they agree on who owns which workflows? And how do they talk to each other?&lt;/p&gt;</description></item><item><title/><link>https://ssushant.me/temporal/chapter-8/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ssushant.me/temporal/chapter-8/</guid><description>&lt;h1 id="chapter-8-application-composition-and-lifecycle" class="relative group"&gt;Chapter 8: Application Composition and Lifecycle &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#chapter-8-application-composition-and-lifecycle" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;In &#10; &#10; &lt;a href="https://ssushant.me/temporal/chapter-7/"&gt;Chapter 7: Cluster Membership and Internal RPC&lt;/a&gt;, we saw how many Temporal nodes work together as a cluster. Now let’s zoom out one level further and ask a bigger question: &lt;strong&gt;How is the whole Temporal server application put together?&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;The server is not one giant &lt;code&gt;main()&lt;/code&gt; function. It is built from many pieces: &lt;code&gt;frontend&lt;/code&gt;, &lt;code&gt;history&lt;/code&gt;, &lt;code&gt;matching&lt;/code&gt;, &lt;code&gt;persistence&lt;/code&gt;, &lt;code&gt;visibility&lt;/code&gt;, and more. Someone has to wire these pieces together in the right order. Someone also has to start them and stop them without causing errors.&lt;/p&gt;</description></item></channel></rss>