<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Distributed Systems on Vubon Notes</title><link>https://vubon.dev/tags/distributed-systems/</link><description>Recent content in Distributed Systems on Vubon Notes</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 03 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://vubon.dev/tags/distributed-systems/index.xml" rel="self" type="application/rss+xml"/><item><title>Saga Pattern: Handling Distributed Transactions in Microservices</title><link>https://vubon.dev/posts/saga-pattern/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://vubon.dev/posts/saga-pattern/</guid><description>&lt;p>Whenever microservices enter a system design discussion, one question always comes to my mind:&lt;/p>
&lt;p>&lt;strong>What happens when a transaction succeeds in one service but fails in another?&lt;/strong>&lt;/p>
&lt;p>Let&amp;rsquo;s take a payment system as an example.&lt;/p>
&lt;p>Imagine a user initiates a $100 transfer. The workflow looks like this:&lt;/p>
&lt;ul>
&lt;li>Transfer Service creates the transaction ✅&lt;/li>
&lt;li>Wallet Service deducts $100 from the user&amp;rsquo;s balance ✅&lt;/li>
&lt;li>Bank Service sends the transfer request ❌&lt;/li>
&lt;/ul>
&lt;p>Now we have a problem.&lt;/p></description></item><item><title>No-Op Update Pattern: State-Driven Idempotent Updates</title><link>https://vubon.dev/posts/no-op-update-pattern/</link><pubDate>Sun, 24 May 2026 11:00:00 +0000</pubDate><guid>https://vubon.dev/posts/no-op-update-pattern/</guid><description>&lt;p>After exploring &lt;a href="https://vubon.dev/posts/system-design-interview-idempotency/">idempotency keys&lt;/a>, I came across another pattern that deserves more attention: the &lt;strong>No-Op Update Pattern&lt;/strong>.&lt;/p>
&lt;p>The idea is simple, but the mindset behind it is what makes it powerful.&lt;/p>
&lt;p>Instead of treating every update request as something that must trigger work, you first ask a more important question:&lt;/p>
&lt;p>&lt;strong>Does this request actually change the state?&lt;/strong>&lt;/p>
&lt;p>If the answer is no, the system should do nothing and return the current state.&lt;/p></description></item><item><title>System Design Interview: Partial Failure &amp; Durability</title><link>https://vubon.dev/posts/system-design-interview-partial-failure/</link><pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate><guid>https://vubon.dev/posts/system-design-interview-partial-failure/</guid><description>&lt;p>After talking about idempotency, I thought I&amp;rsquo;d share another good follow-up question:&lt;/p>
&lt;p>&lt;strong>&amp;ldquo;What happens if your service crashes in the middle of a request?&amp;rdquo;&lt;/strong>&lt;/p>
&lt;p>Let&amp;rsquo;s say:&lt;/p>
&lt;ul>
&lt;li>transfer record inserted ✅&lt;/li>
&lt;li>ledger update started ❌&lt;/li>
&lt;li>database connection drops&lt;/li>
&lt;li>service dies&lt;/li>
&lt;/ul>
&lt;p>Now you have partial data.&lt;/p>
&lt;p>And in payment systems, partial success is usually worse than failure.&lt;/p>
&lt;p>




&lt;figure class="">
 
 
 &lt;div class="img-container">
 &lt;img loading="lazy" alt="What if your service crashes in the middle of a request?" src="https://vubon.dev/images/partial-failure-durability.png">
 &lt;/div>
 

 
&lt;/figure>
&lt;/p>
&lt;hr>
&lt;h2 class="heading" id="the-first-answer-most-people-give">
 The first answer most people give
 &lt;a class="anchor" href="#the-first-answer-most-people-give">#&lt;/a>
&lt;/h2>
&lt;p>👉 &lt;em>Use database transactions (ACID).&lt;/em>&lt;/p></description></item><item><title>System Design Interview: Idempotency</title><link>https://vubon.dev/posts/system-design-interview-idempotency/</link><pubDate>Mon, 04 May 2026 11:00:00 +0000</pubDate><guid>https://vubon.dev/posts/system-design-interview-idempotency/</guid><description>&lt;p>Almost every candidate faces this question during a system design interview:&lt;/p>
&lt;p>&lt;strong>How do you handle duplicate transactions?&lt;/strong>&lt;/p>
&lt;p>Most people answer: &lt;em>Idempotency key + Cache.&lt;/em>&lt;/p>
&lt;p>To be honest — that&amp;rsquo;s a good start.&lt;/p>
&lt;p>But the real lesson comes when you build an actual payment system.&lt;/p>
&lt;hr>
&lt;h2 class="heading" id="duplicates-are-normal-behavior">
 Duplicates are normal behavior
 &lt;a class="anchor" href="#duplicates-are-normal-behavior">#&lt;/a>
&lt;/h2>
&lt;p>In distributed systems, duplicates are not edge cases. They are normal behavior.&lt;/p>
&lt;p>Duplicates can originate from anywhere:&lt;/p>
&lt;ul>
&lt;li>client double-clicks&lt;/li>
&lt;li>mobile retry on timeout&lt;/li>
&lt;li>API gateway retries&lt;/li>
&lt;li>reverse proxies&lt;/li>
&lt;li>silent network failures&lt;/li>
&lt;li>third-party timeouts&lt;/li>
&lt;/ul>
&lt;p>So the problem is not &lt;em>if&lt;/em> duplicates happen.&lt;/p></description></item><item><title>System Design Interview Prep — Series Introduction</title><link>https://vubon.dev/posts/system-design-interview-series/</link><pubDate>Mon, 04 May 2026 10:00:00 +0000</pubDate><guid>https://vubon.dev/posts/system-design-interview-series/</guid><description>&lt;p>System design interviews are tough. Not because the questions are impossible - but because they&amp;rsquo;re open-ended, and most people don&amp;rsquo;t know where to start.&lt;/p>
&lt;p>After years of building distributed systems in FinTech, I&amp;rsquo;ve been on both sides of the table. I know what interviewers are actually looking for, and it&amp;rsquo;s not buzzwords. It&amp;rsquo;s trade-offs, real-world thinking, and knowing &lt;em>why&lt;/em> something works, not just &lt;em>that&lt;/em> it works.&lt;/p>
&lt;p>So I&amp;rsquo;m putting together this series — practical write-ups on the topics that come up again and again. No fluff, just the stuff that matters.&lt;/p></description></item></channel></rss>