<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Disaster-Recovery on IT Comparison</title><link>https://comparison.metacog.co.kr/tags/disaster-recovery/</link><description>Recent content in Disaster-Recovery on IT Comparison</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 06 Sep 2026 10:14:52 +0900</lastBuildDate><atom:link href="https://comparison.metacog.co.kr/tags/disaster-recovery/index.xml" rel="self" type="application/rss+xml"/><item><title>Active-Active vs Active-Passive: High-Availability Topologies Compared</title><link>https://comparison.metacog.co.kr/posts/2026-09-06-active-active-vs-active-passive-high-availability-topologies/</link><pubDate>Sun, 06 Sep 2026 10:14:52 +0900</pubDate><guid>https://comparison.metacog.co.kr/posts/2026-09-06-active-active-vs-active-passive-high-availability-topologies/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Both patterns keep a system running when a node fails, but they differ in whether every node is doing useful work all the time. &lt;strong class="kw"&gt;Active-Active&lt;/strong&gt; runs multiple nodes concurrently serving live traffic, while &lt;strong class="kw"&gt;Active-Passive&lt;/strong&gt; keeps a standby node idle until the primary fails. The choice affects utilization, cost, data consistency, and how much downtime you accept during failover.&lt;/p&gt;
&lt;h2 id="comparison-diagram"&gt;Comparison Diagram&lt;/h2&gt;
&lt;div class="compare-diagram"&gt;
&lt;svg viewBox="0 0 640 360" xmlns="http://www.w3.org/2000/svg"&gt;&lt;line x1="320" y1="20" x2="320" y2="340" style="stroke:var(--border)" stroke-width="1.5" stroke-dasharray="4 4"/&gt;&lt;text x="160" y="32" text-anchor="middle" style="fill:var(--primary)" font-size="16" font-weight="bold"&gt;Active-Active&lt;/text&gt;&lt;text x="480" y="32" text-anchor="middle" style="fill:var(--primary)" font-size="16" font-weight="bold"&gt;Active-Passive&lt;/text&gt;&lt;circle cx="160" cy="58" r="10" style="fill:none;stroke:var(--content)" stroke-width="1.5"/&gt;&lt;text x="160" y="62" text-anchor="middle" style="fill:var(--content)" font-size="11"&gt;C&lt;/text&gt;&lt;rect x="130" y="92" width="60" height="28" rx="4" style="fill:none;stroke:var(--content)" stroke-width="1.5"/&gt;&lt;text x="160" y="110" text-anchor="middle" style="fill:var(--content)" font-size="10"&gt;LB&lt;/text&gt;&lt;line x1="160" y1="68" x2="160" y2="92" style="stroke:var(--content)" stroke-width="1.5"/&gt;&lt;line x1="140" y1="120" x2="110" y2="160" style="stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;line x1="180" y1="120" x2="210" y2="160" style="stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;rect x="70" y="160" width="80" height="50" rx="6" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="110" y="189" text-anchor="middle" style="fill:var(--content)" font-size="12"&gt;Node 1&lt;/text&gt;&lt;rect x="170" y="160" width="80" height="50" rx="6" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="210" y="189" text-anchor="middle" style="fill:var(--content)" font-size="12"&gt;Node 2&lt;/text&gt;&lt;text x="160" y="235" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;both nodes serve live traffic&lt;/text&gt;&lt;text x="160" y="250" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;failure of one: LB reroutes instantly&lt;/text&gt;&lt;circle cx="480" cy="58" r="10" style="fill:none;stroke:var(--content)" stroke-width="1.5"/&gt;&lt;text x="480" y="62" text-anchor="middle" style="fill:var(--content)" font-size="11"&gt;C&lt;/text&gt;&lt;line x1="480" y1="68" x2="480" y2="158" style="stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;rect x="440" y="158" width="80" height="50" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="480" y="187" text-anchor="middle" style="fill:var(--content)" font-size="12"&gt;Active&lt;/text&gt;&lt;rect x="440" y="250" width="80" height="50" rx="6" style="fill:none;stroke:var(--border)" stroke-width="1.5" stroke-dasharray="5 4"/&gt;&lt;text x="480" y="279" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;Standby&lt;/text&gt;&lt;line x1="480" y1="208" x2="480" y2="250" style="stroke:var(--secondary)" stroke-width="1.5" stroke-dasharray="4 3"/&gt;&lt;text x="525" y="232" text-anchor="middle" style="fill:var(--secondary)" font-size="10"&gt;replication&lt;/text&gt;&lt;text x="480" y="322" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;on failure: promote standby&lt;/text&gt;&lt;text x="480" y="336" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;brief failover delay&lt;/text&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id="comparison-table"&gt;Comparison Table&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Active-Active&lt;/th&gt;
&lt;th&gt;Active-Passive&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Topology&lt;/td&gt;
&lt;td&gt;All nodes are equal peers running the same workload&lt;/td&gt;
&lt;td&gt;One primary node plus one or more idle standby nodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Traffic routing&lt;/td&gt;
&lt;td&gt;Load balancer distributes requests across every node&lt;/td&gt;
&lt;td&gt;All requests go to the single active node&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resource utilization&lt;/td&gt;
&lt;td&gt;Full capacity of every node used continuously&lt;/td&gt;
&lt;td&gt;Standby capacity sits reserved but unused until needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure detection&lt;/td&gt;
&lt;td&gt;Health checks pull the unhealthy node out of the LB pool&lt;/td&gt;
&lt;td&gt;Heartbeat or monitor detects primary is down&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failover behavior&lt;/td&gt;
&lt;td&gt;Near-instant; surviving nodes absorb load with no promotion step&lt;/td&gt;
&lt;td&gt;Standby must be promoted to primary, causing a brief outage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data consistency&lt;/td&gt;
&lt;td&gt;Requires conflict resolution or coordination across writable nodes&lt;/td&gt;
&lt;td&gt;Single writer at a time keeps consistency simple&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost efficiency&lt;/td&gt;
&lt;td&gt;No idle capacity; you pay for what&amp;rsquo;s used&lt;/td&gt;
&lt;td&gt;Pay for standby capacity that mostly sits idle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational complexity&lt;/td&gt;
&lt;td&gt;Higher: multi-master sync, conflict handling, split-brain risk&lt;/td&gt;
&lt;td&gt;Lower: simple primary/standby roles, single write path&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="key-differences"&gt;Key Differences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong class="kw"&gt;Active-Active&lt;/strong&gt; serves traffic from every node simultaneously; &lt;strong class="kw"&gt;Active-Passive&lt;/strong&gt; serves it from only one at a time&lt;/li&gt;
&lt;li&gt;Failover in Active-Active is near-instant since surviving nodes are already live, while Active-Passive needs a &lt;strong class="kw"&gt;promotion&lt;/strong&gt; step&lt;/li&gt;
&lt;li&gt;Active-Active fully utilizes hardware; Active-Passive leaves &lt;strong class="kw"&gt;standby capacity&lt;/strong&gt; idle as insurance&lt;/li&gt;
&lt;li&gt;Multi-writer setups need &lt;strong class="kw"&gt;conflict resolution&lt;/strong&gt;, whereas a single active writer avoids that complexity entirely&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-to-use-each"&gt;When to Use Each&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Active-Active&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Snapshot vs Backup: Point-in-Time Reference vs Independent Copy</title><link>https://comparison.metacog.co.kr/posts/2026-08-03-snapshot-vs-backup-point-in-time-reference-vs-independent-co/</link><pubDate>Mon, 03 Aug 2026 06:29:19 +0900</pubDate><guid>https://comparison.metacog.co.kr/posts/2026-08-03-snapshot-vs-backup-point-in-time-reference-vs-independent-co/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;A snapshot captures a volume&amp;rsquo;s state using &lt;strong class="kw"&gt;copy-on-write&lt;/strong&gt; pointers that still depend on the original data, while a backup creates a fully &lt;strong class="kw"&gt;independent copy&lt;/strong&gt; stored elsewhere. The distinction matters because snapshots are fast and space-efficient for short-term rollback, but only backups protect against loss or corruption of the source system itself.&lt;/p&gt;
&lt;h2 id="comparison-diagram"&gt;Comparison Diagram&lt;/h2&gt;
&lt;div class="compare-diagram"&gt;
&lt;svg viewBox="0 0 640 360" xmlns="http://www.w3.org/2000/svg"&gt;&lt;defs&gt;&lt;marker id="arrowA" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"&gt;&lt;path d="M0,0 L6,3 L0,6 z" style="fill:var(--compare-a)"/&gt;&lt;/marker&gt;&lt;marker id="arrowB" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"&gt;&lt;path d="M0,0 L6,3 L0,6 z" style="fill:var(--compare-b)"/&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;rect x="250" y="30" width="140" height="60" rx="4" style="fill:none;stroke:var(--border)" stroke-width="1.5"/&gt;&lt;text x="320" y="46" text-anchor="middle" style="fill:var(--content)" font-size="12"&gt;Source Volume&lt;/text&gt;&lt;rect x="271" y="55" width="18" height="18" style="fill:none;stroke:var(--border)" stroke-width="1.5"/&gt;&lt;rect x="295" y="55" width="18" height="18" style="fill:none;stroke:var(--border)" stroke-width="1.5"/&gt;&lt;rect x="319" y="55" width="18" height="18" style="fill:none;stroke:var(--border)" stroke-width="1.5"/&gt;&lt;rect x="343" y="55" width="18" height="18" style="fill:none;stroke:var(--border)" stroke-width="1.5"/&gt;&lt;line x1="300" y1="90" x2="170" y2="168" style="stroke:var(--compare-a)" stroke-width="2" stroke-dasharray="5,4" marker-end="url(#arrowA)"/&gt;&lt;text x="205" y="125" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;pointer (COW)&lt;/text&gt;&lt;line x1="340" y1="90" x2="470" y2="168" style="stroke:var(--compare-b)" stroke-width="2" marker-end="url(#arrowB)"/&gt;&lt;text x="430" y="125" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;full copy&lt;/text&gt;&lt;rect x="60" y="170" width="200" height="120" rx="6" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="160" y="197" text-anchor="middle" style="fill:var(--primary)" font-size="18" font-weight="bold"&gt;Snapshot&lt;/text&gt;&lt;text x="160" y="216" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;references source blocks&lt;/text&gt;&lt;rect x="115" y="233" width="18" height="18" style="fill:none;stroke:var(--compare-a)" stroke-dasharray="3,2" stroke-width="1.5"/&gt;&lt;rect x="139" y="233" width="18" height="18" style="fill:none;stroke:var(--compare-a)" stroke-dasharray="3,2" stroke-width="1.5"/&gt;&lt;rect x="163" y="233" width="18" height="18" style="fill:none;stroke:var(--compare-a)" stroke-dasharray="3,2" stroke-width="1.5"/&gt;&lt;rect x="187" y="233" width="18" height="18" style="fill:none;stroke:var(--compare-a)" stroke-dasharray="3,2" stroke-width="1.5"/&gt;&lt;text x="160" y="270" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;Same volume, low overhead&lt;/text&gt;&lt;text x="160" y="285" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;Invalid if source is lost&lt;/text&gt;&lt;rect x="380" y="170" width="200" height="120" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="480" y="197" text-anchor="middle" style="fill:var(--primary)" font-size="18" font-weight="bold"&gt;Backup&lt;/text&gt;&lt;text x="480" y="216" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;independent full copy&lt;/text&gt;&lt;rect x="435" y="233" width="18" height="18" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;rect x="459" y="233" width="18" height="18" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;rect x="483" y="233" width="18" height="18" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;rect x="507" y="233" width="18" height="18" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="480" y="270" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;Separate storage, survives loss&lt;/text&gt;&lt;text x="480" y="285" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;Slower, higher storage cost&lt;/text&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id="comparison-table"&gt;Comparison Table&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Snapshot&lt;/th&gt;
&lt;th&gt;Backup&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Primary purpose&lt;/td&gt;
&lt;td&gt;Quick rollback to a prior state&lt;/td&gt;
&lt;td&gt;Durable copy for disaster recovery and compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capture mechanism&lt;/td&gt;
&lt;td&gt;Copy-on-write or redirect-on-write pointers to existing blocks&lt;/td&gt;
&lt;td&gt;Full or incremental copy of data written to separate storage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage location&lt;/td&gt;
&lt;td&gt;Same storage system or volume as the source&lt;/td&gt;
&lt;td&gt;Separate system, often offsite or on a different medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependency on source&lt;/td&gt;
&lt;td&gt;Invalidated if the source volume is deleted or corrupted&lt;/td&gt;
&lt;td&gt;Independent copy, survives loss of the source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Creation speed and overhead&lt;/td&gt;
&lt;td&gt;Near-instant, minimal I/O impact&lt;/td&gt;
&lt;td&gt;Slower, with higher I/O, network, and storage cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retention and lifecycle&lt;/td&gt;
&lt;td&gt;Short-lived, few kept because storage grows with changes&lt;/td&gt;
&lt;td&gt;Long-term retention on a scheduled rotation policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recovery scope&lt;/td&gt;
&lt;td&gt;Instant rollback on the same system or volume&lt;/td&gt;
&lt;td&gt;Restore to a new or different system, file- or volume-level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure resilience&lt;/td&gt;
&lt;td&gt;Vulnerable to the same hardware or storage failure as the source&lt;/td&gt;
&lt;td&gt;Resilient to source failure or a site-wide disaster&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="key-differences"&gt;Key Differences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A snapshot stores &lt;strong class="kw"&gt;pointers&lt;/strong&gt; to existing blocks; a backup writes a full, separate copy of the data.&lt;/li&gt;
&lt;li&gt;Snapshots normally live on the &lt;strong class="kw"&gt;same storage&lt;/strong&gt; as the source; backups are placed on independent, often offsite media.&lt;/li&gt;
&lt;li&gt;Deleting the source volume can &lt;strong class="kw"&gt;invalidate&lt;/strong&gt; a snapshot, while a backup remains intact and restorable.&lt;/li&gt;
&lt;li&gt;Snapshots are created almost instantly with &lt;strong class="kw"&gt;low overhead&lt;/strong&gt;; backups take longer and consume more storage and bandwidth.&lt;/li&gt;
&lt;li&gt;Snapshots are typically kept briefly for rollback; backups follow a &lt;strong class="kw"&gt;long-term retention&lt;/strong&gt; policy for compliance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-to-use-each"&gt;When to Use Each&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Snapshot&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>