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

SpringCloud中的Ribbon負載均衡詳細解讀

 更新時間:2023年11月09日 08:53:19   作者:愛敲代碼的小楚  
這篇文章主要介紹了SpringCloud中的Ribbon負載均衡詳細解讀,當系統(tǒng)面臨大量的用戶訪問,負載過高的時候,通常會增加服務(wù)器數(shù)量來進行橫向擴展(集群),多個服務(wù)器的負載需要均衡,以免出現(xiàn)服務(wù)器負載不均衡,部分服務(wù)器負載較大,部分服務(wù)器負載較小的情況,需要的朋友可以參考下

負載均衡

當系統(tǒng)面臨大量的用戶訪問,負載過高的時候,通常會增加服務(wù)器數(shù)量來進行橫向擴展(集群),多個服務(wù)器的負載需要均衡,以免出現(xiàn)服務(wù)器負載不均衡,部分服務(wù)器負載較大,部分服務(wù)器負載較小的情況。通過負載均衡,使得集群中服務(wù)器的負載保持在穩(wěn)定高效的狀態(tài),從而提高整個系統(tǒng)的處理能力。

軟件負載均衡:nginx,lvs

硬件負載均衡:F5

第一層可以用DNS,配置多個A記錄,讓DNS做第一層分發(fā)。

第二層用比較流行的是反向代理,核心原理:代理根據(jù)一定規(guī)則,將http請求轉(zhuǎn)發(fā)到服務(wù)器集群的單一服務(wù)器上。

軟件負載均衡分為:服務(wù)端(集中式),客戶端。

服務(wù)端負載均衡:在客戶端和服務(wù)端中間使用代理,nginx。

客戶端負載均衡:根據(jù)自己的情況做負載。Ribbon就是。

客戶端負載均衡和服務(wù)端負載均衡最大的區(qū)別在于服務(wù)端地址列表的存儲位置,以及負載算法在哪里。

客戶端負載均衡

在客戶端負載均衡中,所有的客戶端節(jié)點都有一份自己要訪問的服務(wù)端地址列表,這些列表統(tǒng)統(tǒng)都是從服務(wù)注冊中心獲取的;

服務(wù)端負載均衡

在服務(wù)端負載均衡中,客戶端節(jié)點只知道單一服務(wù)代理的地址,服務(wù)代理則知道所有服務(wù)端的地址。

介紹:

Ribbon是Netflix開發(fā)的客戶端負載均衡器,為Ribbon配置服務(wù)提供者地址列表后,Ribbon就可以基于某種負載均衡策略算法,自動地幫助服務(wù)消費者去請求 提供者。Ribbon默認為我們提供了很多負載均衡算法,例如輪詢、隨機等。我們也可以實現(xiàn)自定義負載均衡算法。

Ribbon作為Spring Cloud的負載均衡機制的實現(xiàn),

  • Ribbon可以單獨使用,作為一個獨立的負載均衡組件。只是需要我們手動配置 服務(wù)地址列表。
  • Ribbon與Eureka配合使用時,Ribbon可自動從Eureka Server獲取服務(wù)提供者地址列表(DiscoveryClient),并基于負載均衡算法,請求其中一個服務(wù)提供者實例。
  • Ribbon與OpenFeign和RestTemplate進行無縫對接,讓二者具有負載均衡的能力。OpenFeign默認集成了ribbon。

Ribbon組成

  • ribbon-core: 核心的通用性代碼。api一些配置。
  • ribbon-eureka:基于eureka封裝的模塊,能快速集成eureka。
  • ribbon-examples:學習示例。
  • ribbon-httpclient:基于apache httpClient封裝的rest客戶端,集成了負載均衡模塊,可以直接在項目中使用。
  • ribbon-loadbalancer:負載均衡模塊。
  • ribbon-transport:基于netty實現(xiàn)多協(xié)議的支持。比如http,tcp,udp等。

利用Eureka手寫負載均衡

代碼

	@Autowired
	DiscoveryClient discoveryClient;
	
	AtomicInteger atomicInteger = new AtomicInteger();
	
	@GetMapping("/client7")
	public Object client7() {
		
		
		List<ServiceInstance> instances = discoveryClient.getInstances("provider");
		
		
		// 隨機
		int nextInt = new Random().nextInt(instances.size());
		
	
		// 自定義輪訓算法
		int i = atomicInteger.getAndIncrement();
		instances.get(i % instances.size());
		
		// 權(quán)重。。
		for (ServiceInstance serviceInstance : instances) {
			//	int quanzhong = 	serviceInstance.getMetadata(); // 權(quán)重  1-9
		
		}
		ServiceInstance instance = instances.get(nextInt);
		
		// ribbon 完成客戶端的負載均衡,過濾掉down了的節(jié)點
		//	ServiceInstance instance = lb.choose("provider");
		
		String url ="http://" + instance.getHost() +":"+ instance.getPort() + "/getHi";
		   
		String respStr = restTemplate.getForObject(url, String.class);

		return respStr;
	}

@LoadBalanced

實際使用方式

  • 在eureka-client中使用Ribbon時, 不需要引入jar包,因為erueka-client已經(jīng)包括ribbon的jar包了。點進去看看。
  • 用@LoadBalance修飾RestTemplate可以實現(xiàn)負載均衡。
  • 由于RestTemplate的Bean實例化方法restTemplate被@LoadBalanced修飾,所以當調(diào)用restTemplate的postForObject方法發(fā)送HTTP請求時,會使用Ribbon進行負載均衡。
	//使用ribbon,添加@LoadBalance,使RestTemplate具備負載均衡能力。
	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}
	
	@Autowired
	private RestTemplate restTemplate;
	//serviceName=虛擬主機名。默認情況下,虛擬主機名和服務(wù)名一致。
	String url = "http://"+serviceName+"/send/alisms-template";
	//調(diào)用
	ResponseEntity<ResponseResult> resultEntity = restTemplate.postForEntity(url, smsSendRequest, ResponseResult.class);
	

	//測試根據(jù)serviceName獲取服務(wù)提供者信息。此時不需要@LoadBalance,默認是輪訓。
	@Autowired
	private LoadBalancerClient loadBalancerClient;
	// 不能將choseServiceName和 restTemplate寫在一起,因為后者中已經(jīng)有前者了。
	@GetMapping("/choseServiceName")
	public ResponseResult choseServiceName() {
		String serviceName = "service-sms";
		ServiceInstance si = loadBalancerClient.choose(serviceName);
		System.out.println("sms節(jié)點信息:url:"+si.getHost()+",port:"+si.getPort());
		
		return ResponseResult.success("");
	}

切換負載均衡策略

注解方式

@Bean
	public IRule myRule(){
		//return new RoundRobinRule();
		//return new RandomRule();
		return new RetryRule(); 

配置文件

針對服務(wù)定ribbon策略:

provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

給所有服務(wù)定ribbon策略:

ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

屬性配置方式優(yōu)先級高于Java代碼。

Ribbon脫離注冊中心

Ribbon可以和服務(wù)注冊中心Eureka一起工作,從服務(wù)注冊中心獲取服務(wù)端的地址信息,也可以在配置文件中使用listOfServers字段來設(shè)置服務(wù)端地址。

ribbon.eureka.enabled=false
ribbon.listOfServers=localhost:80,localhost:81

到此這篇關(guān)于SpringCloud中的Ribbon負載均衡詳細解讀的文章就介紹到這了,更多相關(guān)SpringCloud的Ribbon負載均衡內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java避免死鎖_動力節(jié)點Java學院整理

    Java避免死鎖_動力節(jié)點Java學院整理

    在有些情況下死鎖是可以避免的。本文將展示三種用于避免死鎖的技術(shù)。對java避免死鎖的相關(guān)知識感興趣的朋友一起通過本文學習吧
    2017-06-06
  • SpringBoot集成EasyExcel的步驟

    SpringBoot集成EasyExcel的步驟

    EasyExcel是阿里巴巴開源poi插件之一,主要解決了poi框架使用復(fù)雜,sax解析模式不容易操作,數(shù)據(jù)量大起來容易OOM,解決了POI并發(fā)造成的報錯。主要解決方式:通過解壓文件的方式加載,一行一行的加載,并且拋棄樣式字體等不重要的數(shù)據(jù),降低內(nèi)存的占用。
    2021-06-06
  • 詳解Servlet之過濾器(Filter)

    詳解Servlet之過濾器(Filter)

    本篇文章主要介紹了Servlet——過濾器(Filter),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Springboot解決no main manifest attribute錯誤

    Springboot解決no main manifest attribute錯誤

    在開發(fā)Springboot項目時,使用java -jar命令運行jar包可能出現(xiàn)no main manifest attribute錯誤,本文就來介紹一下該錯誤的解決方法,感興趣的可以了解一下
    2024-09-09
  • java webservice上傳下載文件代碼分享

    java webservice上傳下載文件代碼分享

    這篇文章主要為大家詳細介紹了java webservice上傳下載文件代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • SpringBoot使用ApplicationEvent&Listener完成業(yè)務(wù)解耦

    SpringBoot使用ApplicationEvent&Listener完成業(yè)務(wù)解耦

    這篇文章主要介紹了SpringBoot使用ApplicationEvent&Listener完成業(yè)務(wù)解耦示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • SpringBoot+ThreadLocal+AbstractRoutingDataSource實現(xiàn)動態(tài)切換數(shù)據(jù)源

    SpringBoot+ThreadLocal+AbstractRoutingDataSource實現(xiàn)動態(tài)切換數(shù)據(jù)源

    最近在做業(yè)務(wù)需求時,需要從不同的數(shù)據(jù)庫中獲取數(shù)據(jù)然后寫入到當前數(shù)據(jù)庫中,因此涉及到切換數(shù)據(jù)源問題,所以本文采用ThreadLocal+AbstractRoutingDataSource來模擬實現(xiàn)dynamic-datasource-spring-boot-starter中線程數(shù)據(jù)源切換,需要的朋友可以參考下
    2023-08-08
  • 25行Java代碼將普通圖片轉(zhuǎn)換為字符畫圖片和文本的實現(xiàn)

    25行Java代碼將普通圖片轉(zhuǎn)換為字符畫圖片和文本的實現(xiàn)

    這篇文章主要介紹了25行Java代碼將普通圖片轉(zhuǎn)換為字符畫圖片和文本的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 淺談JVM垃圾回收之哪些對象可以被回收

    淺談JVM垃圾回收之哪些對象可以被回收

    這篇文章主要介紹了JVM垃圾回收之哪些對象可以被回收,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Springboot通過url訪問本地圖片代碼實例

    Springboot通過url訪問本地圖片代碼實例

    這篇文章主要介紹了springboot通過url訪問本地圖片代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03

最新評論

兖州市| 淳安县| 韩城市| 修水县| 海淀区| 田林县| 咸丰县| 无棣县| 洛浦县| 嵊州市| 梓潼县| 高雄市| 南安市| 合江县| 石柱| 安塞县| 讷河市| 马山县| 天津市| 金华市| 封丘县| 茂名市| 准格尔旗| 正阳县| 万山特区| 彩票| 汉源县| 南华县| 芦山县| 犍为县| 利川市| 武城县| 巩义市| 蒙城县| 镶黄旗| 邢台县| 镇原县| 黄平县| 保康县| 鞍山市| 台湾省|