控制應(yīng)用程序的某個實(shí)例,某個獨(dú)立的租戶维蒙,或者某個整個服務(wù)對資源的消費(fèi)简烤。即使當(dāng)需求增加而導(dǎo)致對資源的大量負(fù)載時,該模式也能夠允許系統(tǒng)繼續(xù)工作并滿足SLA(服務(wù)等級協(xié)議)洲愤。
場景
云應(yīng)用程序的負(fù)載經(jīng)常依據(jù)活躍用戶的數(shù)量或用戶活動的類型而隨著時間變化颓芭。例如,很多用戶可能在工作時間活躍柬赐,或者在每個月月底的時候亡问,可能會要求系統(tǒng)去處理開銷很大的計算分析。也可能會存在突發(fā)的和意料之外的活動上的爆發(fā)點(diǎn)肛宋。如果系統(tǒng)的處理請求超出可用資源的容量州藕,系統(tǒng)性能將會下降,并且甚至?xí)l(fā)生故障酝陈。如果系統(tǒng)必須滿足某個服務(wù)等級協(xié)議床玻,這樣的故障是不能夠被接受的。
根據(jù)應(yīng)用程序的業(yè)務(wù)目標(biāo)沉帮,有很多策略可以用來處理云端上的負(fù)載變化锈死。一個策略是使用自動擴(kuò)展來滿足特定時間上用戶對于資源供給需求。當(dāng)優(yōu)化運(yùn)行時成本時穆壕,該策略有持續(xù)滿足用戶需求的潛力待牵。然而,當(dāng)自動擴(kuò)展可以觸發(fā)額外資源的供給時喇勋,這種供給不是立即的缨该。如果需求快速增加,會存在一個資源不足的時間窗口川背。
解決方案
一個替代的自動擴(kuò)展策略是只允許應(yīng)用程序使用有限定上限的資源贰拿,當(dāng)限定達(dá)到時蛤袒,對應(yīng)用程序限流。系統(tǒng)應(yīng)該監(jiān)控資源時如何使用的壮不,這樣才能當(dāng)利用率超過閾值時汗盘,系統(tǒng)能夠限流某個或多個用戶的請求。這將會使得系統(tǒng)繼續(xù)工作询一,并且滿足任何存在的服務(wù)等級協(xié)議(SLAs)隐孽。
系統(tǒng)可以實(shí)現(xiàn)一些限流策略,包括:
拒絕某個在特定時間段內(nèi)已經(jīng)訪問每秒n次以上的系統(tǒng)APIs的單獨(dú)用戶健蕊。這就要求系統(tǒng)計量每個租戶或用戶使用的資源菱阵。
禁用或降級一些非必要的服務(wù)功能,以便必要的服務(wù)能夠以足夠的資源無礙的運(yùn)行缩功。例如晴及,如果應(yīng)用程序是視頻流輸出,可以切換到某個低分辨率嫡锌。
使用負(fù)載分級來平滑活動的容量虑稼。在某個多租戶環(huán)境中,該方式將會減少對于每個租戶的性能势木。如果系統(tǒng)必須支持混合不同SLAs的租戶蛛倦,對于高價值的租戶的工作可能會立即被處理。對于其它租戶的請求可能會被延遲啦桌,當(dāng)消除了待辦任務(wù)時溯壶,才去處理這些請求。優(yōu)先級隊列模式可以用來實(shí)現(xiàn)這種方式甫男。
延遲低優(yōu)先級應(yīng)用程序或租戶的操作且改。這些操作可以被掛起或限制,產(chǎn)生一個異常來通知租戶系統(tǒng)繁忙和該操作應(yīng)該等會重試板驳。
下圖展示了應(yīng)用程序使用3種特性的資源利用(內(nèi)存又跛,CPU,帶寬等因素的組合)隨時間變化的關(guān)系若治。特性是指一個功能范圍效扫,比如某個執(zhí)行特定任務(wù)集合的組成部分,某個執(zhí)行復(fù)雜計算的代碼片段直砂,或者某個提供服務(wù)比如內(nèi)存內(nèi)緩存的單元。這些特性被標(biāo)識為A浩习,B静暂,和C。
上圖展示了延遲操作的影響郊供。T1時間開始之前峡碉,分配給所有使用這些特性的應(yīng)用程序的資源達(dá)到某個閾值(資源利用限制)。在此刻驮审,應(yīng)用程序有耗盡可用資源的危險鲫寄。在該系統(tǒng)中,特性B沒有特性A或特性C重要疯淫,因此它將會暫時被禁用地来,并且它使用的資源會被釋放。在T1時間和T2時間之間熙掺,使用特性A和特性B的應(yīng)用程序繼續(xù)正常運(yùn)行未斑。最終,特性A和C的資源利用減少到某個時間點(diǎn)币绩,在T2時間蜡秽,在該時間點(diǎn)有足夠的能力重新啟用特性B。
自動擴(kuò)展和限流方式也可以組合起來缆镣,這樣有助于保持應(yīng)用程序響應(yīng)和滿足SLAs芽突。如果預(yù)期到需求仍然會很高,在系統(tǒng)橫向擴(kuò)展時费就,限流會提供一個臨時的解決方案诉瓦。在此刻,系統(tǒng)全部功能可以被恢復(fù)力细。
下圖展示了運(yùn)行在系統(tǒng)里面的全部應(yīng)用程序所使用的所有資源隨著時間變化關(guān)系睬澡,并且說明了限流是如何能夠和自動擴(kuò)展相結(jié)合的。
在T1時間眠蚂,達(dá)到由資源利用的軟性限制標(biāo)明的閾值煞聪。在此刻,系統(tǒng)可以開始橫向擴(kuò)展逝慧。然而昔脯,如果新的資源不能立即變得可用,那么現(xiàn)存的資源可能會被耗盡笛臣,并且系統(tǒng)可能發(fā)生故障云稚。為了防止這種情況發(fā)生,如前面所述沈堡,系統(tǒng)會被暫時地限流静陈。當(dāng)自動擴(kuò)展完成時并且額外的資源可用了,限流就可以放寬了。
考慮點(diǎn)
在實(shí)現(xiàn)該模式時鲸拥,考慮下面幾點(diǎn):
限流一個應(yīng)用程序和使用的策略是一種架構(gòu)上的決策拐格,該決策會影響整個系統(tǒng)的設(shè)計。應(yīng)該在應(yīng)用程序設(shè)計早期階段就考慮限流刑赶,因?yàn)閷⑾蘖髟黾拥揭粋€已經(jīng)實(shí)現(xiàn)的系統(tǒng)是很不容易的捏浊。
限流必須被快速地執(zhí)行。系統(tǒng)必須有能力檢測到活動的增加并且做出相應(yīng)地反應(yīng)撞叨。在負(fù)載消除后金踪,系統(tǒng)也必須能夠快速還原到原始狀態(tài)。這要求持續(xù)地捕捉和監(jiān)控相關(guān)恰當(dāng)?shù)男阅軘?shù)據(jù)谒所。
如果某個服務(wù)需要暫時地拒絕用戶請求热康,它應(yīng)該返回某個特定錯誤碼,以便于客戶端應(yīng)用程序明白某個操作被拒絕的原因是因?yàn)橄蘖髁肆恿臁姐军?蛻舳藨?yīng)用程序可以等一段時間在重試請求。
當(dāng)系統(tǒng)自動擴(kuò)展時尖淘,限流可以被用來作為一個臨時的措施奕锌。如果活動上的爆發(fā)是突然的并且預(yù)期不會很長時間,在某些情況下村生,最好是簡單地限流惊暴,而不是去擴(kuò)展,趁桃,因?yàn)閿U(kuò)展會增加運(yùn)行時成本辽话。
當(dāng)系統(tǒng)自動擴(kuò)展時,如果限流被用來作為一個臨時的措施卫病,并且如果資源需求增長特別快油啤,系統(tǒng)可能不會繼續(xù)工作——即使處于限流模式中。如果不能接受這種蟀苛,考慮維護(hù)大容量的儲備并且配置更有侵略性的自動擴(kuò)展策略益咬。
什么時候使用?
適合:
為了保證系統(tǒng)持續(xù)工作來滿足服務(wù)等級協(xié)議帜平。
為了防止某個單一租戶獨(dú)占應(yīng)用程序提供的資源幽告。
為了處理活動上的爆發(fā)。
為了有助于優(yōu)化系統(tǒng)的成本裆甩,通過限制最大資源標(biāo)準(zhǔn)冗锁。
文章來源:Throttling pattern