为什么Netflix的负载卸载技术被誉为行业奇迹?流量网关预取

点击下方“JavaEdge”,选择“设为星标”

0引言

1Netflix负载丢弃的演进

最初的优先级负载丢弃方法是在ZuulAPI网关层实现的。该系统能够有效管理不同类型的网络流量,确保关键的播放请求优先于不太关键的遥测流量。

在此基础上,我们认识到需要在架构的更深层次——具体到服务层——应用类似的优先级逻辑,在同一服务中对不同类型的请求赋予不同的优先级。在服务层以及边缘API网关同时应用这些技术的优势包括:

2服务级优先级负载丢弃的引入

PlayAPI是视频流控制平面上的一个关键后台服务,负责处理设备发起的播放清单和许可证请求,这些请求是启动播放所必需的。我们根据关键程度将这些请求分为两类:

用户浏览内容时Netflix在Chrome上向PlayAPI发出的预取请求

2.1问题

为了应对流量高峰、高后端延迟或后端服务扩展不足的情况,PlayAPI过去使用并发限制器来限制请求,这会同时减少用户发起请求和预取请求的可用性。这种方法存在以下问题:

将关键请求和非关键请求分片到单独的集群是一个选项,这可以解决问题1,并在两种请求类型之间提供故障隔离,但其计算成本更高。分片的另一个缺点是增加了一些操作开销——工程师需要确保CI/CD、自动扩展、指标和警报针对新集群正确配置。

选项1—无隔离

选项2—隔离但计算成本更高

2.2我们的解决方案

我们在PlayAPI中实现了一个并发限制器,该限制器在不物理分片两个请求处理程序的情况下优先处理用户发起请求。这种机制使用了开源Netflix/concurrency-limitsJava库的分区功能。我们在限制器中创建了两个分区:

选项3—单集群优先级负载丢弃提供应用级隔离且计算成本更低。每个实例处理两种请求类型,并具有一个动态调整大小的分区,确保预取请求仅使用多余容量。必要时,用户发起请求可以“借用”预取容量。

分区限制器被配置为一个预处理ServletFilter,它通过设备发送的HTTP头确定请求的关键性,从而避免了读取和解析被拒绝请求的请求体的需要。这确保了限制器本身不会成为瓶颈,并且可以有效拒绝请求,同时使用最少的CPU。例如,该过滤器可以初始化如下:

Filterfilter=newConcurrencyLimitServletFilter(newServletLimiterBuilder().named("playapi").partitionByHeader("X-Netflix.Request-Name").partition("user-initiated",1.0).partition("pre-fetch",0.0).build());

需要注意的是,在稳定状态下,没有限流,优先级对预取请求的处理没有任何影响。优先级机制仅在服务器达到并发限制并需要拒绝请求时启动。

2.3测试

为了验证我们的负载削减是否按预期工作,我们使用了故障注入测试,在预取调用中注入了2秒的延迟,这些调用的典型p99延迟小于200毫秒。故障被注入到一个基线实例中,该实例有常规的负载削减,还有一个金丝雀实例中,有优先级的负载削减。PlayAPI调用的一些内部服务使用单独的集群来处理用户发起的和预取请求,并使预取集群运行得更热。这个测试案例模拟了一个预取集群对于下游服务正在经历高延迟的场景。

基线—没有优先级负载削减。预取和用户发起的都看到了可用性的同等下降

金丝雀—有优先级负载削减。只有预取可用性下降,而用户发起的可用性保持在100%

没有优先级负载削减的情况下,当注入延迟时,用户发起的和预取的可用性都会下降。然而,在添加了优先级负载削减之后,用户发起的请求保持了100%的可用性,只有预取请求被节流。

我们已经准备好将这个功能推广到生产环境,并看看它在实际中的表现如何!

2.4现实世界的应用和结果

Netflix的工程师努力保持我们的系统可用,在我们部署优先级负载削减几个月后,Netflix发生了一次基础设施故障,影响了我们许多用户的流媒体播放。一旦故障被修复,我们从Android设备上看到了每秒预取请求的12倍激增,这可能是因为积累了大量的排队请求。

Android预取RPS的激增

这可能会导致第二次故障,因为我们的系统没有扩展到能够处理这种流量激增。PlayAPI中的优先级负载削减在这里有帮助吗?

是的!虽然预取请求的可用性下降到了20%,但由于优先级负载削减,用户发起的请求的可用性保持在99.4%以上。

预取和用户发起的请求的可用性

在某个时刻,我们节流了超过50%的所有请求,但用户发起的请求的可用性继续保持在99.4%以上。

3通用服务工作优先级

基于这种方法的成功,我们创建了一个内部库,使服务能够根据可插拔的利用率度量执行优先级负载削减,具有多个优先级级别。

与需要处理大量具有不同优先级的请求的API网关不同,大多数微服务通常只接收具有少数几个不同优先级的请求。为了在不同服务之间保持一致性,我们引入了四个预定义的优先级桶,受到Linuxtc-prio级别的启发:

服务可以选择上游客户端的优先级或通过检查各种请求属性(如HTTP头或请求体)将传入请求映射到这些优先级桶之一,以实现更精确的控制。以下是服务如何将请求映射到优先级桶的一个示例:

ResourceLimiterRequestPriorityProviderrequestPriorityProvider(){returncontextProvider->{if(contextProvider.getRequest().isCritical()){returnPriorityBucket.CRITICAL;}elseif(contextProvider.getRequest().isHighPriority()){returnPriorityBucket.DEGRADED;}elseif(contextProvider.getRequest().isMediumPriority()){returnPriorityBucket.BEST_EFFORT;}else{returnPriorityBucket.BULK;}};}3.1通用基于CPU的负载削减

Netflix的大多数服务都在CPU利用率上自动扩展,因此它是系统负载的自然度量,可以与优先级负载削减框架结合使用。一旦请求被映射到优先级桶,服务可以根据CPU利用率决定何时从特定桶中削减流量。为了维持自动扩展所需的信号,优先级削减只有在达到目标CPU利用率后才开始削减负载,并且随着系统负载的增加,更多关键流量将逐步被削减,以维持用户体验。

基于CPU利用率的不同优先级桶的请求被负载削减的百分比

3.2基于CPU的负载削减实验

我们进行了一系列实验,向一个服务发送大量请求,该服务通常以45%的CPU为目标进行自动扩展,但为了防止其扩展,以便在极端负载条件下监控CPU负载削减。实例被配置为在60%的CPU后削减非关键流量,在80%的CPU后削减关键流量。

随着RPS超过自动扩展量的6倍,服务能够首先削减非关键请求,然后削减关键请求。在整个过程中,延迟保持在合理的限制内,成功的RPS吞吐量保持稳定。

使用合成流量的基于CPU的负载削减的实验行为.

即使RPS超过了自动扩展目标的6倍,P99延迟在整个实验中也保持在合理的范围内.

3.3负载削减的反模式反模式1—不削减

在上述图表中,限制器很好地保持了成功请求的低延迟。如果没有在这里削减,我们将看到所有请求的延迟增加,而不是一些可以重试的请求的快速失败。此外,这可能导致死亡螺旋,其中一个实例变得不健康,导致其他实例负载增加,导致所有实例在自动扩展启动之前变得不健康。

没有负载削减:在没有负载削减的情况下,增加的延迟可能会降低所有请求的质量,而不是拒绝一些可以重试的请求,并且可能使实例不健康

反模式2—充血性失败

另一个需要注意的反模式是充血性失败或过于激进的削减。如果负载削减是由于流量增加,成功的RPS在负载削减后不应该下降。以下是充血性失败的一个例子:

充血性失败:在16:57之后,服务开始拒绝大多数请求,并且无法维持在负载削减启动之前成功的240RPS。这可以在固定并发限制器中看到,或者当负载削减消耗太多CPU阻止其他工作被完成时

我们可以看到,在上述的基于CPU的负载削减实验部分,我们的负载削减实现避免了这两种反模式,通过保持低延迟并在负载削减期间维持与之前一样多的成功RPS。

4通用基于IO的负载削减

一些服务不是CPU限制的,而是由于后端服务或数据存储在超载时通过增加延迟施加反向压力,它们是IO限制的。对于这些服务,我们重用了优先级负载削减技术,但我们引入了新的利用率度量来输入到削减逻辑中。我们最初的实现支持两种基于延迟的削减形式,除了标准的自适应并发限制器(本身是平均延迟的度量):

这些利用率度量提供了早期警告迹象,表明服务正在向后端生成过多的负载,并允许它在压倒后端之前削减低优先级工作。这些技术与仅并发限制相比的主要优势是它们需要的调整更少,因为我们的服务已经必须维持严格的延迟服务水平目标(SLOs),例如p50<10ms和p100<500ms。因此,将这些现有的SLOs重新表述为利用率使我们能够及早削减低优先级工作,以防止对高优先级工作产生进一步的延迟影响。同时,系统将接受尽可能多的工作,同时维持SLO。

为了创建这些利用率度量,我们计算有多少请求处理慢于我们的目标和最大延迟目标,并发出未能满足这些延迟目标的请求的百分比。例如,我们的KeyValue存储服务为每个命名空间提供了10ms的目标和500ms的最大延迟,所有客户端都接收到每个数据命名空间的利用率度量,以输入到它们的优先级负载削减中。这些度量看起来像:

utilization(namespace)={overall=12latency={slo_target=12,slo_max=0}system={storage=17,compute=10,}}

在这种情况下,12%的请求慢于10ms目标,0%慢于500ms最大延迟(超时),17%的分配存储被利用。不同的用例在它们的优先级削减中咨询不同的利用率,例如,每天写入数据的批次可能在系统存储利用率接近容量时被削减,因为写入更多数据会造成进一步的不稳定。

一个延迟利用率有用的示例是我们的一个关键文件源服务,它接受在AWS云中新文件的写入,并作为这些文件的源(为OpenConnectCDN基础设施提供读取服务)。写入是最关键的,服务永远不应该削减,但当后端数据存储超载时,逐步削减对CDN较不关键的文件的读取是合理的,因为它可以重试这些读取,它们不影响产品体验。

为了实现这个目标,源服务配置了一个基于KeyValue延迟的限制器,当数据存储报告的目标延迟利用率超过40%时,开始削减对CDN较不关键的文件的读取。然后我们通过生成超过50Gbps的读取流量来压力测试系统,其中一些是针对高优先级文件的,一些是针对低优先级文件的:

在这个测试中,有一定数量的关键写入和大量对低优先级和高优先级文件的读取。在左上角的图表中,我们增加到每秒2000次读取的~4MiB文件,直到我们可以在右上角的图表中超过50Gbps触发后端存储的超载。当这种情况发生时,右上角的图表显示,即使在显著负载下,源只削减低优先级读取工作以保留高优先级写入和读取。在此之前,当我们达到断裂点时,关键写入和读取会与低优先级读取一起失败。在这个测试期间,文件服务的CPU负载是名义上的(<10%),所以在这种情况下,只有基于IO的限制器能够保护系统。还需要注意的是,只要后端数据存储继续以低延迟接受它,源将服务更多的流量,防止我们过去与并发限制遇到的问题,它们要么在实际上没有问题时过早削减,要么在我们已经进入充血性失败时太晚削减。

5总结

服务级别的优先级负载削减的实施已被证明是在保持高可用性和为Netflix客户提供卓越用户体验方面迈出的重要一步,即使在意外的系统压力下也是如此。

★作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。负责:中央/分销预订系统性能优化活动&券等营销中台建设交易平台及数据中台等架构和开发设计车联网核心平台-物联网连接平台、大数据平台架构设计及优化LLMAgent应用开发区块链应用开发大数据开发挖掘经验推荐系统项目目前主攻市级软件项目设计、构建服务全社会的应用系统。”

THE END
1.靠“劫持流量”发财“应该是我的搜索网页被‘劫持’到特定的渠道商那里了,只要我使用这个搜索平台就会产生流量,渠道商可能会从搜索平台那里拿到一定的流量推广费用。”2023年10月25日,察觉到不对劲的周先生立即前去派出所报案。随即,一个专门靠“劫持流量”敛财的信息科技公司进入警方视野。 http://njls.jsjc.gov.cn/wenhua/202411/t20241126_1679021.shtml
2.流量攻击怎么防御,全面指南与最佳实践,流量攻击防护在当今数字化时代,网络安全已成为企业和个人不可忽视的重要议题,随着网络攻击手段的日益复杂化,流量攻击作为一种常见的网络威胁,给许多组织带来了巨大的挑战,本文将深入探讨流量攻击的本质、常见类型以及有效的防御策略,旨在为读者提供一份全面的防御指南。一、流量攻https://www.asoulu.com/post/110196.html
3.预防DNS劫持+IP直通车优化架构师之路(21)21.预防DNS劫持+IP直通车 为啥页面偶尔会返回一些无关页面? 如果是偶发,大概率是被DNS劫持了。 什么是DNS劫持? 页面第一步是DNS域名解析。攻击者恶意,或者运营商故意,篡改DNS请求的响应,返回第三方业务的IP,就可以劫持流量到第三方业务。 为了避免投诉,运营商一般只会劫持非常小的流量,一般不易察觉。 https://blog.csdn.net/shenjian58/article/details/144439512
4.什么是淘宝客?(一篇文章让你秒懂淘宝客逻辑)梓川副业网48.什么是流量劫持: 比如正常在访问淘宝的商品页面,被拦截跳转到了淘宝客的链接上,导致卖家支付了佣金,这种情况都属于流量劫持。请参阅流量劫持的介绍 49.什么是频道推广? 频道推广聚合淘宝网最丰富的强势类目,精选最优质的卖家和商品,提供最新的促销活动,达到最广泛的买家覆盖率,给买家带来全新的一站式购物体验。频https://www.zichuanhy.com/4685
5.“流量劫持”意思其实有两种,你知道了吗?很多人被冻结佣金后,被联盟说是“流量劫持”,想到的总是第一种,没有想到第二种,于是申诉申诉再申诉,联盟又不告诉你详细,只告诉你“流量劫持”四个字,让你百思不得其解。 其实联盟所说的“流量劫持”有一个核心的意思就是:不管你用什么方法,只要把那些目的是直接去淘宝网的用户,在用户不知情或者误解的情况下http://www.360doc.com/content/14/0304/18/9200790_357707749.shtml
6.劫持流量原理是什么?关于劫持流量的种类和产生脚本攻防网络安全从这个案例中我们也可以看出,移动端“劫持流量”很重要的一个出口就是“伪色情”诱导,这些病毒app基本上都是通过短信暗扣、诱导支付、广告弹窗、流量暗刷以及推广安装等手段实现非法牟利。这条移动端的灰色产业链在近两年已经发展成熟,“色播”类样本也成为移动端中感染量最大的恶意app家族分类之一。 https://www.jb51.net/hack/463321_2.html
7.「剑雨seo」讲讲SEOer常见的一些SEO基本概念13、什么叫做蜘蛛劫持? 蜘蛛劫持就是黑帽SEOer通过各种非正常手段,劫持搜索引擎蜘蛛(如:百度蜘蛛),其表现为:百度快照是一个页面,用户点击进入网站后看到的是另一个页面。 蜘蛛劫持的技术原理:劫持搜索引擎蜘蛛以及搜索引擎流量导入目标网站。当然这种方法是很多高端黑帽SEO的手法,不夸张的说国内某些大型门户站、网赚达https://www.netshop168.com/article-82304.html
8.淘宝客流量劫持技术是怎么回事?有哪些案例?对于淘宝商家来说,淘宝客流量是非常的重要的,淘宝商家们需要采取一些方式去提升自己淘宝店铺的流量,比如说淘宝客流量劫持技术,下面为大家进行相关的介绍哦。 淘宝客流量劫持技术是怎么回事? 淘宝客流量劫持技术指的是淘宝客作弊套取淘宝商家佣金的行为。 阿里巴巴集团旗下营销平台阿里妈妈公布,严打淘宝客作弊套取淘宝客佣金行为https://www.maijia.com/article/506194
9.什么是SSL协议,使用ssl证书又有哪些优势?1. 防流量劫持 全站使用Https可根治中间商流量被劫持以及运营商流量被劫持的解决方案,不仅能帮助网站页面杜绝网页内被插入的垃圾小广告,同时还能保护用户隐私安全。 2. 提升搜索排名 使用Https协议能够帮助用户的网站搜索引擎中排名的提升,能够帮助用户提高站点的可信度和品牌形象。 https://www.kufanyun.com/idcnews/1742.html
10.为什么用上了HTTPS,还是被流量劫持?老周拍了下大白的肩膀,说到:“大白啊,有点事想请你帮帮忙,你帮我瞅瞅,Chrome 浏览器的流量中是不是被插入广告了?” “就这事啊,前段时间发现路由器老给插入广告,我就给做了特征屏蔽,原以为它们消停了,这才没几天又卷土重来了?”,大白说完调出了 Chrome 公司的流量,准备一看究竟。 https://www.51cto.com/article/610987.html
11.什么是流量劫持,如何防止流量劫持?腾讯云开发者社区流量劫持,是利用各种恶意软件修改浏览器、锁定主页或不停弹出新窗口,强制用户访问某些网站,从而造成用户流量损失的情形。流量劫持是一种古老的***方式,比如早已见惯的广告弹窗(如下图)等,很多人已经对此麻木,并认为流量劫持不会造成什么损失。而事实上,流量劫持可以通过多种你无法觉察的方式窃取信息! https://cloud.tencent.com/developer/article/1406181
12.计算机网络最终版(37)给一个网址先解析什么后解析什么(域名解析顺序)? (38)Https握手过程 (39)HTTP劫持和DNS劫持 (40)跨域 (41) 一个机器能够使用的端口号上限是多少,为什么?可以改变吗?那如果想要用的端口超过这个限制怎么办? (42) 对称密码和非对称密码体系 (43)什么是数字签名? http://it.en369.cn/jiaocheng/1725920743a577501.html
13.拒绝流量劫持,全面使用HTTPS!最近收到数个 Bootcdn用户的反馈:某些地区的宽带运营商劫持了部分 BootCDN 上的文件,并篡改文件加入了广告代码。 这种方式的流量劫持属于中间人攻击(Man-in-the-Middle Attack,MITM)的一种,其实质就是在数据通路上劫持文件并篡改(一般是加入广告代码),并将篡改后的文件 发送给客户端。在这种攻击下,源服务器上的https://www.cdnb.net/bbs/archives/6095
14.SEO攻略:搜索引擎优化策略与实战案例详解3.4 什么是长尾关键词 长尾关键词说白了就是核心关键词的一个延伸。 对企业产品或者网站定位精准度高的词语。此类关键词针对一些有明确目标需求的搜索引擎引入用户,这类人群是对你所经营的网站产品有着明确认知程度的人群,但是这部分人群是网站流量的一小部分,占整体网站搜索引擎流量的20%左右。 https://www.iswweb.com/news/faq/1915.html
15.HTTP劫持是什么?使用高防CDN防止网站被黑客劫持!1、HTTP劫持是什么? 网站上的劫持大都属于流量劫持,是通过利用各类恶意软件或木马病毒来修改流量器,锁定首页,不断的弹出新的窗口,迫使用户在访问某些网页时无法正常的访问,或是直接被转接进了一个其他的新的页面窗口。 这种流量劫持,通过劫持其他网站的流量转接到自己网站里来的情况,在网站行业发生的还是挺多的。流量https://www.zndata.com/article/3791.html
16.5年收益超5000万,“内鬼”被抓……又一网络黑产被警方连根拔除访问认为有意思的网页,就会产生流量,流量越高赚取的推广费越多。流量被劫持,普通用户根本无法发现。2015年以来,付某某这一团伙以此方法获取巨大利益。 巨大利益 警方介绍,该团伙的两名技术人员艾某、陈某年龄不大,全是名牌大学毕业高材生,曾就职知名互联网企业。 https://www.hubpd.com/hubpd/rss/zaker/index.html?contentId=7493989779945436003
17.头条文章——什么是墙,什么是翻墙 1、互联网访问基本原理——OSI参考模型 (1)国内网站访问原理 (2)境外网站访问原理 2、GFW的原理 (1)DNS域名服务劫持/缓存污染 (2)BGP路由劫持(“黑洞路由”) (3)TCP RST重置 (4)协议检测→拆包→关键词匹配→封锁 (5)深度包检测 https://card.weibo.com/article/m/show/id/2309634607355609547022
18.小黑盒SEO(英文全称Search Engine Optimization),它的中文意思为“搜索引擎优化”。SEO是一种通过技术与创意,提高网页在搜索引擎中排名(无需广告与付费),增加网页在搜索引擎中的曝光度,从而就可以提高网站流量的一种营销方法,可以通过优化网页的关键词(Keyword)等方式来达到。SEO通过优化页面上的各种标签、保持内容更新、管理https://xiaoheihe.cn/community/7214/list/98998379
19.DNS服务器可能不可用什么意思常见问题dns服务器可能不可用表示域名系统(dns)服务器无法正常工作,导致设备无法解析域名并访问互联网。原因包括网络连接问题、服务器故障、dns劫持、配置错误或流量过大。这种不可用性会影响网站访问、邮件服务、网络连接并带来安全风险。 DNS服务器可能不可用是什么意思? https://www.php.cn/faq/732465.html
20.黑帽seo技术手段不可取,自然排名优化才是王道!黑帽seo的特点就是优化周期短,关键词快速上首页来获取相应流量,但是,这种作弊的黑帽手段会给网站带来致命的影响,可能进过黑帽seo手段的网站会被搜索引擎打击,导致站点被K或者屏蔽展现,或者直接拉入黑名单,永远无法有排名展现。那么,常见的黑帽手法有哪些?他们的工作原理是什么呢?下面有详细介绍。https://www.cdcxhl.com/news/257037.html