{"id":132611,"date":"2024-07-08T10:33:21","date_gmt":"2024-07-08T10:33:21","guid":{"rendered":"https:\/\/showbizztoday.com\/index.php\/2024\/07\/08\/enhancing-netflix-reliability-with-service-level-prioritized-load-shedding-by-netflix-technology-blog-jun-2024\/"},"modified":"2024-07-08T10:33:22","modified_gmt":"2024-07-08T10:33:22","slug":"enhancing-netflix-reliability-with-service-level-prioritized-load-shedding-by-netflix-technology-blog-jun-2024","status":"publish","type":"post","link":"https:\/\/showbizztoday.com\/index.php\/2024\/07\/08\/enhancing-netflix-reliability-with-service-level-prioritized-load-shedding-by-netflix-technology-blog-jun-2024\/","title":{"rendered":"Enhancing Netflix Reliability with Service-Level Prioritized Load Shedding | by Netflix Technology Blog | Jun, 2024"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div>\n<p id=\"2b2e\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">Without prioritized load-shedding, each user-initiated and prefetch availability drop when latency is injected. However, after including prioritized load-shedding, user-initiated requests preserve a 100% availability and solely prefetch requests are throttled.<\/p>\n<p id=\"cc2a\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">We have been able to roll this out to manufacturing and see the way it carried out within the wild!<\/p>\n<h2 id=\"d734\" class=\"qn of gt be og qo qp dx oj qq qr dz om nq qs qt qu nu qv qw qx ny qy qz ra rb bj\">Real-World Application and Results<\/h2>\n<p id=\"8504\" class=\"pw-post-body-paragraph nh ni gt nj b hr pa nl nm hu pb no np nq pc ns nt nu pd nw nx ny pe oa ob oc gm bj\">Netflix engineers work laborious to maintain our programs obtainable, and it was some time earlier than we had a manufacturing incident that examined the efficacy of our answer. A couple of months after deploying prioritized load shedding, we had an infrastructure outage at Netflix that impacted streaming for a lot of of our customers. Once the outage was fastened, we acquired a 12x spike in pre-fetch requests per second from Android gadgets, presumably as a result of there was a backlog of queued requests constructed up.<\/p>\n<figure class=\"pw px py pz qa pn pt pu paragraph-image\">\n<div role=\"button\" tabindex=\"0\" class=\"qd qe fi qf bg qg\">\n<div class=\"pt pu rq\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/0*0AdiUnX8fdinJTNR 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/0*0AdiUnX8fdinJTNR 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/0*0AdiUnX8fdinJTNR 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/0*0AdiUnX8fdinJTNR 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/0*0AdiUnX8fdinJTNR 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/0*0AdiUnX8fdinJTNR 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/0*0AdiUnX8fdinJTNR 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" type=\"image\/webp\"\/><source data-testid=\"og\" srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/0*0AdiUnX8fdinJTNR 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/0*0AdiUnX8fdinJTNR 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/0*0AdiUnX8fdinJTNR 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/0*0AdiUnX8fdinJTNR 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/0*0AdiUnX8fdinJTNR 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/0*0AdiUnX8fdinJTNR 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/0*0AdiUnX8fdinJTNR 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\"\/><img alt=\"\" class=\"bg mo qh c\" width=\"700\" height=\"389\" loading=\"lazy\" role=\"presentation\"\/><\/picture><\/div>\n<\/div><figcaption class=\"qi fe qj pt pu qk ql be b bf z dt\"><em class=\"qm\">Spike in Android pre-fetch RPS<\/em><\/figcaption><\/figure>\n<p id=\"d570\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">This may have resulted in a second outage as our programs weren\u2019t scaled to deal with this site visitors spike. Did prioritized load-shedding in PlayAPI assist us right here?<\/p>\n<p id=\"8fbe\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">Yes! While the provision for prefetch requests dropped as little as 20%, the provision for user-initiated requests was &gt; 99.4% as a consequence of prioritized load-shedding.<\/p>\n<figure class=\"pw px py pz qa pn pt pu paragraph-image\">\n<div role=\"button\" tabindex=\"0\" class=\"qd qe fi qf bg qg\">\n<div class=\"pt pu rr\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/0*gVNG6nlvDevP-53B 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/0*gVNG6nlvDevP-53B 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/0*gVNG6nlvDevP-53B 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/0*gVNG6nlvDevP-53B 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/0*gVNG6nlvDevP-53B 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/0*gVNG6nlvDevP-53B 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/0*gVNG6nlvDevP-53B 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" type=\"image\/webp\"\/><source data-testid=\"og\" srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/0*gVNG6nlvDevP-53B 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/0*gVNG6nlvDevP-53B 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/0*gVNG6nlvDevP-53B 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/0*gVNG6nlvDevP-53B 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/0*gVNG6nlvDevP-53B 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/0*gVNG6nlvDevP-53B 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/0*gVNG6nlvDevP-53B 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\"\/><img alt=\"\" class=\"bg mo qh c\" width=\"700\" height=\"618\" loading=\"lazy\" role=\"presentation\"\/><\/picture><\/div>\n<\/div><figcaption class=\"qi fe qj pt pu qk ql be b bf z dt\"><em class=\"qm\">Availability of pre-fetch and user-initiated requests<\/em><\/figcaption><\/figure>\n<p id=\"e7c2\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">At one level we have been throttling greater than 50% of all requests however the availability of user-initiated requests continued to be &gt; 99.4%.<\/p>\n<p id=\"bbc2\" class=\"pw-post-body-paragraph nh ni gt nj b hr pa nl nm hu pb no np nq pc ns nt nu pd nw nx ny pe oa ob oc gm bj\">Based on the success of this method, now we have created an inner library to allow providers to carry out prioritized load shedding primarily based on pluggable utilization measures, with a number of precedence ranges.<\/p>\n<p id=\"5062\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">Unlike API gateway, which must deal with a big quantity of requests with various priorities, most microservices usually obtain requests with only some distinct priorities. To preserve consistency throughout completely different providers, now we have launched 4 predefined precedence buckets impressed by the <a class=\"af od\" href=\"https:\/\/linux.die.net\/man\/8\/tc-prio\" rel=\"noopener ugc nofollow\" target=\"_blank\">Linux tc-prio ranges<\/a>:<\/p>\n<ul class=\"\">\n<li id=\"b0ff\" class=\"nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc re pg ph bj\"><strong class=\"nj gu\">CRITICAL<\/strong>: Affect core performance \u2014 These won&#8217;t ever be shed if we aren&#8217;t in full failure.<\/li>\n<li id=\"36f6\" class=\"nh ni gt nj b hr pi nl nm hu pj no np nq pk ns nt nu pl nw nx ny pm oa ob oc re pg ph bj\"><strong class=\"nj gu\">DEGRADED<\/strong>: Affect person expertise \u2014 These shall be progressively shed because the load will increase.<\/li>\n<li id=\"21ce\" class=\"nh ni gt nj b hr pi nl nm hu pj no np nq pk ns nt nu pl nw nx ny pm oa ob oc re pg ph bj\"><strong class=\"nj gu\">BEST_EFFORT<\/strong>: Do not have an effect on the person \u2014 These shall be responded to in a greatest effort style and could also be shed progressively in regular operation.<\/li>\n<li id=\"2f38\" class=\"nh ni gt nj b hr pi nl nm hu pj no np nq pk ns nt nu pl nw nx ny pm oa ob oc re pg ph bj\"><strong class=\"nj gu\">BULK<\/strong>: Background work, count on these to be routinely shed.<\/li>\n<\/ul>\n<p id=\"0a3c\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">Services can both select the upstream consumer\u2019s precedence <em class=\"rs\">or<\/em> map incoming requests to one in every of these precedence buckets by analyzing numerous request attributes, equivalent to HTTP headers or the request physique, for extra exact management. Here is an instance of how providers can map requests to precedence buckets:<\/p>\n<pre class=\"pw px py pz qa rg rh ri bo rj ba bj\"><span id=\"a188\" class=\"rk of gt rh b bf rl rm l rn ro\">ResourceLimiterRequestPriorityProvider requestPriorityProvider() {<br\/>return contextProvider -&gt; {<br\/>if (contextProvider.getRequest().isCritical()) {<br\/>return PriorityBucket.CRITICAL;<br\/>} else if (contextProvider.getRequest().isHighPriority()) {<br\/>return PriorityBucket.DEGRADED;<br\/>} else if (contextProvider.getRequest().isMediumPriority()) {<br\/>return PriorityBucket.BEST_EFFORT;<br\/>} else {<br\/>return PriorityBucket.BULK;<br\/>}<br\/>};<br\/>}<\/span><\/pre>\n<h2 id=\"46c9\" class=\"qn of gt be og qo qp dx oj qq qr dz om nq qs qt qu nu qv qw qx ny qy qz ra rb bj\">Generic CPU primarily based load-shedding<\/h2>\n<p id=\"6762\" class=\"pw-post-body-paragraph nh ni gt nj b hr pa nl nm hu pb no np nq pc ns nt nu pd nw nx ny pe oa ob oc gm bj\">Most providers at Netflix autoscale on CPU utilization, so it&#8217;s a pure measure of system load to tie into the prioritized load shedding framework. Once a request is mapped to a precedence bucket, providers can decide when to shed site visitors from a specific bucket primarily based on CPU utilization. In order to keep up the sign to autoscaling that scaling is required, prioritized shedding solely begins shedding load <em class=\"rs\">after<\/em> hitting the goal CPU utilization, and as system load will increase, extra vital site visitors is progressively shed in an try to keep up person expertise.<\/p>\n<p id=\"fc7c\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">For instance, if a cluster targets a 60% CPU utilization for auto-scaling, it may be configured to begin shedding requests when the CPU utilization exceeds this threshold. When a site visitors spike causes the cluster\u2019s CPU utilization to considerably surpass this threshold, it should step by step shed low-priority site visitors to preserve sources for high-priority site visitors. This method additionally permits extra time for auto-scaling so as to add extra situations to the cluster. Once extra situations are added, CPU utilization will lower, and low-priority site visitors will resume being served usually.<\/p>\n<figure class=\"pw px py pz qa pn pt pu paragraph-image\">\n<div class=\"pt pu rt\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/0*sdKTOYaSQ_tEjE8r 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/0*sdKTOYaSQ_tEjE8r 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/0*sdKTOYaSQ_tEjE8r 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/0*sdKTOYaSQ_tEjE8r 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/0*sdKTOYaSQ_tEjE8r 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/0*sdKTOYaSQ_tEjE8r 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1274\/format:webp\/0*sdKTOYaSQ_tEjE8r 1274w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 637px\" type=\"image\/webp\"\/><source data-testid=\"og\" srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/0*sdKTOYaSQ_tEjE8r 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/0*sdKTOYaSQ_tEjE8r 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/0*sdKTOYaSQ_tEjE8r 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/0*sdKTOYaSQ_tEjE8r 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/0*sdKTOYaSQ_tEjE8r 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/0*sdKTOYaSQ_tEjE8r 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1274\/0*sdKTOYaSQ_tEjE8r 1274w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 637px\"\/><img alt=\"\" class=\"bg mo qh c\" width=\"637\" height=\"322\" loading=\"lazy\" role=\"presentation\"\/><\/picture><\/div><figcaption class=\"qi fe qj pt pu qk ql be b bf z dt\"><em class=\"qm\">Percentage of requests (Y-axis) being load-shed primarily based on CPU utilization (X-axis) for various precedence buckets<\/em><\/figcaption><\/figure>\n<h2 id=\"df97\" class=\"qn of gt be og qo qp dx oj qq qr dz om nq qs qt qu nu qv qw qx ny qy qz ra rb bj\">Experiments with CPU primarily based load-shedding<\/h2>\n<p id=\"afe6\" class=\"pw-post-body-paragraph nh ni gt nj b hr pa nl nm hu pb no np nq pc ns nt nu pd nw nx ny pe oa ob oc gm bj\">We ran a sequence of experiments sending a big request quantity at a service which usually targets 45% CPU for auto scaling however which was prevented from scaling up for the aim of monitoring CPU load shedding below excessive load circumstances. The situations have been configured to shed noncritical site visitors after 60% CPU and significant site visitors after 80%.<\/p>\n<p id=\"0fe9\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">As RPS was dialed up previous 6x the autoscale quantity, the service was capable of shed first noncritical after which vital requests. Latency remained inside cheap limits all through, and profitable RPS throughput remained steady.<\/p>\n<figure class=\"pw px py pz qa pn pt pu paragraph-image\">\n<div role=\"button\" tabindex=\"0\" class=\"qd qe fi qf bg qg\">\n<div class=\"pt pu ru\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/0*Wr6bJzQVf3dV4clf 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/0*Wr6bJzQVf3dV4clf 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/0*Wr6bJzQVf3dV4clf 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/0*Wr6bJzQVf3dV4clf 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/0*Wr6bJzQVf3dV4clf 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/0*Wr6bJzQVf3dV4clf 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/0*Wr6bJzQVf3dV4clf 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" type=\"image\/webp\"\/><source data-testid=\"og\" srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/0*Wr6bJzQVf3dV4clf 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/0*Wr6bJzQVf3dV4clf 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/0*Wr6bJzQVf3dV4clf 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/0*Wr6bJzQVf3dV4clf 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/0*Wr6bJzQVf3dV4clf 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/0*Wr6bJzQVf3dV4clf 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/0*Wr6bJzQVf3dV4clf 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\"\/><img alt=\"\" class=\"bg mo qh c\" width=\"700\" height=\"465\" loading=\"lazy\" role=\"presentation\"\/><\/picture><\/div>\n<\/div><figcaption class=\"qi fe qj pt pu qk ql be b bf z dt\"><em class=\"qm\">Experimental conduct of CPU primarily based load-shedding utilizing artificial site visitors.<\/em><\/figcaption><\/figure>\n<figure class=\"pw px py pz qa pn pt pu paragraph-image\">\n<div role=\"button\" tabindex=\"0\" class=\"qd qe fi qf bg qg\">\n<div class=\"pt pu rv\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/0*DZCzE_AAi2cJXRRr 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/0*DZCzE_AAi2cJXRRr 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/0*DZCzE_AAi2cJXRRr 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/0*DZCzE_AAi2cJXRRr 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/0*DZCzE_AAi2cJXRRr 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/0*DZCzE_AAi2cJXRRr 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/0*DZCzE_AAi2cJXRRr 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" type=\"image\/webp\"\/><source data-testid=\"og\" srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/0*DZCzE_AAi2cJXRRr 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/0*DZCzE_AAi2cJXRRr 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/0*DZCzE_AAi2cJXRRr 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/0*DZCzE_AAi2cJXRRr 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/0*DZCzE_AAi2cJXRRr 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/0*DZCzE_AAi2cJXRRr 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/0*DZCzE_AAi2cJXRRr 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\"\/><img alt=\"\" class=\"bg mo qh c\" width=\"700\" height=\"574\" loading=\"lazy\" role=\"presentation\"\/><\/picture><\/div>\n<\/div><figcaption class=\"qi fe qj pt pu qk ql be b bf z dt\"><em class=\"qm\">P99 latency stayed inside an inexpensive vary all through the experiment, whilst RPS surpassed 6x the autoscale goal.<\/em><\/figcaption><\/figure>\n<h2 id=\"ffc7\" class=\"qn of gt be og qo qp dx oj qq qr dz om nq qs qt qu nu qv qw qx ny qy qz ra rb bj\">Anti-patterns with load-shedding<\/h2>\n<p id=\"6712\" class=\"pw-post-body-paragraph nh ni gt nj b hr pa nl nm hu pb no np nq pc ns nt nu pd nw nx ny pe oa ob oc gm bj\"><strong class=\"nj gu\">Anti-pattern 1 \u2014 No shedding<\/strong><\/p>\n<p id=\"3332\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">In the above graphs, the limiter does a superb job holding latency low for the profitable requests. If there was no shedding right here, we\u2019d see latency enhance for all requests, as a substitute of a quick failure in some requests that may be retried. Further, this can lead to a loss of life spiral the place one occasion turns into unhealthy, leading to extra load on different situations, leading to all situations changing into unhealthy earlier than auto-scaling can kick in.<\/p>\n<figure class=\"pw px py pz qa pn pt pu paragraph-image\">\n<div class=\"pt pu cg\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/0*Bp5AKoNtQOfHaExB 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/0*Bp5AKoNtQOfHaExB 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/0*Bp5AKoNtQOfHaExB 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/0*Bp5AKoNtQOfHaExB 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/0*Bp5AKoNtQOfHaExB 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/0*Bp5AKoNtQOfHaExB 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1360\/format:webp\/0*Bp5AKoNtQOfHaExB 1360w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 680px\" type=\"image\/webp\"\/><source data-testid=\"og\" srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/0*Bp5AKoNtQOfHaExB 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/0*Bp5AKoNtQOfHaExB 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/0*Bp5AKoNtQOfHaExB 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/0*Bp5AKoNtQOfHaExB 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/0*Bp5AKoNtQOfHaExB 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/0*Bp5AKoNtQOfHaExB 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1360\/0*Bp5AKoNtQOfHaExB 1360w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 680px\"\/><img alt=\"\" class=\"bg mo qh c\" width=\"680\" height=\"558\" loading=\"lazy\" role=\"presentation\"\/><\/picture><\/div>\n<\/figure>\n<figure class=\"pw px py pz qa pn pt pu paragraph-image\">\n<div class=\"pt pu cg\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/0*WPvKjlopcBGixDGB 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/0*WPvKjlopcBGixDGB 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/0*WPvKjlopcBGixDGB 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/0*WPvKjlopcBGixDGB 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/0*WPvKjlopcBGixDGB 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/0*WPvKjlopcBGixDGB 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1360\/format:webp\/0*WPvKjlopcBGixDGB 1360w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 680px\" type=\"image\/webp\"\/><source data-testid=\"og\" srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/0*WPvKjlopcBGixDGB 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/0*WPvKjlopcBGixDGB 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/0*WPvKjlopcBGixDGB 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/0*WPvKjlopcBGixDGB 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/0*WPvKjlopcBGixDGB 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/0*WPvKjlopcBGixDGB 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1360\/0*WPvKjlopcBGixDGB 1360w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 680px\"\/><img alt=\"\" class=\"bg mo qh c\" width=\"680\" height=\"597\" loading=\"lazy\" role=\"presentation\"\/><\/picture><\/div><figcaption class=\"qi fe qj pt pu qk ql be b bf z dt\"><em class=\"qm\">No load-shedding: In the absence of load-shedding, elevated latency can degrade all requests as a substitute of rejecting some requests (that may be retried), and might make situations unhealthy<\/em><\/figcaption><\/figure>\n<p id=\"34a6\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\"><strong class=\"nj gu\">Anti-pattern 2 \u2014 Congestive failure<\/strong><\/p>\n<p id=\"2d12\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">Another anti-pattern to be careful for is congestive failure or shedding too aggressively. If the load-shedding is because of a rise in site visitors, the profitable RPS mustn&#8217;t drop after load-shedding. Here is an instance of what congestive failure seems to be like:<\/p>\n<figure class=\"pw px py pz qa pn pt pu paragraph-image\">\n<div role=\"button\" tabindex=\"0\" class=\"qd qe fi qf bg qg\">\n<div class=\"pt pu rw\"><picture><source srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/format:webp\/0*gPGs2BJ1Oxu9O7TK 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/0*gPGs2BJ1Oxu9O7TK 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/format:webp\/0*gPGs2BJ1Oxu9O7TK 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/format:webp\/0*gPGs2BJ1Oxu9O7TK 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/format:webp\/0*gPGs2BJ1Oxu9O7TK 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/format:webp\/0*gPGs2BJ1Oxu9O7TK 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/format:webp\/0*gPGs2BJ1Oxu9O7TK 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" type=\"image\/webp\"\/><source data-testid=\"og\" srcset=\"https:\/\/miro.medium.com\/v2\/resize:fit:640\/0*gPGs2BJ1Oxu9O7TK 640w, https:\/\/miro.medium.com\/v2\/resize:fit:720\/0*gPGs2BJ1Oxu9O7TK 720w, https:\/\/miro.medium.com\/v2\/resize:fit:750\/0*gPGs2BJ1Oxu9O7TK 750w, https:\/\/miro.medium.com\/v2\/resize:fit:786\/0*gPGs2BJ1Oxu9O7TK 786w, https:\/\/miro.medium.com\/v2\/resize:fit:828\/0*gPGs2BJ1Oxu9O7TK 828w, https:\/\/miro.medium.com\/v2\/resize:fit:1100\/0*gPGs2BJ1Oxu9O7TK 1100w, https:\/\/miro.medium.com\/v2\/resize:fit:1400\/0*gPGs2BJ1Oxu9O7TK 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\"\/><img alt=\"\" class=\"bg mo qh c\" width=\"700\" height=\"570\" loading=\"lazy\" role=\"presentation\"\/><\/picture><\/div>\n<\/div><figcaption class=\"qi fe qj pt pu qk ql be b bf z dt\"><em class=\"qm\">Congestive failure: After 16:57, the service begins rejecting most requests and isn&#8217;t capable of maintain a profitable 240 RPS that it was earlier than load-shedding kicked in. This may be seen in fastened concurrency limiters or when load-shedding consumes an excessive amount of CPU stopping some other work from being completed<\/em><\/figcaption><\/figure>\n<p id=\"8f93\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">We can see within the <strong class=\"nj gu\">Experiments with CPU primarily based load-shedding<\/strong> part above that our load-shedding implementation avoids each these anti-patterns by holding latency low and sustaining as a lot profitable RPS throughout load-shedding as earlier than.<\/p>\n<p id=\"cadc\" class=\"pw-post-body-paragraph nh ni gt nj b hr pa nl nm hu pb no np nq pc ns nt nu pd nw nx ny pe oa ob oc gm bj\">Some providers usually are not CPU-bound however as a substitute are IO-bound by backing providers or datastores that may apply again strain through elevated latency when they&#8217;re overloaded both in compute or in storage capability. For these providers we re-use the prioritized load shedding strategies, however we introduce new utilization measures to feed into the shedding logic. Our preliminary implementation helps two types of latency primarily based shedding along with customary adaptive concurrency limiters (themselves a measure of common latency):<\/p>\n<ol class=\"\">\n<li id=\"48b6\" class=\"nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc pf pg ph bj\">The service can specify per-endpoint goal and most latencies, which permit the service to shed when the service is abnormally sluggish no matter backend.<\/li>\n<li id=\"ece4\" class=\"nh ni gt nj b hr pi nl nm hu pj no np nq pk ns nt nu pl nw nx ny pm oa ob oc pf pg ph bj\">The Netflix storage providers operating on the <a class=\"af od\" href=\"https:\/\/netflixtechblog.medium.com\/data-gateway-a-platform-for-growing-and-protecting-the-data-tier-f1ed8db8f5c6\" rel=\"noopener\" target=\"_blank\">Data Gateway<\/a> return noticed storage goal and max latency SLO utilization, permitting providers to shed once they overload their allotted storage capability.<\/li>\n<\/ol>\n<p id=\"ace0\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">These utilization measures present early warning indicators {that a} service is producing an excessive amount of load to a backend, and permit it to shed low precedence work earlier than it overwhelms that backend. The most important benefit of those strategies over concurrency limits alone is that they require much less tuning as our providers already should preserve tight latency service-level-objectives (SLOs), for instance a p50 &lt; 10ms and p100 &lt; 500ms. So, rephrasing these current SLOs as utilizations permits us to shed low precedence work early to stop additional latency influence to excessive precedence work. At the identical time, the system <em class=\"rs\">will settle for as a lot work as it could actually<\/em> whereas sustaining SLO\u2019s.<\/p>\n<p id=\"3a01\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">To create these utilization measures, we rely what number of requests are processed <em class=\"rs\">slower<\/em> than our goal and most latency aims, and emit the proportion of requests failing to satisfy these latency targets. For instance, our KeyValue storage service gives a 10ms goal with 500ms max latency for every namespace, and all purchasers obtain utilization measures per information namespace to feed into their prioritized load shedding. These measures appear to be:<\/p>\n<pre class=\"pw px py pz qa rg rh ri bo rj ba bj\"><span id=\"cc68\" class=\"rk of gt rh b bf rl rm l rn ro\">utilization(namespace) = {<br\/>total = 12<br\/>latency = {<br\/>slo_target = 12,<br\/>slo_max = 0<br\/>}<br\/>system = {<br\/>storage = 17,<br\/>compute = 10,<br\/>}<br\/>}<\/span><\/pre>\n<p id=\"d8cd\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">In this case, 12% of requests are slower than the 10ms goal, 0% are slower than the 500ms max latency (timeout), and 17% of allotted storage is utilized. Different use circumstances seek the advice of completely different utilizations of their prioritized shedding, for instance batches that write information day by day might get shed when system storage utilization is approaching capability as writing extra information would create additional instability.<\/p>\n<p id=\"6c98\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">An instance the place the latency utilization is beneficial is for one in every of our vital file origin providers which accepts writes of latest recordsdata within the AWS cloud and acts as an origin (serves reads) for these recordsdata to our Open Connect CDN infrastructure. Writes are essentially the most vital and may by no means be shed by the service, however when the backing datastore is getting overloaded, it&#8217;s cheap to progressively shed reads to recordsdata that are much less vital to the CDN as it could actually retry these reads and they don&#8217;t have an effect on the product expertise.<\/p>\n<p id=\"6791\" class=\"pw-post-body-paragraph nh ni gt nj b hr nk nl nm hu nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc gm bj\">To obtain this aim, the origin service configured a KeyValue latency primarily based limiter that begins shedding reads to recordsdata that are much less vital to the CDN when the datastore stories a goal latency utilization exceeding 40%. We then stress examined the system by producing over 50Gbps of learn site visitors, a few of it to excessive precedence recordsdata and a few of it to low precedence recordsdata:<\/p>\n<\/div>\n<p>[ad_2]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] Without prioritized load-shedding, each user-initiated and prefetch availability drop when latency is injected. However, after including prioritized load-shedding, user-initiated requests preserve a 100% availability and solely prefetch requests are throttled. We have been able to roll this out to manufacturing and see the way it carried out within the wild! Real-World Application and Results [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":132613,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[37],"tags":[955,5615,5621,5619,115,5618,5616,5617,5620,4337],"class_list":{"0":"post-132611","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-netflix","8":"tag-blog","9":"tag-enhancing","10":"tag-jun","11":"tag-load","12":"tag-netflix","13":"tag-prioritized","14":"tag-reliability","15":"tag-servicelevel","16":"tag-shedding","17":"tag-technology"},"_links":{"self":[{"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/posts\/132611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/comments?post=132611"}],"version-history":[{"count":0,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/posts\/132611\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/media\/132613"}],"wp:attachment":[{"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/media?parent=132611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/categories?post=132611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/tags?post=132611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}