1. 程式人生 > >Spring Cloud 負載均衡器 Ribbon原理及實現

Spring Cloud 負載均衡器 Ribbon原理及實現

Ribbon簡介

分散式系統中,各個微服務會部署多個例項,如何將服務消費者均勻分攤到多個服務提供者例項上,就要使用到負載均衡器

Ribbon 是負載均衡器 ,它提供了很多負載均衡演算法,例如輪詢、隨即等,在配置服務提供者地址後,可以將服務消費者請求均勻的分發

為服務消費者整合Ribbon

新增 Ribbon 依賴庫

?
1234<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-ribbobn</artifactId></dependency
>

給 RestTemplate 新增 @LoadBalaced 註解,就可整合 RestTemplate 和 Ribbon

?
12345@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}

修改Controller,請求地址修改為 http://flim-user/user/ ,當 Ribbon 和 Eureka 配合使用時,會自動將虛擬主機名對映成微服務的網路地址,並注入了 LoadBalancerClient 輸出當前選擇的微服務節點

?
12345678910111213141516171819202122@RestControllerpublic class MovieController {private final Logger log = LoggerFactory.getLogger(MovieController.class);@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate LoadBalancerClient loadBalancerClient;@GetMapping("/user/{id}")public User findById(@PathVariable int id){return this.restTemplate.getForObject(
+id,User.class);}@GetMapping("/log-instance")public void logInstance(){ServiceInstance serviceInstance = this.loadBalancerClient.choose("flim-user");log.info("{}:{}:{}",serviceInstance.getServiceId(),serviceInstance.getHost(),serviceInstance.getPort());}}

執行測試程式

  1. 啟動 Eureka Server
  2. 啟動 2 個或更多 flim-user 例項
  3. 啟動 flim-consumer
  4. 訪問 http://localhost:8761/ 檢視微服務 flim-user 是否註冊成功
  5. 多次訪問 http://localhost:8010/user/1 會返回如下結果

{"id":1,"username":"account1","name":"張三","age":20,"balance":100.00}

多次訪問 http://localhost:8010/log-instance 控制檯會輸出以下資訊

可以看到請求會均勻的分佈到兩個使用者微服務上

2017-12-17 20:47:53.975  INFO 12313 --- [nio-8010-exec-2] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8764
2017-12-17 20:47:54.215  INFO 12313 --- [nio-8010-exec-1] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
2017-12-17 20:47:54.445  INFO 12313 --- [nio-8010-exec-3] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8764
2017-12-17 20:47:54.690  INFO 12313 --- [nio-8010-exec-4] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
2017-12-17 20:47:54.935  INFO 12313 --- [nio-8010-exec-5] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8764

注意 :不能將 restTemplate.getForObject(...) 與 loadBalancerClient.choose(...) 寫在同一方法中,因為 rest-Template 實際上就是一個 Ribbon 客戶端,本身已經包含“choose”行為

程式碼方式配置 Ribbon

可以使用Java程式碼或屬性自定義 Ribbon 的配置,Ribbon 預設配置類是 RibbonClientConfiguration,也可以使用一個 POJO 自定義 Ribbon 配置,這種 配置是細粒度的,不同的 Ribbon 客戶端可以使用不同的配置

建立 Ribbon 配置類

?
1234

相關推薦

Spring Cloud 負載衡器 Ribbon原理實現

Ribbon簡介分散式系統中,各個微服務會部署多個例項,如何將服務消費者均勻分攤到多個服務提供者例項上,就要使用到負載均衡器Ribbon 是負載均衡器 ,它提供了很多負載均衡演算法,例如輪詢、隨即等,在配置服務提供者地址後,可以將服務消費者請求均勻的分發為服務消費者整合Rib

客戶端負載衡器 Ribbon 整合Eureka實現遠端呼叫

Ribbon介紹 Ribbon是Netflix公司開源的一個負載均衡的專案(https://github.com/Netflix/ribbon),它是一個基於HTTP、TCP的客戶端負載均衡器。   什麼是負載均衡? 負載均衡是微服務架構中必須使用的技術,通過負載均衡來實

區域感知負載衡器 Ribbon

        Ribbon 簡介        Ribbon 是 Netflix 釋出的雲中間層服務開源專案,其主要功能是提供客戶側軟體負載均衡演算法,將 Netflix 的中間層服務連線在一起。        Why Ribbon?        Ribbon 的區域感知

負載衡器部署方式和工作原理

硬件負載均衡 f5設備概述負載均衡(Load Balance)由於目前現有網絡的各個核心部分隨著業務量的提高,訪問量和數據流量的快速增長,其處理能力和計算強度也相應地增大,使得單一的服務器設備根本無法承擔。在此情況下,如果扔掉現有設備去做大量的硬件升級,這樣將造成現有資源的浪費,而且如果再面臨下一次業務量的提

數據庫水平切分的實現原理解析——分庫,分表,主從,集群,負載衡器(轉)

支付 讀取 dba 我們 課題研究 穩定性 存在 use 根據 第1章 引言 隨著互聯網應用的廣泛普及,海量數據的存儲和訪問成為了系統設計的瓶頸問題。對於一個大型的互聯網應用,每天幾十億的PV無疑對數據庫造成了相當高的負載。對於系統的穩定性和擴展性造成了極大的問題。通過數

Spring Cloud(四)Ribbon負載均衡

1 概述 1.1 Ribbon簡介 Spring Cloud Ribbon是基於Netflix Ribbon實現的一套客戶端負載均衡工具。Ribbon會自動幫助你基於某種規則(簡單輪詢、隨機連線等),

Spring系列學習之Spring Cloud Netflix微服務發現容錯路由客戶端負載均衡

英文原文:https://spring.io/projects/spring-cloud-netflix 目錄 概述 特性 入門 快速開始 學習 文件 示例 概述 Spring Cloud Netflix通過自動配置和Spring環境以及其他Spring程

資料庫水平切分的實現原理解析——分庫,分表,主從,叢集,負載衡器(轉)

第1章 引言 隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高網站效能,橫向擴充套件資料層已經成為架構研發人員首選的方式。 水平切分資料庫:可

資料庫水平切分的實現原理解析---分庫,分表,主從,叢集,負載衡器

一、負載均衡技術 負載均衡叢集是由一組相互獨立的計算機系統構成,通過常規網路或專用網路進行連線,由路由器銜接在一起,各節點相互協作、共同負載、均衡壓力,對客戶端來說,整個群集可以視為一臺具有超高效能的獨立伺服器。 1、實現原理 實現資料庫的負載均衡技術,首先要有一個可以控制連線資料庫的控制端。在這裡,它

資料庫水平切分的實現原理解析(分庫,分表,主從,叢集,負載衡器

原文地址:資料庫水平切分的實現原理解析---分庫,分表,主從,叢集,負載均衡器 作者:laoliulaoliu 文章來源:http://zhengdl126.iteye.com/blog/419850 此人的部落格有大量關於網站架構的文章可供參考。 分表:

資料庫水平切分的實現原理解析---分庫,分表,主從,叢集,負載衡器 (轉載)...

第1章  引言 隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高網站效能,橫向擴充套件資料層已經成為架構研發人員首選的方式。水平切分資料庫,可

資料庫分離原理解析——分庫,分表,主從,叢集,負載衡器

第1章 引言 隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高網站效能,橫向擴充套件資料層已經成為架構研發人

資料庫水平切分實現原理——分庫,分表,主從,叢集,負載衡器

第1章 引言 隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高網站效能,橫向擴充套件資料層已經成為架構研發人員首選的方式。 水平切分資料庫

Spring Cloud中Hystrix、RibbonFeign的熔斷關係是什麼?

導讀   今天和大家聊一聊在Spring Cloud微服務框架實踐中,比較核心但是又很容易把人搞得稀裡糊塗的一個問題,那就是在Spring Cloud中Hystrix、Ribbon以及Feign它們三者之間在處理微服務呼叫超時從而觸發熔斷降級的關係是什麼?   我們知道在Spr

Ribbon 負載衡器 LoadBalancer 原始碼解析

前言 Ribbon 負載均衡器 Ribbon 負載均衡器流程圖 Ribbon 負載均衡器實現原理 判斷服務的可用性 根據負載

負載衡器——LVS

lvs lv-nat lv-dr LVS作為構建集群的一種負載均衡器,由章文嵩先生編寫,是當今世界上公認的最強的負載均衡器;負載均衡器主要適用於主機之間的資源分配太過緊張,系統性能過低,使用負載均衡器可以有效的讓多臺主機一起分擔訪問資源的壓力,由LVS調度器分配由客戶端請求的資源到後端的真實服

LVS負載衡器NAT和DR工作模式詳解

lvs 在試驗之前為了更好理解設置的參數,所以先講解一下命令。 一、lvs配置文件和命令: 程序包:ipvsadm(LVS管理工具) 配置文件:/etc/sysconfig/ipvsadm-config 【rpm -ql ipvsadm 查詢包的具體列表】 -A 在服務器列表中新添加一條新的虛擬服務

Google Maglev 牛逼的網絡負載衡器(轉)

均衡 下載 發送 span 路由器 體系 最重要的 選擇 tcp https://segmentfault.com/a/1190000009565788 Maglev 是什麽 Maglev 是谷歌搞的一個工作在三層(IP層)的網絡負載均衡器, 它是一個運行在普通的

三大主流軟件負載衡器對比(LVS、Nginx、HAproxy)

LVS、Nginx HAproxy LVS: 1. 抗負載能力強,性能高,能達到F5的60%,對內存和CPU資源消耗比較低 2. 工作在網絡4層,通過VRRP協議(僅作代理之用),具體的流量是由linux內核來處理,因此沒有流量的產生。 3. 穩定,可靠性高,自身有完美的熱備方案(K

spring cloud的消費服務ribbon(踩著坑往前爬)

序列 png imp AD 使用 開啟 發現 admin 集成 在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基於http restful的。Spring cloud有兩種服務調用方式, 一種是ribbon+restTemplate,另一種是feign