<?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>Load-Shedding on IT Comparison</title><link>https://comparison.metacog.co.kr/tags/load-shedding/</link><description>Recent content in Load-Shedding on IT Comparison</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 06 Sep 2026 10:14:11 +0900</lastBuildDate><atom:link href="https://comparison.metacog.co.kr/tags/load-shedding/index.xml" rel="self" type="application/rss+xml"/><item><title>Load Shedding vs Request Completion: Rejecting Early vs Finishing In-Flight Work</title><link>https://comparison.metacog.co.kr/posts/2026-09-06-load-shedding-vs-request-completion-rejecting-early-vs-finis/</link><pubDate>Sun, 06 Sep 2026 10:14:11 +0900</pubDate><guid>https://comparison.metacog.co.kr/posts/2026-09-06-load-shedding-vs-request-completion-rejecting-early-vs-finis/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;When a service is overloaded, it must choose between two competing policies: &lt;strong class="kw"&gt;load shedding&lt;/strong&gt;, which rejects excess requests at the door before they consume resources, and &lt;strong class="kw"&gt;request completion&lt;/strong&gt;, which guarantees every admitted request runs to its natural end. The choice determines whether overload shows up as explicit client-visible rejections or as growing queues and degraded latency for everyone still being served.&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="50" x2="320" y2="320" style="stroke:var(--border)" stroke-width="1" stroke-dasharray="4,4"/&gt;&lt;text x="160" y="30" text-anchor="middle" style="fill:var(--primary)" font-size="18" font-weight="bold"&gt;Load Shedding&lt;/text&gt;&lt;text x="480" y="30" text-anchor="middle" style="fill:var(--primary)" font-size="18" font-weight="bold"&gt;Request Completion&lt;/text&gt;&lt;line x1="20" y1="80" x2="95" y2="80" style="stroke:var(--content)" stroke-width="1.5"/&gt;&lt;line x1="20" y1="130" x2="95" y2="130" style="stroke:var(--content)" stroke-width="1.5"/&gt;&lt;line x1="20" y1="180" x2="95" y2="180" style="stroke:var(--content)" stroke-width="1.5"/&gt;&lt;line x1="20" y1="230" x2="95" y2="230" style="stroke:var(--content)" stroke-width="1.5"/&gt;&lt;rect x="105" y="60" width="30" height="200" style="fill:none;stroke:var(--content)" stroke-width="1.5" stroke-dasharray="3,3"/&gt;&lt;text x="120" y="52" text-anchor="middle" style="fill:var(--content)" font-size="10"&gt;gate&lt;/text&gt;&lt;line x1="135" y1="80" x2="200" y2="80" style="stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;line x1="135" y1="130" x2="200" y2="130" style="stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;rect x="200" y="65" width="90" height="90" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="245" y="115" text-anchor="middle" style="fill:var(--content)" font-size="12"&gt;Accepted&lt;/text&gt;&lt;line x1="112" y1="173" x2="128" y2="187" style="stroke:var(--secondary)" stroke-width="2"/&gt;&lt;line x1="112" y1="187" x2="128" y2="173" style="stroke:var(--secondary)" stroke-width="2"/&gt;&lt;line x1="112" y1="223" x2="128" y2="237" style="stroke:var(--secondary)" stroke-width="2"/&gt;&lt;line x1="112" y1="237" x2="128" y2="223" style="stroke:var(--secondary)" stroke-width="2"/&gt;&lt;text x="150" y="210" style="fill:var(--secondary)" font-size="11"&gt;shed (503)&lt;/text&gt;&lt;text x="160" y="300" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;Rejects excess before admission&lt;/text&gt;&lt;line x1="325" y1="100" x2="345" y2="100" style="stroke:var(--content)" stroke-width="1.5"/&gt;&lt;line x1="325" y1="160" x2="345" y2="160" style="stroke:var(--content)" stroke-width="1.5"/&gt;&lt;line x1="325" y1="220" x2="345" y2="220" style="stroke:var(--content)" stroke-width="1.5"/&gt;&lt;rect x="345" y="70" width="70" height="180" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="380" y="62" text-anchor="middle" style="fill:var(--content)" font-size="10"&gt;admitted&lt;/text&gt;&lt;line x1="415" y1="160" x2="440" y2="160" style="stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;rect x="440" y="100" width="80" height="120" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="480" y="92" text-anchor="middle" style="fill:var(--content)" font-size="10"&gt;in-flight&lt;/text&gt;&lt;line x1="520" y1="160" x2="540" y2="160" style="stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;circle cx="575" cy="160" r="28" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;polyline points="562,160 572,170 590,145" style="fill:none;stroke:var(--compare-b)" stroke-width="2.5"/&gt;&lt;text x="575" y="122" text-anchor="middle" style="fill:var(--primary)" font-size="11"&gt;complete&lt;/text&gt;&lt;text x="480" y="300" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;Every admitted request runs to completion&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;Load Shedding&lt;/th&gt;
&lt;th&gt;Request Completion&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lifecycle stage&lt;/td&gt;
&lt;td&gt;Applied at admission, before a request enters processing&lt;/td&gt;
&lt;td&gt;Applied after admission, to work already in flight&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trigger&lt;/td&gt;
&lt;td&gt;Fires when queue depth, CPU, or latency crosses an overload threshold&lt;/td&gt;
&lt;td&gt;Is the default behavior for any request that was accepted, regardless of load&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resource cost of the decision&lt;/td&gt;
&lt;td&gt;Cheap — rejects with a fast, minimal-work response&lt;/td&gt;
&lt;td&gt;Expensive — the request&amp;rsquo;s resources are already committed and must be paid out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client-facing outcome&lt;/td&gt;
&lt;td&gt;Explicit rejection (e.g. HTTP 503), client must retry later&lt;/td&gt;
&lt;td&gt;Eventual success or failure on the request&amp;rsquo;s own merits, no artificial cutoff&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Effect on accepted traffic&lt;/td&gt;
&lt;td&gt;Protects tail latency for accepted requests by removing excess load&lt;/td&gt;
&lt;td&gt;Risks rising tail latency and queueing as accepted work competes for the same resources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prioritization&lt;/td&gt;
&lt;td&gt;Can selectively drop low-priority or cheap-to-reject traffic first&lt;/td&gt;
&lt;td&gt;Typically processes admitted work FIFO, with no mid-flight reordering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure mode if misapplied&lt;/td&gt;
&lt;td&gt;Too aggressive shedding rejects healthy capacity and wastes headroom&lt;/td&gt;
&lt;td&gt;No shedding at all leads to resource exhaustion and cascading failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implementation layer&lt;/td&gt;
&lt;td&gt;Load balancer, API gateway, or admission-control middleware&lt;/td&gt;
&lt;td&gt;Service handler or business logic that owns the request once accepted&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;Load shedding acts at the front door, before &lt;strong class="kw"&gt;admission&lt;/strong&gt;; completion policy governs work already in-flight.&lt;/li&gt;
&lt;li&gt;Shedding trades a guaranteed rejection for protecting &lt;strong class="kw"&gt;tail latency&lt;/strong&gt; of everything else being served.&lt;/li&gt;
&lt;li&gt;Completing every accepted request avoids wasting &lt;strong class="kw"&gt;sunk cost&lt;/strong&gt; already spent, but risks resource exhaustion under sustained overload.&lt;/li&gt;
&lt;li&gt;Shedding can prioritize which traffic to drop, while completion is typically &lt;strong class="kw"&gt;FIFO&lt;/strong&gt; once work is admitted.&lt;/li&gt;
&lt;li&gt;Over-aggressive shedding causes false rejections; refusing to shed at all invites &lt;strong class="kw"&gt;cascading failure&lt;/strong&gt;.&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;Load Shedding&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>