成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:Feign 第一次調(diào)用為什么會很慢?大部分人都答不上來!

開發(fā) 前端
其實這種饑餓加載模式,類似于“客戶端負(fù)載預(yù)熱”的一個操作,項目啟動的時候進(jìn)行加載,防止服務(wù)之間調(diào)用可以因為數(shù)據(jù)量、業(yè)務(wù)邏輯處理復(fù)雜性導(dǎo)致接口超時,如果你的服務(wù)之間調(diào)用業(yè)務(wù)處理比較復(fù)雜、且慢,不妨可以試試這種解決方式。

前言

首先要了解Feign是如何進(jìn)行遠(yuǎn)程調(diào)用的,這里面包括,注冊中心、負(fù)載均衡、FeignClient之間的關(guān)系,微服務(wù)通過不論是eureka、nacos也好注冊到服務(wù)端,F(xiàn)eign是靠Ribbon做負(fù)載的,而Ribbon需要拿到注冊中心的服務(wù)列表,將服務(wù)進(jìn)行負(fù)載緩存到本地,然后FeignClient客戶端在進(jìn)行調(diào)用,大概就是這么一個過程。

Ribbon是如何進(jìn)行負(fù)載的

首先我們要清楚Ribbon是如何進(jìn)行負(fù)載的,也就是如何獲取nacos、eureka的服務(wù)列表,這個很關(guān)鍵。

RibbonClientConfiguration

RibbonClientConfiguration類中通過LoadBalancer,我們知道ribbon是靠LoadBalancer做負(fù)載的

無非就是ILoadBalancer接口的方法,依次是添加新的服務(wù)、在負(fù)載均衡里選擇一個服務(wù)、markServerDown服務(wù)下線、獲取服務(wù)列表、獲取存活的服務(wù)器、獲取所有服務(wù)器(包括健康和不健康的)

圖片圖片

ZoneAwareLoadBalancer

loadBalancer默認(rèn)的是ZoneAwareLoadBalancer負(fù)載均衡器,通過繼承父類DynamicServerListLoadBalancer的restOfInit方法,里面比較重要的兩個方法,enableAndInitLearnNewServersFeature和updateListOfServers方法

圖片圖片

enableAndInitLearnNewServersFeature方法里面

LOGGER.info("Using serverListUpdater {}", serverListUpdater.getClass().getSimpleName());
serverListUpdater.start(updateAction);

讓我們看ServerListUpdater.start方法的實現(xiàn),通過自定義線程去拿,這就是獲取服務(wù)列表;

圖片圖片

Ribbon負(fù)載均衡策略

服務(wù)列表獲取說了,當(dāng)然負(fù)載均衡的策略這塊也有必要講一下,主要有七種:

  • RoundRobinRule(輪詢策略,按照服務(wù)順序依次循環(huán)調(diào)用)
  • WeightedResponseTimeRule(權(quán)重比策略,優(yōu)先選擇權(quán)重比高的服務(wù),也就是服務(wù)響應(yīng)時間比較短的,響應(yīng)時間越長權(quán)重比越低)
  • RandomRule(隨機策略,服務(wù)提供者列表隨機選擇一個服務(wù))
  • BestAvailableRule(最小連接數(shù)策略,獲取服務(wù)列表中連接數(shù)最小的服務(wù)實例)
  • RetryRule(重試策略,重試獲取已經(jīng)失效的服務(wù),指定時間沒有獲取到返回NULL)
  • AvailabilityFilteringRule(可用性敏感策略,過濾非健康服務(wù)實例,選擇lianji)
  • ZoneAvoidanceRule(區(qū)域敏感策略)

關(guān)于自定義負(fù)載均衡策略,可以看:

https://juejin.cn/post/7155754618486521869

Ribbon-eager-load(饑餓加載)模式

Ribbon對于負(fù)載Client是在服務(wù)啟動后,發(fā)生調(diào)用的時候才會去創(chuàng)建Client,所以在第一次發(fā)生http請求調(diào)用的時候,不光要算上http的請求時間,還要算上Client的創(chuàng)建時間,所以第一次調(diào)用的時候才會很慢,寫個方法調(diào)用下;

System 服務(wù)調(diào)用System2服務(wù)

@GetMapping("/requestSystem2Api")
public String requestSystem2Api(){
    long startTime = System.currentTimeMillis();
    R<String> stringR = iTestServiceClient.testRequestMethod();
    if (null !=stringR){
        log.info("接口返回:"+stringR.getMsg());
    }
    long needTime = System.currentTimeMillis() - startTime;
    log.info("接口調(diào)用需要的時間:"+needTime);
    return "";
}

從調(diào)用日志可以看出,第一次調(diào)用System2服務(wù),Ribbon的DynamicServerListLoadBalancer會將feign客戶端進(jìn)行負(fù)載,然后進(jìn)行調(diào)用,第一次調(diào)用的時間就是會長一些,第二次調(diào)用直接進(jìn)行請求可以看到調(diào)用時間很快。

圖片圖片

開啟Ribbon饑餓加載

ribbon:
  nacos:
    enabled: true # 開啟naocos輪詢
  eager-load:
   enabled: true  # 開啟Ribbon的饑餓加載模式(防止第一次請求超時的問題)
   clients: Lxlxxx-system2 # 指定需要開啟的服務(wù)(需要開啟Ribbon的饑餓加載模式)
   ReadTimeout: 10000
   ConnectTimeout: 10000
   MaxAutoRetries: 0
   MaxAutoRetriesNextServer: 1
   OkToRetryOnAllOperations: false

在項目啟動的時候,可以從日志看到,已經(jīng)把Lxlxxx-system2服務(wù)進(jìn)行加載,從而避免了第一次請求超時的情況;

圖片圖片

總結(jié)

其實這種饑餓加載模式,類似于“客戶端負(fù)載預(yù)熱”的一個操作,項目啟動的時候進(jìn)行加載,防止服務(wù)之間調(diào)用可以因為數(shù)據(jù)量、業(yè)務(wù)邏輯處理復(fù)雜性導(dǎo)致接口超時,如果你的服務(wù)之間調(diào)用業(yè)務(wù)處理比較復(fù)雜、且慢,不妨可以試試這種解決方式。

責(zé)任編輯:武曉燕 來源: JAVA日知錄
相關(guān)推薦

2018-09-17 15:09:28

區(qū)塊鏈去中心化互聯(lián)網(wǎng)

2023-02-07 13:51:11

SQLupdate語句

2022-05-18 09:49:26

MySQLID數(shù)據(jù)庫

2021-07-05 22:09:53

面試官CollectionsJDK7

2019-10-11 10:05:30

程序員固態(tài)硬盤Google

2019-09-06 09:37:06

亂碼字符編碼Unicode

2021-04-06 15:20:05

編程語言JavaIT

2015-07-14 09:40:57

攜程面試前端面試官

2022-12-22 14:32:37

JavaScript編程語言

2011-07-21 21:01:37

諾基亞塞班蘋果

2015-11-05 17:41:25

NoSQL分布式事務(wù)事務(wù)架構(gòu)

2025-03-28 04:00:00

互聯(lián)網(wǎng)Java讀操作

2021-10-14 06:51:54

SpringSecurityJWT

2021-08-06 17:44:45

云安全云計算網(wǎng)絡(luò)安全

2019-11-20 08:30:07

架構(gòu)師軟件組織

2025-03-18 10:38:29

大模型AI算法AI

2021-11-30 22:59:28

程序員IT架構(gòu)師

2017-03-22 15:38:28

代碼架構(gòu)Java

2018-11-25 21:53:10

人工智能AI開發(fā)者

2025-01-26 16:04:09

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 玖玖综合在线 | 精品一二区 | 天堂一区二区三区 | 欧美一区免费 | 7777久久| 亚洲精品亚洲人成人网 | 日韩国产欧美 | www.久久久久久久久久久 | a级片在线观看 | 欧美区在线 | 国产精品96久久久久久 | 欧美日韩亚洲一区 | 成年人视频在线免费观看 | 久久最新精品 | 拍拍无遮挡人做人爱视频免费观看 | 在线观看日本高清二区 | 久久久久久久久久久久久久国产 | 国产视频综合 | 精品国产精品三级精品av网址 | 国产精品久久久久久中文字 | 最新高清无码专区 | 亚洲国产成人精品久久 | 日本成人免费观看 | 亚洲一区二区久久久 | 国产视频久久久 | 中文字幕亚洲视频 | www久久av | 成人a视频片观看免费 | 伊人网一区 | 久久精品高清视频 | 亚洲啊v在线 | 久久精品一区二 | 麻豆一区二区三区精品视频 | 国产精品性做久久久久久 | 久久精品一区二区三区四区 | 97精品国产 | 欧美日韩免费 | 一级片子| 欧美日韩精品国产 | 欧美涩| 久久久精品一区二区三区四季av |