国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Ribbon負(fù)載均衡調(diào)用】—— 每天一點(diǎn)小知識(shí)

這篇具有很好參考價(jià)值的文章主要介紹了【Ribbon負(fù)載均衡調(diào)用】—— 每天一點(diǎn)小知識(shí)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【Ribbon負(fù)載均衡調(diào)用】—— 每天一點(diǎn)小知識(shí),每天一點(diǎn)小知識(shí),ribbon,負(fù)載均衡,spring cloud

???????????????????????????????????????????????????????????????????????????????? R i b b o n 負(fù)載均衡調(diào)用 \color{#FF1493}{Ribbon負(fù)載均衡調(diào)用} Ribbon負(fù)載均衡調(diào)用?? ?????????


?? 仰望天空,妳我亦是行人.?
?? 個(gè)人主頁——微風(fēng)撞見云的博客??
?? 《數(shù)據(jù)結(jié)構(gòu)與算法》專欄的文章圖文并茂??生動(dòng)形象??簡(jiǎn)單易學(xué)!歡迎大家來踩踩~??
?? 《Java學(xué)習(xí)筆記》專欄的文章是本人在Java學(xué)習(xí)中總結(jié)的一些知識(shí)點(diǎn)~ ??
?? 《每天一點(diǎn)小知識(shí)》專欄的文章可以豐富你的知識(shí)庫,滴水成河~ ??
?? 希望本文能夠給讀者帶來一定的幫助~??文章粗淺,敬請(qǐng)批評(píng)指正!??



??Ribbon負(fù)載均衡調(diào)用

在現(xiàn)代分布式系統(tǒng)中,負(fù)載均衡是非常重要的組件,它可以確保服務(wù)的高可用性和性能優(yōu)化。Ribbon是Netflix開源的負(fù)載均衡器,它在Spring Cloud中被廣泛應(yīng)用,為微服務(wù)架構(gòu)中的服務(wù)消費(fèi)者提供了負(fù)載均衡的功能。本博客將介紹Ribbon的概述、使用RestTemplate進(jìn)行Ribbon負(fù)載均衡演示、Ribbon核心組件IRule的講解和使用,以及Ribbon負(fù)載均衡算法,帶領(lǐng)讀者逐步完成內(nèi)容,并通過代碼示例來加深理解。

【Ribbon負(fù)載均衡調(diào)用】—— 每天一點(diǎn)小知識(shí),每天一點(diǎn)小知識(shí),ribbon,負(fù)載均衡,spring cloud


1. Ribbon概述

??Ribbon是Netflix開源的負(fù)載均衡器,它是一個(gè)基于HTTP和TCP的客戶端負(fù)載均衡器,可用于在多個(gè)服務(wù)提供者之間進(jìn)行負(fù)載均衡。Ribbon的主要目標(biāo)是提供客戶端的負(fù)載均衡和容錯(cuò)能力,通過在服務(wù)消費(fèi)者端實(shí)現(xiàn)負(fù)載均衡,可以有效地將請(qǐng)求分發(fā)到不同的服務(wù)實(shí)例上,從而提高系統(tǒng)的可用性和性能。

??Ribbon在Spring Cloud中被廣泛應(yīng)用,結(jié)合其他組件如Eureka等,可以為微服務(wù)架構(gòu)中的服務(wù)消費(fèi)者提供高效可靠的負(fù)載均衡支持。下面,我們將通過一個(gè)簡(jiǎn)單的示例來演示如何使用RestTemplate實(shí)現(xiàn)Ribbon負(fù)載均衡。

2. Ribbon負(fù)載均衡演示(使用RestTemplate)

??首先,我們需要?jiǎng)?chuàng)建一個(gè)Spring Boot項(xiàng)目,并添加相關(guān)依賴:

<!-- pom.xml -->
<dependencies>
    <!-- 其他依賴 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
</dependencies>

??假設(shè)我們有一個(gè)提供"Hello World"服務(wù)的服務(wù)提供者,它有多個(gè)實(shí)例運(yùn)行,并注冊(cè)到Eureka服務(wù)器上?,F(xiàn)在,我們將創(chuàng)建一個(gè)服務(wù)消費(fèi)者,并使用Ribbon來調(diào)用這個(gè)服務(wù)的多個(gè)實(shí)例。

??application.properties中配置Eureka服務(wù)器和Ribbon的相關(guān)信息:

# application.properties
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

??接下來,我們創(chuàng)建一個(gè)服務(wù)消費(fèi)者,并在其中使用RestTemplate進(jìn)行Ribbon負(fù)載均衡調(diào)用:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RibbonConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

@RestController
public class HelloController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/hello")
    public String sayHello() {
        // 使用服務(wù)名替代具體的URL,RestTemplate會(huì)自動(dòng)處理負(fù)載均衡
        ResponseEntity<String> response = restTemplate.getForEntity("http://hello-service/hello", String.class);
        return response.getBody();
    }
}

??在上面的代碼中,我們通過@LoadBalanced注解創(chuàng)建了一個(gè)具有負(fù)載均衡能力的RestTemplate。在調(diào)用服務(wù)提供者時(shí),我們使用服務(wù)名(“hello-service”)來代替具體的URL,Ribbon會(huì)自動(dòng)幫助我們選擇一個(gè)可用的實(shí)例進(jìn)行調(diào)用。這樣,我們就完成了Ribbon負(fù)載均衡的演示。

3. Ribbon核心組件IRule講解和使用

??在Ribbon中,IRule是負(fù)載均衡的核心組件,它定義了負(fù)載均衡的策略。Ribbon提供了多種內(nèi)置的IRule實(shí)現(xiàn),同時(shí)也支持自定義實(shí)現(xiàn)。

??Ribbon內(nèi)置的一些常用IRule實(shí)現(xiàn)包括:

  • RoundRobinRule:輪詢策略,默認(rèn)的負(fù)載均衡策略,按順序依次選擇服務(wù)實(shí)例。
  • RandomRule:隨機(jī)策略,隨機(jī)選擇一個(gè)可用的服務(wù)實(shí)例。
  • WeightedResponseTimeRule:根據(jù)實(shí)例的響應(yīng)時(shí)間來分配權(quán)重,響應(yīng)時(shí)間越短的實(shí)例被選中的概率越大。

??我們可以通過配置修改IRule的默認(rèn)實(shí)現(xiàn)。在application.properties中添加以下配置:

# application.properties
ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

??上述配置將使用RandomRule替代默認(rèn)的輪詢策略。

??除了使用內(nèi)置的IRule實(shí)現(xiàn),我們還可以自定義IRule,以滿足特定的負(fù)載均衡需求。自定義IRule需要實(shí)現(xiàn)com.netflix.loadbalancer.IRule接口,并使用@Configuration注解將其聲明為配置類。

4. Ribbon負(fù)載均衡算法

??Ribbon在負(fù)載均衡時(shí)采用了多種算法來選擇服務(wù)實(shí)例。前面提到了一些常用的內(nèi)置IRule實(shí)現(xiàn),它們對(duì)應(yīng)了不同的負(fù)載均衡算法。以下是一些常見的負(fù)載均衡算法:

  • 輪詢(Round Robin):依次按順序選擇服務(wù)實(shí)例,逐個(gè)進(jìn)行調(diào)度,循環(huán)往復(fù)。
  • 隨機(jī)(Random):隨機(jī)選擇一個(gè)可用的服務(wù)實(shí)例。
  • 加權(quán)輪詢(Weighted Round Robin):根據(jù)權(quán)重來進(jìn)行輪詢選擇,權(quán)重越高的實(shí)例被選中的概率越大。
  • 加權(quán)隨機(jī)(Weighted Random):根據(jù)權(quán)重來進(jìn)行隨機(jī)選擇,權(quán)重越高的實(shí)例被選中的概率越大。
  • 最少連接數(shù)(Least Connections):選擇當(dāng)前連接數(shù)最少的實(shí)例,以達(dá)到請(qǐng)求分發(fā)的負(fù)載均衡效果,適用于處理連接耗時(shí)較長(zhǎng)的場(chǎng)景。
  • 響應(yīng)時(shí)間加權(quán)(Weighted Response Time):根據(jù)實(shí)例的響應(yīng)時(shí)間來分配權(quán)重,響應(yīng)時(shí)間越短的實(shí)例被選中的概率越大,適用于處理響應(yīng)速度較快的服務(wù)。

??選擇合適的負(fù)載均衡算法取決于實(shí)際業(yè)務(wù)場(chǎng)景和系統(tǒng)需求。Ribbon提供了多種內(nèi)置算法,同時(shí)也支持自定義算法來滿足特定的負(fù)載均衡需求。

??為了演示Ribbon負(fù)載均衡算法的效果,我們將使用加權(quán)隨機(jī)算法。我們需要自定義一個(gè)IRule,并在配置中指定使用這個(gè)自定義的規(guī)則。

??創(chuàng)建一個(gè)自定義的IRule實(shí)現(xiàn):

import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.BaseLoadBalancer;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.Server;

import java.util.List;
import java.util.Random;

public class WeightedRandomRule implements IRule {

    private ILoadBalancer lb;

    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
        // 初始化操作,此處不需要做任何處理
    }

    @Override
    public Server choose(Object o) {
        List<Server> servers = lb.getAllServers();
        if (servers.isEmpty()) {
            return null;
        }

        // 計(jì)算總的權(quán)重值
        int totalWeight = servers.stream().mapToInt(this::getWeight).sum();

        // 生成隨機(jī)數(shù)并根據(jù)權(quán)重進(jìn)行選擇
        int randomWeight = new Random().nextInt(totalWeight);
        int currentWeight = 0;
        for (Server server : servers) {
            currentWeight += getWeight(server);
            if (currentWeight > randomWeight) {
                return server;
            }
        }

        // 如果未選擇到服務(wù)實(shí)例,返回null
        return null;
    }

    private int getWeight(Server server) {
        // 這里可以根據(jù)實(shí)際情況從服務(wù)器的元數(shù)據(jù)中獲取權(quán)重值
        return 1; // 假設(shè)所有服務(wù)實(shí)例的權(quán)重均為1
    }

    @Override
    public ILoadBalancer getLoadBalancer() {
        return lb;
    }

    @Override
    public void setLoadBalancer(ILoadBalancer iLoadBalancer) {
        this.lb = iLoadBalancer;
    }
}

??接下來,在配置類中使用這個(gè)自定義的規(guī)則:

@Configuration
public class RibbonConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Bean
    public IRule ribbonRule() {
        return new WeightedRandomRule();
    }
}

??在上述代碼中,我們自定義了一個(gè)WeightedRandomRule,它實(shí)現(xiàn)了加權(quán)隨機(jī)算法。在配置類中,我們將這個(gè)規(guī)則定義為一個(gè)Bean,這樣Ribbon就會(huì)使用我們自定義的算法來進(jìn)行負(fù)載均衡。


注意:上述示例代碼為簡(jiǎn)化的演示版本,并未包含完整的異常處理和配置細(xì)節(jié)。在實(shí)際項(xiàng)目中,需要根據(jù)具體情況進(jìn)行進(jìn)一步完善。

【Ribbon負(fù)載均衡調(diào)用】—— 每天一點(diǎn)小知識(shí),每天一點(diǎn)小知識(shí),ribbon,負(fù)載均衡,spring cloud


??結(jié)語

??初學(xué)一門技術(shù)時(shí),總有些許的疑惑,別怕,它們是我們學(xué)習(xí)路上的點(diǎn)點(diǎn)繁星,幫助我們不斷成長(zhǎng)。

??積少成多,滴水成河。文章粗淺,希望對(duì)大家有幫助!文章來源地址http://www.zghlxwxcb.cn/news/detail-608290.html

到了這里,關(guān)于【Ribbon負(fù)載均衡調(diào)用】—— 每天一點(diǎn)小知識(shí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • springcloud Ribbon負(fù)載均衡服務(wù)調(diào)用

    springcloud Ribbon負(fù)載均衡服務(wù)調(diào)用

    地址:https://github.com/13thm/study_springcloud/tree/main/days6_Ribbon Spring Cloud Ribbon是基于Netflix Ribbon實(shí)現(xiàn)的一套客戶端 負(fù)載均衡的工具。 簡(jiǎn)單的說,Ribbon是Netflix發(fā)布的開源項(xiàng)目,主要功能是提供客戶端的軟件負(fù)載均衡算法和服務(wù)調(diào)用。Ribbon客戶端組件提供一系列完善的配置項(xiàng)如連接超時(shí)

    2024年01月20日
    瀏覽(20)
  • Spring Cloud Ribbon:負(fù)載均衡

    1. 介紹 Spring Cloud Ribbon 1.1 什么是 Spring Cloud Ribbon Spring Cloud Ribbon是Netflix開源的負(fù)載均衡器,它為分布式服務(wù)提供了客戶端負(fù)載均衡的功能。Ribbon可以根據(jù)一系列的負(fù)載均衡算法和配置策略,將客戶端的請(qǐng)求動(dòng)態(tài)分發(fā)到多個(gè)服務(wù)實(shí)例上,以實(shí)現(xiàn)高可用性和性能優(yōu)化。 1.2 負(fù)載均

    2024年02月19日
    瀏覽(22)
  • Spring Clould 負(fù)載均衡 - Ribbon

    Spring Clould 負(fù)載均衡 - Ribbon

    ?視頻地址:微服務(wù)(SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式)? 具體實(shí)現(xiàn)時(shí)通過@LoaBalanced注解實(shí)現(xiàn),表示RestTemplate要被Ribbon攔截處理 orderservice調(diào)用user時(shí)候,會(huì)先發(fā)送請(qǐng)求到Ribbon,Ribbon會(huì)到Eureka查詢注冊(cè)的user服務(wù),查詢到后再通過?Ribbon負(fù)載均衡選擇調(diào)用具體的服務(wù)。 ?具體

    2024年02月12日
    瀏覽(17)
  • 【Spring Cloud 四】Ribbon負(fù)載均衡

    【Spring Cloud 四】Ribbon負(fù)載均衡

    【Spring Cloud一】微服務(wù)基本知識(shí) 【Spring Cloud 三】Eureka服務(wù)注冊(cè)與服務(wù)發(fā)現(xiàn) 目前公司項(xiàng)目使用的注冊(cè)中心主要是Spring Cloud Alibaba的Nacos做的注冊(cè)中心和配置中心。并且Nacos使用了Ribbon作為默認(rèn)的負(fù)載均衡器。但是相當(dāng)于將Ribbon的負(fù)載均衡給透明化了,日常開發(fā)明面上是看不到

    2024年02月14日
    瀏覽(27)
  • 【SpringCloud】Eureka基于Ribbon負(fù)載均衡的調(diào)用鏈路流程分析

    【SpringCloud】Eureka基于Ribbon負(fù)載均衡的調(diào)用鏈路流程分析

    微服務(wù)間相互調(diào)用的基礎(chǔ)上,服務(wù)間的調(diào)用更多是以調(diào)用某多實(shí)例服務(wù)下的某個(gè)實(shí)例的形式。而這就需要用到負(fù)載均衡技術(shù)。對(duì)于開發(fā)者而言,只要通過@LoadBalance注解就開啟了負(fù)載均衡。如此簡(jiǎn)單的操作底層究竟是什么樣的,我想你也很想知道。 在《SpringCloud集成Eureka并實(shí)現(xiàn)

    2024年02月05日
    瀏覽(25)
  • Spring Cloud - Ribbon 負(fù)載均衡原理、負(fù)載策略、懶加載

    Spring Cloud - Ribbon 負(fù)載均衡原理、負(fù)載策略、懶加載

    目錄 ?編輯 一、Ribbon 負(fù)載均衡原理 1.1、前言 1.2、負(fù)載均衡的工作流程 二、負(fù)載均衡策略 2.1、策略原理 2.2、負(fù)載均衡自定義方式 三、Ribbon 加載方式 ps:案例是上一章所講的?“根據(jù)訂單id查詢訂單的同時(shí),把訂單所屬的用戶信息一起返回”? 。 上一章我們講到 order-servi

    2024年02月09日
    瀏覽(23)
  • 1.3 eureka+ribbon,完成服務(wù)注冊(cè)與調(diào)用,負(fù)載均衡源碼追蹤

    1.3 eureka+ribbon,完成服務(wù)注冊(cè)與調(diào)用,負(fù)載均衡源碼追蹤

    本篇繼先前發(fā)布的1.2 eureka注冊(cè)中心,完成服務(wù)注冊(cè)的內(nèi)容 。 目錄 環(huán)境搭建 采用eureka+ribbon的方式,對(duì)多個(gè)user服務(wù)發(fā)送請(qǐng)求,并實(shí)現(xiàn)負(fù)載均衡 負(fù)載均衡原理 負(fù)載均衡源碼追蹤 負(fù)載均衡策略 如何選擇負(fù)載均衡策略? 饑餓加載 復(fù)制(補(bǔ)充) 給order模塊和user模塊建立獨(dú)立的數(shù)

    2024年02月14日
    瀏覽(20)
  • nacos注冊(cè)中心+Ribbon負(fù)載均衡+完成openfeign的調(diào)用(超詳細(xì)步驟)

    nacos注冊(cè)中心+Ribbon負(fù)載均衡+完成openfeign的調(diào)用(超詳細(xì)步驟)

    目錄 1.注冊(cè)中心 1.1.nacos注冊(cè)中心 1.2.?微服務(wù)注冊(cè)和拉取注冊(cè)中心的內(nèi)容 2.3.修改訂單微服務(wù)的代碼 3.負(fù)載均衡組件 3.1.什么是負(fù)載均衡 3.2.什么是Ribbon 3.3.Ribbon 的主要作用 3.4.Ribbon提供的負(fù)載均衡策略 4.openfeign完成服務(wù)調(diào)用 4.1.什么是OpenFeign 4.2.完成openfeign的調(diào)用 ?繼? 微服務(wù)

    2024年02月16日
    瀏覽(26)
  • 【Spring Cloud】Ribbon 中的幾種負(fù)載均衡策略

    【Spring Cloud】Ribbon 中的幾種負(fù)載均衡策略

    負(fù)載均衡通常有兩種實(shí)現(xiàn)手段,一種是服務(wù)端負(fù)載均衡器,另一種是客戶端負(fù)載均衡器,而我們今天的主角 Ribbon 就屬于后者——客戶端負(fù)載均衡器。 服務(wù)端負(fù)載均衡器的問題是,它提供了更強(qiáng)的流量控制權(quán),但無法滿足不同的消費(fèi)者希望使用不同負(fù)載均衡策略的需求,而使

    2024年02月15日
    瀏覽(27)
  • 【Spring Cloud】Ribbon 實(shí)現(xiàn)負(fù)載均衡的原理,策略以及饑餓加載

    【Spring Cloud】Ribbon 實(shí)現(xiàn)負(fù)載均衡的原理,策略以及饑餓加載

    在前文《深入理解 Eureka 注冊(cè)中心的原理、服務(wù)的注冊(cè)與發(fā)現(xiàn)》中,介紹了如何使用 Eureka 實(shí)現(xiàn)服務(wù)的注冊(cè)與拉取,并且通過添加 @LoadBalanced 注解實(shí)現(xiàn)了負(fù)載均衡。這種自動(dòng)化的背后隱藏著許多疑問: 服務(wù)是在何時(shí)進(jìn)行拉取的? 負(fù)載均衡是如何實(shí)現(xiàn)的? 負(fù)載均衡的原理和策略

    2024年02月07日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包