<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://stack-craft-eight.vercel.app/blog</id>
    <title>StackCraft Blog</title>
    <updated>2026-07-07T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://stack-craft-eight.vercel.app/blog"/>
    <subtitle>StackCraft Blog</subtitle>
    <icon>https://stack-craft-eight.vercel.app/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Encryption Explained Simply]]></title>
        <id>https://stack-craft-eight.vercel.app/blog/encryption</id>
        <link href="https://stack-craft-eight.vercel.app/blog/encryption"/>
        <updated>2026-07-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Learn what encryption is, how it works, and why it is essential for protecting sensitive data in modern systems.]]></summary>
        <content type="html"><![CDATA[<p>Every day, billions of pieces of sensitive data travel across the internet—passwords, credit card numbers, personal messages, and banking transactions. Encryption is what keeps this data safe from attackers.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-encryption">What is Encryption?<a href="https://stack-craft-eight.vercel.app/blog/encryption#what-is-encryption" class="hash-link" aria-label="Direct link to What is Encryption?" title="Direct link to What is Encryption?" translate="no">​</a></h2>
<p>Encryption is the process of converting <strong>readable data (plaintext)</strong> into an <strong>unreadable format (ciphertext)</strong> using a mathematical algorithm and a secret key.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Plaintext</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    │</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ▼</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Encryption + Key</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    │</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ▼</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Ciphertext</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    │</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ▼</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Decryption + Key</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    │</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ▼</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Plaintext</span><br></div></code></pre></div></div>
<p>Without the correct key, the encrypted data is practically impossible to read.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-do-we-need-encryption">Why Do We Need Encryption?<a href="https://stack-craft-eight.vercel.app/blog/encryption#why-do-we-need-encryption" class="hash-link" aria-label="Direct link to Why Do We Need Encryption?" title="Direct link to Why Do We Need Encryption?" translate="no">​</a></h2>
<p>Encryption protects data from:</p>
<ul>
<li class="">Unauthorized access</li>
<li class="">Data theft</li>
<li class="">Man-in-the-middle attacks</li>
<li class="">Identity theft</li>
<li class="">Financial fraud</li>
</ul>
<p>It ensures that even if attackers intercept data, they cannot understand it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="types-of-encryption">Types of Encryption<a href="https://stack-craft-eight.vercel.app/blog/encryption#types-of-encryption" class="hash-link" aria-label="Direct link to Types of Encryption" title="Direct link to Types of Encryption" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="symmetric-encryption">Symmetric Encryption<a href="https://stack-craft-eight.vercel.app/blog/encryption#symmetric-encryption" class="hash-link" aria-label="Direct link to Symmetric Encryption" title="Direct link to Symmetric Encryption" translate="no">​</a></h3>
<p>The same key is used for encryption and decryption.</p>
<p>Examples:</p>
<ul>
<li class="">AES</li>
<li class="">DES</li>
<li class="">ChaCha20</li>
</ul>
<p><strong>Advantages</strong></p>
<ul>
<li class="">Extremely fast</li>
<li class="">Ideal for encrypting large files</li>
</ul>
<p><strong>Disadvantage</strong></p>
<ul>
<li class="">Securely sharing the key is difficult.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="asymmetric-encryption">Asymmetric Encryption<a href="https://stack-craft-eight.vercel.app/blog/encryption#asymmetric-encryption" class="hash-link" aria-label="Direct link to Asymmetric Encryption" title="Direct link to Asymmetric Encryption" translate="no">​</a></h3>
<p>Uses two keys:</p>
<ul>
<li class="">Public Key</li>
<li class="">Private Key</li>
</ul>
<p>The public key encrypts data, while only the private key can decrypt it.</p>
<p>Examples:</p>
<ul>
<li class="">RSA</li>
<li class="">ECC</li>
</ul>
<p>This enables secure communication without sharing secret keys.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-is-encryption-used">Where Is Encryption Used?<a href="https://stack-craft-eight.vercel.app/blog/encryption#where-is-encryption-used" class="hash-link" aria-label="Direct link to Where Is Encryption Used?" title="Direct link to Where Is Encryption Used?" translate="no">​</a></h2>
<p>Encryption powers many everyday applications:</p>
<ul>
<li class="">HTTPS websites</li>
<li class="">Online banking</li>
<li class="">Password managers</li>
<li class="">Messaging apps like WhatsApp</li>
<li class="">Cloud storage</li>
<li class="">VPNs</li>
</ul>
<p>Whenever you see a lock icon in your browser, encryption is protecting your connection.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="encryption-in-https">Encryption in HTTPS<a href="https://stack-craft-eight.vercel.app/blog/encryption#encryption-in-https" class="hash-link" aria-label="Direct link to Encryption in HTTPS" title="Direct link to Encryption in HTTPS" translate="no">​</a></h2>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="encryption-vs-hashing">Encryption vs Hashing<a href="https://stack-craft-eight.vercel.app/blog/encryption#encryption-vs-hashing" class="hash-link" aria-label="Direct link to Encryption vs Hashing" title="Direct link to Encryption vs Hashing" translate="no">​</a></h2>
<p>Encryption is reversible with the correct key.</p>
<p>Hashing is one-way and cannot be reversed.</p>
<p>Passwords are usually <strong>hashed</strong>, not encrypted.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="best-practices">Best Practices<a href="https://stack-craft-eight.vercel.app/blog/encryption#best-practices" class="hash-link" aria-label="Direct link to Best Practices" title="Direct link to Best Practices" translate="no">​</a></h2>
<ul>
<li class="">Use modern algorithms like <strong>AES-256</strong>.</li>
<li class="">Never create your own encryption algorithm.</li>
<li class="">Rotate encryption keys regularly.</li>
<li class="">Protect private keys carefully.</li>
<li class="">Always use HTTPS for web applications.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://stack-craft-eight.vercel.app/blog/encryption#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Encryption is one of the most important building blocks of modern software systems. From messaging apps to banking platforms, it ensures confidentiality, privacy, and trust. Understanding how encryption works is essential for every software engineer and system designer.</p>]]></content>
        <author>
            <name>Shubham Kumar</name>
        </author>
        <category label="Security" term="Security"/>
        <category label="Encryption" term="Encryption"/>
        <category label="Cryptography" term="Cryptography"/>
        <category label="System Design" term="System Design"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Designing a Unique ID Generator in Distributed Systems]]></title>
        <id>https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator</id>
        <link href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator"/>
        <updated>2026-07-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Learn how distributed systems generate billions of unique IDs using UUIDs, Snowflake, database sequences, and ID range allocation.]]></summary>
        <content type="html"><![CDATA[<p>Generating a unique ID sounds trivial—until your system scales across hundreds or thousands of servers.</p>
<p>Most developers begin with <strong>auto-increment IDs</strong> in a relational database. It works perfectly for a single database instance. But in distributed systems, generating unique identifiers becomes a fundamental design challenge.</p>
<p>Platforms like <strong>Instagram</strong>, <strong>Amazon</strong>, <strong>Uber</strong>, and <strong>WhatsApp</strong> generate millions of new objects every day—users, orders, messages, rides, and payments. Every object must receive a <strong>globally unique identifier</strong>, even when thousands of servers are creating data simultaneously.</p>
<p>The challenge isn't generating numbers.</p>
<p>The challenge is generating <strong>billions of unique, scalable, fault-tolerant, ordered IDs without creating a bottleneck.</strong></p>
<hr>
<h1>Why Do We Need Unique IDs?</h1>
<p>Every entity inside a system needs a unique identity.</p>
<p>Examples include:</p>
<ul>
<li class="">User IDs</li>
<li class="">Order IDs</li>
<li class="">Payment IDs</li>
<li class="">Message IDs</li>
<li class="">Notification IDs</li>
<li class="">Ride IDs</li>
</ul>
<p>Imagine two servers generating the same Order ID.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Server A → Order #10567</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Server B → Order #10567</span><br></div></code></pre></div></div>
<p>Now two completely different orders have the same identifier.</p>
<p>This leads to:</p>
<ul>
<li class="">Data corruption</li>
<li class="">Lost records</li>
<li class="">Broken foreign keys</li>
<li class="">Incorrect analytics</li>
</ul>
<p>Uniqueness is <strong>non-negotiable</strong>.</p>
<hr>
<h1>Approach 1 — Database Auto Increment</h1>
<p>The simplest solution is letting the database generate IDs.</p>
<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">CREATE</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">TABLE</span><span class="token plain"> orders </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    id </span><span class="token keyword" style="color:#00009f">BIGINT</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">AUTO_INCREMENT</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">PRIMARY</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">KEY</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<p>Every insert automatically gets the next ID.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">3</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">4</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">5</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">...</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="architecture">Architecture<a href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator#architecture" class="hash-link" aria-label="Direct link to Architecture" title="Direct link to Architecture" translate="no">​</a></h2>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="advantages">Advantages<a href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator#advantages" class="hash-link" aria-label="Direct link to Advantages" title="Direct link to Advantages" translate="no">​</a></h2>
<ul>
<li class="">Extremely simple</li>
<li class="">Guaranteed uniqueness</li>
<li class="">Sequential IDs</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="problems">Problems<a href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator#problems" class="hash-link" aria-label="Direct link to Problems" title="Direct link to Problems" translate="no">​</a></h2>
<p>As traffic grows:</p>
<ul>
<li class="">Every server depends on one database.</li>
<li class="">Database becomes a bottleneck.</li>
<li class="">Single point of failure.</li>
<li class="">Difficult to scale globally.</li>
</ul>
<p>If the database goes down...</p>
<blockquote>
<p>Nobody can create new records.</p>
</blockquote>
<hr>
<h1>Why Not Let Every Server Keep Its Own Counter?</h1>
<p>At first glance, this seems obvious.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Server A</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">3</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">4</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Server B</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">3</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">4</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">...</span><br></div></code></pre></div></div>
<p>Unfortunately...</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Server A → ID = 1000</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Server B → ID = 1000</span><br></div></code></pre></div></div>
<p>Collision.</p>
<p>Without coordination, uniqueness cannot be guaranteed.</p>
<p>Distributed systems avoid coordination because coordination is expensive.</p>
<hr>
<h1>Approach 2 — UUID (Universally Unique Identifier)</h1>
<p>Instead of coordinating with a central server, every machine generates IDs independently.</p>
<p>Example UUID:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">550e8400-e29b-41d4-a716-446655440000</span><br></div></code></pre></div></div>
<p>The probability of collision is astronomically small.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="architecture-1">Architecture<a href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator#architecture-1" class="hash-link" aria-label="Direct link to Architecture" title="Direct link to Architecture" translate="no">​</a></h2>
<!-- -->
<p>No central authority is required.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="advantages-1">Advantages<a href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator#advantages-1" class="hash-link" aria-label="Direct link to Advantages" title="Direct link to Advantages" translate="no">​</a></h2>
<ul>
<li class="">Globally unique</li>
<li class="">No coordination</li>
<li class="">Highly available</li>
<li class="">Easy to generate</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="drawbacks">Drawbacks<a href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator#drawbacks" class="hash-link" aria-label="Direct link to Drawbacks" title="Direct link to Drawbacks" translate="no">​</a></h2>
<p>UUIDs are:</p>
<ul>
<li class="">128 bits</li>
<li class="">Large</li>
<li class="">Random</li>
<li class="">Not ordered</li>
</ul>
<p>Random insertion hurts database indexes.</p>
<p>Instead of:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">1001</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1002</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1003</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1004</span><br></div></code></pre></div></div>
<p>Databases receive:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">A91C...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1FF2...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">9B2D...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">31AC...</span><br></div></code></pre></div></div>
<p>This causes:</p>
<ul>
<li class="">Index fragmentation</li>
<li class="">More page splits</li>
<li class="">Poor cache locality</li>
<li class="">Slower inserts</li>
</ul>
<hr>
<h1>Approach 3 — Twitter Snowflake</h1>
<p>Twitter introduced one of the most popular distributed ID generators.</p>
<p>Instead of random IDs, it packs several components into a single <strong>64-bit integer</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="snowflake-structure">Snowflake Structure<a href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator#snowflake-structure" class="hash-link" aria-label="Direct link to Snowflake Structure" title="Direct link to Snowflake Structure" translate="no">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">| 1 Bit | 41 Bits | 10 Bits | 12 Bits |</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|-------|---------|----------|----------|</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| Sign  | Timestamp | Machine ID | Sequence |</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="timestamp">Timestamp<a href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator#timestamp" class="hash-link" aria-label="Direct link to Timestamp" title="Direct link to Timestamp" translate="no">​</a></h3>
<p>Makes IDs naturally ordered.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="machine-id">Machine ID<a href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator#machine-id" class="hash-link" aria-label="Direct link to Machine ID" title="Direct link to Machine ID" translate="no">​</a></h3>
<p>Ensures different servers generate different ranges.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sequence-number">Sequence Number<a href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator#sequence-number" class="hash-link" aria-label="Direct link to Sequence Number" title="Direct link to Sequence Number" translate="no">​</a></h3>
<p>Allows multiple IDs within the same millisecond.</p>
<hr>
<h1>Snowflake Generation</h1>
<!-- -->
<p>Example:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Timestamp : 1714561234567</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Machine ID : 15</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Sequence : 89</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">↓</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">742913842381092</span><br></div></code></pre></div></div>
<p>One compact integer.</p>
<p>Globally unique.</p>
<p>Time ordered.</p>
<hr>
<h1>Why Snowflake Is Powerful</h1>
<p>Imagine:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Server 12</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">10:00:01.123</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">↓</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">ID = 742913842381092</span><br></div></code></pre></div></div>
<p>Later,</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Server 15</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">10:00:01.124</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">↓</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">ID = 742913842381500</span><br></div></code></pre></div></div>
<p>Even though different servers generated the IDs...</p>
<p>The IDs remain approximately ordered.</p>
<p>This makes:</p>
<ul>
<li class="">Analytics easier</li>
<li class="">Event replay simpler</li>
<li class="">Debugging straightforward</li>
</ul>
<hr>
<h1>Handling Clock Drift</h1>
<p>Distributed systems assume clocks are synchronized.</p>
<p>Reality is different.</p>
<p>Machines drift.</p>
<p>Suppose a server generates:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">10:00:05</span><br></div></code></pre></div></div>
<p>Then NTP adjusts its clock backward.</p>
<p>Now the server thinks it's:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">10:00:03</span><br></div></code></pre></div></div>
<p>Future IDs suddenly appear <strong>older</strong> than previously generated IDs.</p>
<p>Snowflake implementations detect this and usually:</p>
<ul>
<li class="">Wait until time catches up</li>
<li class="">Refuse to generate IDs temporarily</li>
<li class="">Use backup sequence logic</li>
</ul>
<hr>
<h1>Approach 4 — ID Range Allocation</h1>
<p>Instead of generating every ID centrally...</p>
<p>A coordinator allocates blocks.</p>
<p>Example:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Coordinator</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">↓</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Server A</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1 → 1,000,000</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">↓</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Server B</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1,000,001 → 2,000,000</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">↓</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Server C</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2,000,001 → 3,000,000</span><br></div></code></pre></div></div>
<!-- -->
<p>Each server generates IDs locally until its range is exhausted.</p>
<p>Advantages:</p>
<ul>
<li class="">Less coordination</li>
<li class="">Very high throughput</li>
<li class="">Simple implementation</li>
</ul>
<p>Disadvantage:</p>
<p>Eventually servers request another range.</p>
<hr>
<h1>Which Strategy Should You Choose?</h1>
<table><thead><tr><th>Requirement</th><th>Best Choice</th></tr></thead><tbody><tr><td>Small application</td><td>Database Sequence</td></tr><tr><td>Distributed uniqueness</td><td>UUID</td></tr><tr><td>Ordered IDs</td><td>Snowflake</td></tr><tr><td>Maximum throughput</td><td>ID Range Allocation</td></tr></tbody></table>
<hr>
<h1>Interview Question</h1>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-not-use-timestamps-as-ids">Why Not Use Timestamps as IDs?<a href="https://stack-craft-eight.vercel.app/blog/distributed-unique-id-generator#why-not-use-timestamps-as-ids" class="hash-link" aria-label="Direct link to Why Not Use Timestamps as IDs?" title="Direct link to Why Not Use Timestamps as IDs?" translate="no">​</a></h2>
<p>Suppose two requests arrive simultaneously.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">10:15:20.123</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">↓</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Request A</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">10:15:20.123</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">↓</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Request B</span><br></div></code></pre></div></div>
<p>Both produce exactly the same timestamp.</p>
<p>Collision.</p>
<p>Timestamps alone <strong>cannot guarantee uniqueness</strong>.</p>
<p>They must be combined with:</p>
<ul>
<li class="">Machine ID</li>
<li class="">Sequence Number</li>
<li class="">Randomness</li>
</ul>
<hr>
<h1>Predictability Matters</h1>
<p>Sequential IDs expose business information.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Order</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1001</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">↓</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1002</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">↓</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1003</span><br></div></code></pre></div></div>
<p>A competitor can estimate:</p>
<ul>
<li class="">Daily orders</li>
<li class="">Revenue growth</li>
<li class="">Customer activity</li>
</ul>
<p>Randomized identifiers hide this information.</p>
<p>Many public APIs therefore expose UUIDs while internally storing numeric IDs.</p>
<hr>
<h1>Real-World Examples</h1>
<table><thead><tr><th>Company</th><th>Strategy</th></tr></thead><tbody><tr><td>Twitter (X)</td><td>Snowflake</td></tr><tr><td>Instagram</td><td>Sharded IDs</td></tr><tr><td>Amazon</td><td>Internal distributed IDs</td></tr><tr><td>Google</td><td>UUID / Custom IDs</td></tr><tr><td>MongoDB</td><td>ObjectId</td></tr><tr><td>PostgreSQL</td><td>Sequence / UUID</td></tr></tbody></table>
<hr>
<h1>Comparison</h1>
<table><thead><tr><th>Feature</th><th>Database Sequence</th><th>UUID</th><th>Snowflake</th><th>ID Range</th></tr></thead><tbody><tr><td>Unique</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Ordered</td><td>✅</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Distributed</td><td>❌</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>No Central Bottleneck</td><td>❌</td><td>✅</td><td>✅</td><td>Mostly</td></tr><tr><td>Easy to Implement</td><td>✅</td><td>✅</td><td>Medium</td><td>Medium</td></tr></tbody></table>
<hr>
<h1>Key Takeaways</h1>
<ul>
<li class="">Generating IDs in a single database is easy.</li>
<li class="">Distributed systems require globally unique identifiers.</li>
<li class="">UUIDs eliminate coordination but sacrifice ordering.</li>
<li class="">Snowflake provides globally unique, time-ordered IDs.</li>
<li class="">ID range allocation reduces coordination while maintaining uniqueness.</li>
<li class="">Clock synchronization is an important challenge in distributed ID generation.</li>
<li class="">The right strategy depends on scalability, ordering, and operational requirements.</li>
</ul>
<hr>
<h1>Conclusion</h1>
<p>At first glance, generating an ID looks like a simple programming task.</p>
<p>In reality, it is a distributed systems problem involving <strong>scalability</strong>, <strong>fault tolerance</strong>, <strong>availability</strong>, <strong>ordering</strong>, and <strong>performance</strong>.</p>
<p>The best solution depends on your system's requirements:</p>
<ul>
<li class=""><strong>Need simplicity?</strong> Use database sequences.</li>
<li class=""><strong>Need global uniqueness?</strong> Use UUIDs.</li>
<li class=""><strong>Need ordering at massive scale?</strong> Use Snowflake.</li>
<li class=""><strong>Need extreme throughput?</strong> Allocate ID ranges.</li>
</ul>
<blockquote>
<p><strong>Generating a number is easy. Generating billions of unique, scalable, fault-tolerant, and ordered identifiers across thousands of machines is the real engineering challenge.</strong></p>
</blockquote>
<p>Happy Designing ❤️</p>]]></content>
        <author>
            <name>Shubham Kumar</name>
        </author>
        <category label="System Design" term="System Design"/>
        <category label="Distributed Systems" term="Distributed Systems"/>
        <category label="Databases" term="Databases"/>
        <category label="Scalability" term="Scalability"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Case Study: Design Video Streaming]]></title>
        <id>https://stack-craft-eight.vercel.app/blog/2026/06/30/design-video-streaming</id>
        <link href="https://stack-craft-eight.vercel.app/blog/2026/06/30/design-video-streaming"/>
        <updated>2026-06-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Upload to object storage, transcode asynchronously, package segments, and deliver adaptive renditions through a CDN.]]></summary>
        <content type="html"><![CDATA[<p>Upload to object storage, transcode asynchronously, package segments, and deliver adaptive renditions through a CDN.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="design-lens">Design lens<a href="https://stack-craft-eight.vercel.app/blog/2026/06/30/design-video-streaming#design-lens" class="hash-link" aria-label="Direct link to Design lens" title="Direct link to Design lens" translate="no">​</a></h2>
<p>Treat <strong>Case Study: Design Video Streaming</strong> as a decision rather than a box to add to a diagram. Begin with the workload and correctness requirement, choose the smallest viable mechanism, and define what evidence would make you change it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="questions-to-ask">Questions to ask<a href="https://stack-craft-eight.vercel.app/blog/2026/06/30/design-video-streaming#questions-to-ask" class="hash-link" aria-label="Direct link to Questions to ask" title="Direct link to Questions to ask" translate="no">​</a></h2>
<ul>
<li class="">What is the dominant request path?</li>
<li class="">Where is the unique bottleneck?</li>
<li class="">Which work can be asynchronous?</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-failure-mode">Common failure mode<a href="https://stack-craft-eight.vercel.app/blog/2026/06/30/design-video-streaming#common-failure-mode" class="hash-link" aria-label="Direct link to Common failure mode" title="Direct link to Common failure mode" translate="no">​</a></h2>
<p>The usual mistake is adopting the pattern without naming its operational cost or failure semantics. Record the decision, reason, alternative, consequence, owner, and the metric that signals reassessment. Then test the unhappy path—not only the successful request.</p>]]></content>
        <author>
            <name>Stackcraft</name>
        </author>
        <category label="Case Study" term="Case Study"/>
        <category label="Networking" term="Networking"/>
    </entry>
</feed>