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

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

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

前言

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

Ribbon是如何進行負載的

首先我們要清楚Ribbon是如何進行負載的,也就是如何獲取nacos、eureka的服務列表,這個很關鍵。

RibbonClientConfiguration

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

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

圖片圖片

ZoneAwareLoadBalancer

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

圖片圖片

enableAndInitLearnNewServersFeature方法里面

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

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

圖片圖片

Ribbon負載均衡策略

服務列表獲取說了,當然負載均衡的策略這塊也有必要講一下,主要有七種:

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

關于自定義負載均衡策略,可以看:

https://juejin.cn/post/7155754618486521869

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

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

System 服務調用System2服務

@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("接口調用需要的時間:"+needTime);
    return "";
}

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

圖片圖片

開啟Ribbon饑餓加載

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

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

圖片圖片

總結

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

責任編輯:武曉燕 來源: JAVA日知錄
相關推薦

2018-09-17 15:09:28

區塊鏈去中心化互聯網

2023-02-07 13:51:11

SQLupdate語句

2022-05-18 09:49:26

MySQLID數據庫

2021-07-05 22:09:53

面試官CollectionsJDK7

2019-10-11 10:05:30

程序員固態硬盤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編程語言

2025-03-28 04:00:00

互聯網Java讀操作

2015-11-05 17:41:25

NoSQL分布式事務事務架構

2011-07-21 21:01:37

諾基亞塞班蘋果

2021-10-14 06:51:54

SpringSecurityJWT

2021-08-06 17:44:45

云安全云計算網絡安全

2019-11-20 08:30:07

架構師軟件組織

2025-03-18 10:38:29

大模型AI算法AI

2021-11-30 22:59:28

程序員IT架構師

2018-11-25 21:53:10

人工智能AI開發者

2025-01-26 16:04:09

2017-03-22 15:38:28

代碼架構Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品综合 | 久久综合九九 | 夜夜精品浪潮av一区二区三区 | 亚洲国产精品一区 | 日本精品久久久久久久 | 久久久久成人精品免费播放动漫 | 四虎影院免费在线播放 | 在线欧美亚洲 | 在线免费毛片 | 久热国产精品 | 在线免费看91 | 欧美黑人巨大videos精品 | 亚洲精品在线视频 | 91在线一区二区三区 | 久久精品中文 | 国产精品福利网站 | 欧美日韩国产高清视频 | 精品无码久久久久久国产 | 成人日韩精品 | 国产精品免费看 | 九九亚洲 | 久久一二| 国产日韩欧美在线 | 久久久久久久久久久久91 | 久久夜视频 | 欧洲一级黄 | 免费精品视频在线观看 | 久久成人av| 久久成人免费观看 | 免费一级毛片 | 岛国av一区二区 | 亚洲 欧美 另类 综合 偷拍 | 亚洲国产成人av好男人在线观看 | av大片| 电影91久久久 | 欧美一区中文字幕 | 免费在线观看一区二区 | 欧美精品一区二区三区蜜臀 | 黄色片视频网站 | 午夜天堂精品久久久久 | 在线观看中文字幕 |