欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCloud中的Ribbon負(fù)載均衡詳細(xì)解讀

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

負(fù)載均衡

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

軟件負(fù)載均衡:nginx,lvs

硬件負(fù)載均衡:F5

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

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

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

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

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

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

客戶端負(fù)載均衡

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

服務(wù)端負(fù)載均衡

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

介紹:

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

Ribbon作為Spring Cloud的負(fù)載均衡機(jī)制的實(shí)現(xiàn),

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

Ribbon組成

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

利用Eureka手寫負(fù)載均衡

代碼

	@Autowired
	DiscoveryClient discoveryClient;
	
	AtomicInteger atomicInteger = new AtomicInteger();
	
	@GetMapping("/client7")
	public Object client7() {
		
		
		List<ServiceInstance> instances = discoveryClient.getInstances("provider");
		
		
		// 隨機(jī)
		int nextInt = new Random().nextInt(instances.size());
		
	
		// 自定義輪訓(xùn)算法
		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 完成客戶端的負(fù)載均衡,過(guò)濾掉down了的節(jié)點(diǎn)
		//	ServiceInstance instance = lb.choose("provider");
		
		String url ="http://" + instance.getHost() +":"+ instance.getPort() + "/getHi";
		   
		String respStr = restTemplate.getForObject(url, String.class);

		return respStr;
	}

@LoadBalanced

實(shí)際使用方式

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

	//測(cè)試根據(jù)serviceName獲取服務(wù)提供者信息。此時(shí)不需要@LoadBalance,默認(rèn)是輪訓(xùn)。
	@Autowired
	private LoadBalancerClient loadBalancerClient;
	// 不能將choseServiceName和 restTemplate寫在一起,因?yàn)楹笳咧幸呀?jīng)有前者了。
	@GetMapping("/choseServiceName")
	public ResponseResult choseServiceName() {
		String serviceName = "service-sms";
		ServiceInstance si = loadBalancerClient.choose(serviceName);
		System.out.println("sms節(jié)點(diǎn)信息:url:"+si.getHost()+",port:"+si.getPort());
		
		return ResponseResult.success("");
	}

切換負(fù)載均衡策略

注解方式

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

配置文件

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

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

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

ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

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

Ribbon脫離注冊(cè)中心

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

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

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

相關(guān)文章

  • Java通過(guò)Socket實(shí)現(xiàn)簡(jiǎn)單多人聊天室

    Java通過(guò)Socket實(shí)現(xiàn)簡(jiǎn)單多人聊天室

    這篇文章主要為大家詳細(xì)介紹了Java通過(guò)Socket實(shí)現(xiàn)簡(jiǎn)單多人聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • maven的pom文件與打包詳解

    maven的pom文件與打包詳解

    pom文件定于了一個(gè)maven項(xiàng)目的maven配置,一般pom文件的放在項(xiàng)目或者模塊的根目錄下。本文詳細(xì)的介紹了pom文件配置,感興趣的可以了解一下
    2021-08-08
  • 微服務(wù)通過(guò)Feign調(diào)用進(jìn)行密碼安全認(rèn)證操作

    微服務(wù)通過(guò)Feign調(diào)用進(jìn)行密碼安全認(rèn)證操作

    這篇文章主要介紹了微服務(wù)通過(guò)Feign調(diào)用進(jìn)行密碼安全認(rèn)證操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • mybatis?plus框架@TableField注解不生效問(wèn)題及解決方案

    mybatis?plus框架@TableField注解不生效問(wèn)題及解決方案

    最近遇到一個(gè)mybatis plus的問(wèn)題,@TableField注解不生效,導(dǎo)致查出來(lái)的字段反序列化后為空,今天通過(guò)本文給大家介紹下mybatis?plus框架的@TableField注解不生效問(wèn)題總結(jié),需要的朋友可以參考下
    2022-03-03
  • idea運(yùn)行vue項(xiàng)目設(shè)置自定義瀏覽器方式

    idea運(yùn)行vue項(xiàng)目設(shè)置自定義瀏覽器方式

    這篇文章主要介紹了idea運(yùn)行vue項(xiàng)目設(shè)置自定義瀏覽器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 利用javadoc注釋自動(dòng)生成Swagger注解

    利用javadoc注釋自動(dòng)生成Swagger注解

    由于現(xiàn)在controller方法上面沒(méi)有swagger注解,只能拿到接口url地址,無(wú)法獲得接口功能描述,所以本文為大家介紹一下如何利用javadoc注釋自動(dòng)生成Swagger注解,感興趣的可以了解下
    2023-08-08
  • Java中LinkedList和ArrayList的效率分析

    Java中LinkedList和ArrayList的效率分析

    本文主要介紹了Java中LinkedList和ArrayList的效率分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 詳解Java消息隊(duì)列-Spring整合ActiveMq

    詳解Java消息隊(duì)列-Spring整合ActiveMq

    本篇文章主要介紹了詳解Java消息隊(duì)列-Spring整合ActiveMq ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • SpringBoot Maven 項(xiàng)目 pom 中的 plugin 插件用法小結(jié)

    SpringBoot Maven 項(xiàng)目 pom 中的 plugin&n

    本文詳細(xì)介紹了Spring Boot Maven項(xiàng)目打包成jar文件時(shí)使用的spring-boot-maven-plugin插件,深入探討了插件的配置元素,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-01-01
  • Java實(shí)戰(zhàn)之實(shí)現(xiàn)一個(gè)好用的MybatisPlus代碼生成器

    Java實(shí)戰(zhàn)之實(shí)現(xiàn)一個(gè)好用的MybatisPlus代碼生成器

    這篇文章主要介紹了Java實(shí)戰(zhàn)之實(shí)現(xiàn)一個(gè)好用的MybatisPlus代碼生成器,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評(píng)論