亚洲 欧洲 日韩 综合色天使,久久国产Av无码一区二区老太,人妻醉酒被下药迷昏带到诊所 ,亚州老熟女A片AV色欲小说

快手限流什么意思網(wǎng)絡(luò)用語,快手限流是什么意思網(wǎng)絡(luò)用語?

最近經(jīng)常看到某某主播被直播平臺(tái)限流懲罰,平臺(tái)給主播的流量變少,甚至直接沒有流量了。這篇文章要說的是后端服務(wù)的限流懲罰,和這個(gè)主播被限流懲罰有點(diǎn)相似之處,又有些不同。

本文說的限流懲罰是什么樣的?

服務(wù)調(diào)用者調(diào)用服務(wù)的次數(shù)超過了服務(wù)允許的最大上限,也就是達(dá)到了限流閾值,此時(shí)服務(wù)會(huì)返回一個(gè)限流錯(cuò)誤給調(diào)用方,同時(shí)還要對(duì)調(diào)用方追加一些懲罰措施,比如限制調(diào)用方10秒鐘之內(nèi)都不能訪問服務(wù)。

為什么被限流了還要追加懲罰?

這里邊的邏輯是:調(diào)用方之所以被限流,就是因?yàn)闆]有合理的使用服務(wù)(當(dāng)然這個(gè)合理性是由服務(wù)提供方來聲明的),作為服務(wù)提供方有責(zé)任督促調(diào)用方調(diào)整服務(wù)使用方式,懲罰就是督促的一種形式。如果不規(guī)范使用服務(wù),導(dǎo)致被懲罰,調(diào)用方的業(yè)務(wù)也會(huì)受到較大影響,這會(huì)促使服務(wù)使用者不得不考慮改進(jìn)訪問服務(wù)的行為。

導(dǎo)致不合理調(diào)用服務(wù)的一個(gè)原因可能是調(diào)用方程序錯(cuò)誤,比如陷入了死循環(huán),不停地訪問服務(wù),這時(shí)候追加限流懲罰就很有必要,避免服務(wù)端承受大量無意義的請(qǐng)求,避免引起負(fù)載過重的問題。

還有一種是設(shè)計(jì)上的考量,比如頻繁地查詢用戶信息導(dǎo)致被限流懲罰,服務(wù)提供者的目的可能是要求服務(wù)調(diào)用方對(duì)用戶信息進(jìn)行緩存,而不是每次都來查詢服務(wù),給服務(wù)帶來較大的壓力。

如何實(shí)現(xiàn)限流懲罰?

一個(gè)很自然的思路就是:當(dāng)限流被觸發(fā)時(shí),標(biāo)記調(diào)用方并設(shè)置一個(gè)過期時(shí)間,如果調(diào)用方在過期時(shí)間內(nèi)來訪問則直接返回錯(cuò)誤,如果調(diào)用方在過期時(shí)間后來訪問則恢復(fù)進(jìn)行限流計(jì)數(shù)。這樣也可以進(jìn)一步降低服務(wù)端的限流處理消耗。

快手限流什么意思網(wǎng)絡(luò)用語,快手限流是什么意思網(wǎng)絡(luò)用語?

下面來看一下具體的實(shí)現(xiàn),在 FireflySoft.RateLimit 中進(jìn)程內(nèi)限流和Redis限流都支持進(jìn)行限流懲罰。

定義限流懲罰

因?yàn)樗械南蘖魉惴ǘ伎赡苄枰С窒蘖鲬土P,所以在限流規(guī)則的基類中定義了一個(gè)字段:LockSeconds,表示在觸發(fā)限流后需要鎖定的秒數(shù),即觸發(fā)限流后調(diào)用方不能繼續(xù)訪問服務(wù)的時(shí)間長(zhǎng)度。

public abstract class RateLimitRule
{
    /// <summary>
    /// The number of seconds locked after triggering rate limiting. 0 means not locked
    /// </summary>
    public int LockSeconds { get; set; }
}

發(fā)起限流懲罰

這里以進(jìn)程內(nèi)限流為例,觸發(fā)限流后會(huì)添加一個(gè)緩存項(xiàng),并設(shè)置緩存的過期時(shí)間為上文定義的LockSeconds。

protected bool TryLock(string target, DateTimeOffset currentTime, TimeSpan expireTimeSpan)
{
    var expireTime = currentTime.Add(expireTimeSpan);
    return _cache.Add($"{target}-lock", 1, expireTime);
}

Redis發(fā)起限流懲罰的原理和這個(gè)差不多,只不過是寫到Redis的KV中。想要了解的同學(xué)可以點(diǎn)擊這里查看。

應(yīng)用限流懲罰

這里還是以進(jìn)程內(nèi)限流為例,每次限流計(jì)數(shù)前都檢查是否存在限流懲罰緩存項(xiàng),如果存在則直接返回錯(cuò)誤。

protected bool CheckLocked(string target)
{
    return _cache.Get($"{target}-lock") == null ? false : true;
}

好了,以上就是這篇文章的主要內(nèi)容了。

如果你對(duì) FireflySoft.RateLimit 有一點(diǎn)興趣,歡迎訪問我的Github:https://github.com/bosima/FireflySoft.RateLimit 。

本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 sumchina520@foxmail.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。
如若轉(zhuǎn)載,請(qǐng)注明出處:http://www.qjsdgw.cn/127948.html