最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java分布式面試系統(tǒng)限流最佳實踐

 更新時間:2022年03月09日 15:08:09   作者:Q.E.D  
這篇文章主要介紹了java分布式面試系統(tǒng)限流最佳實踐場景分析解答,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

引言

前面講了系統(tǒng)中的降級熔斷設(shè)計和對 Hystrix 組件的功能了解,關(guān)于限流降級還有一個比較重要的知識點就是限流算法。

如果你面試的是電商相關(guān)公司,這一塊就顯得更加重要了,秒殺、搶購等場景,需有一種手段來限制這些場景的并發(fā)/請求量,手段就是限流。

沒有配置限流,如果遇到上游系統(tǒng)頻繁調(diào)用,會導(dǎo)致下游系統(tǒng)被擊垮。

配置了限流,但是限流算法不合理,會導(dǎo)致正常訪問被拒絕,所以限流算法不能亂用,要充分評估系統(tǒng)是否需要限流,如果要限流,流量大小如何評估。

1、面試官:

哪些場景系統(tǒng)使用了限流?為什么要使用限流?

問題分析:這個問題比較簡單,所有訪問頻繁的服務(wù)都可以做限流,相比公司內(nèi)部運營系統(tǒng),用戶加起來不過十幾個,這種系統(tǒng)就沒必要限流了。

答:限流呀,無非就是秒殺活動,或者容易被爬蟲爬的信息類頁面,以及系統(tǒng)核心服務(wù),這些都需要做限流,比如大眾點評首頁,因為推薦了一些高質(zhì)量店鋪信息,經(jīng)常被同行或者門戶類公司的爬蟲爬取信息,這個時候我們就要對首頁做限流操作。秒殺活動,系統(tǒng)核心高QPS服務(wù),都需要考慮限流。

使用限流的目的就是我們不能輕易被別人干倒,要7x24h保證服務(wù)正常,同時,限流也是為了我們的下游系統(tǒng)不會輕易被我們拖垮,流量合理放行。

2、面試官:

那你了解哪些常用限流算法?

答:常用的限流算法就3種:

1.計數(shù)器方法:

固定時間窗口,比如1min/1h,設(shè)置一個計數(shù)器統(tǒng)計單位時間內(nèi)一個請求的訪問量,超過計數(shù)器最大值,可以讓請求放入等待隊列 or 直接拒接訪問,這種方法簡單粗暴,但是易造成突刺現(xiàn)象。

2.漏斗算法:

可以理解成一個固定容量的漏桶,不管流量多還是少,我都按照常量固定速率流出水滴,如果流入水滴超出了桶的容量,就讓水溢出。這種算法優(yōu)點是穩(wěn)定速率,缺點是無法面對突發(fā)流量。

圖片描述

3.令牌桶算法:

讓每次請求調(diào)用需要先獲取令牌,只有拿到令牌,才有機會繼續(xù)執(zhí)行,否則選擇等待可用的令牌,或者直接拒絕。優(yōu)點是系統(tǒng)發(fā)放令牌的速率是可變的,能夠面對突發(fā)流量,缺點是有點復(fù)雜。

具體使用哪種算法,要根據(jù)具體業(yè)務(wù)場景,比如系統(tǒng)時候會有突發(fā)流量,調(diào)用方重要程度等,如果調(diào)用方不是很重要,為了顧全大局,直接放調(diào)用方稍后重試。

圖片描述

3、面試官:

那具體這值該如何評估,說到現(xiàn)在我還是不知道限流到底要怎么設(shè)置,可以給我一點經(jīng)驗方法嗎?

(我繼續(xù)…)

對于核心服務(wù)限流的值可以通過以下方法來設(shè)置合理的值:

  • 觀察評估法:系統(tǒng)總該有QPS監(jiān)控系統(tǒng)吧,看看流量環(huán)比最大值,最小值,平均值,這就是很好的參考,總不能我一拍腦袋設(shè)置一個250上去。
  • 壓力測試法:找QA,半夜業(yè)務(wù)低峰期,看看系統(tǒng)能承受的最大QPS。

同時,限流還有和重試、降級、熔斷等作為組合方法一起使用。

深入分析

于具體使用的技術(shù)和工具并不是重點,還有人說我也不用Guava,也不用Thread sleep,更不用Hystrix,我用Nginx,前系統(tǒng)最前端同樣可以做限流,方案可行,條條大路通羅馬。

使用線程池實現(xiàn):

@SpringBootTest
@RunWith(SpringRunner.class)
public class RejectTest {
    @Test
    public void testReject() {
        for (int i = 0; i < 25; ++i) {
            new Thread(() -> 
                 // do something     
                      )).start();
        }
        // 防止主線程提前結(jié)束執(zhí)行
        TimeUtils.sleep(50);
    }
}

 借助Guava實現(xiàn):

RateLimiter rateLimiter = RateLimiter.create(20.0);
boolean token = rateLimiter.tryAcquire();
if (token) {
	System.out.println("pass");
} else {
	System.out.println("refuse");
}

總結(jié)

我認(rèn)為學(xué)習(xí)限流最重要的點是掌握解決問題的思路,至于具體使用的技術(shù)和工具并不是重點,還有人說我也不用Guava,也不用Thread sleep,更不用Hystrix,我用Nginx,前系統(tǒng)最前端同樣可以做限流,方案可行,條條大路通羅馬。

以上就是java分布式面試系統(tǒng)限流最佳實踐的詳細(xì)內(nèi)容,更多關(guān)于分布式系統(tǒng)限流面試的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文掌握J(rèn)ava的工具類和API

    一文掌握J(rèn)ava的工具類和API

    在Java中,工具類通常包含一系列靜態(tài)方法,用于執(zhí)行常見的任務(wù),這些任務(wù)可能不直接關(guān)聯(lián)到特定的業(yè)務(wù)邏輯,而是用于處理一些基礎(chǔ)的數(shù)據(jù)轉(zhuǎn)換、字符串操作、文件操作等,這篇文章主要介紹了一文搞懂Java的工具類和API,需要的朋友可以參考下
    2008-01-01
  • JAVA計算兩個日期相差的實例

    JAVA計算兩個日期相差的實例

    在java中我找了一下關(guān)于計算兩個日期之間相差的天數(shù)方法有10多種實現(xiàn)方法,下面總結(jié)一下常用的幾種計算兩個日期之間相差的天數(shù)實例
    2013-11-11
  • spring schedule實現(xiàn)動態(tài)配置執(zhí)行時間

    spring schedule實現(xiàn)動態(tài)配置執(zhí)行時間

    這篇文章主要介紹了spring schedule實現(xiàn)動態(tài)配置執(zhí)行時間,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中的事件處理機制詳解

    Java中的事件處理機制詳解

    這篇文章主要介紹了Java中的事件處理機制詳解,Java事件處理是采取"委派事件模型",當(dāng)事件發(fā)生時,產(chǎn)生事件的對象,會把此"信息"傳遞給"事件的監(jiān)聽者"處理,這里所說的"信息"實際上就是java.awt.event事件類庫里某個類創(chuàng)建對象,把它稱為"事件的對象",需要的朋友可以參考下
    2023-10-10
  • springMVC盜鏈接詳解

    springMVC盜鏈接詳解

    這篇文章主要為大家詳細(xì)介紹了SpringMVC盜鏈接詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-07-07
  • 淺談Java后臺對JSON格式的處理操作

    淺談Java后臺對JSON格式的處理操作

    下面小編就為大家?guī)硪黄獪\談Java后臺對JSON格式的處理操作。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java之dao模式詳解及代碼示例

    Java之dao模式詳解及代碼示例

    這篇文章主要介紹了Java之dao模式詳解及代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Maven倉庫鏡像配置的方法實現(xiàn)

    Maven倉庫鏡像配置的方法實現(xiàn)

    本文介紹了如何使用Maven倉庫鏡像來加速構(gòu)建過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 如何使用SpEL表達(dá)式實現(xiàn)動態(tài)分表查詢

    如何使用SpEL表達(dá)式實現(xiàn)動態(tài)分表查詢

    這篇文章主要介紹了如何使用SpEL表達(dá)式實現(xiàn)動態(tài)分表查詢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • java設(shè)計模式之工廠方法模式

    java設(shè)計模式之工廠方法模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計模式之工廠方法模式,什么是java工廠方法模式,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評論

鄂伦春自治旗| 洛扎县| 驻马店市| 钟祥市| 崇礼县| 榆社县| 武义县| 周至县| 徐汇区| 当雄县| 山阳县| 祁东县| 邓州市| 天峨县| 巴马| 景谷| 磴口县| 蛟河市| 镇赉县| 仙居县| 安陆市| 繁昌县| 肇东市| 利川市| 通河县| 建湖县| 长丰县| 根河市| 玉门市| 乐至县| 互助| 彰化县| 元朗区| 日喀则市| 山西省| 永年县| 永宁县| 黄冈市| 特克斯县| 巴中市| 沁水县|