首页 > 其他分享 >Ribbon负载均衡(九)

Ribbon负载均衡(九)

时间:2024-03-07 16:48:05浏览次数:15  
标签:负载 策略 eureka Ribbon 均衡 provider ribbon

1.什么是负载均衡

  负载均衡其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。

2.Ribbon负载均衡

  Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它是基于 Netflix Ribbon 实现的。   它不像 Spring Cloud 服务注册中心、配置中心、API 网关那样独立部署,它几乎 存在于每个 Spring Cloud 微服务中。包括 Feign 提供的声明式服务调用也是基于该 Ribbon 实现的。   Ribbon 默认提供很多种负载均衡算法,例如轮询、随机等等。甚至包含自定义 的负载均衡算法。   Ribbon 提供了一套微服务的负载均衡解决方案。

2.1 Ribbon 负载均衡策略

(1)轮询策略(默认)   策略对应类名: RoundRobinRule   实现原理:轮询策略表示每次都顺序取下一个 provider,比如一共有 5 个 provider,第 1 次取第 1 个,第 2 次取第 2 个,第 3 次取第 3 个,以此类推。 (2)权重轮询策略   策略对应类名: WeightedResponseTimeRule   实现原理: 根据每个 provider 的响应时间分配一个权重,响应时间越长,权重越小,被选 中的可能性越低。 原理:一开始为轮询策略,并开启一个计时器,每 30 秒收集一次每个 provider 的平均响应时间,当信息足够时,给每个 provider 附上一个权重,并按权重随机选择 provider,高权越重的 provider 会被高概率选中。 (3)随机策略   策略对应类名: RandomRule   实现原理:从 provider 列表中随机选择一个。 (4)最少并发数策略   策略对应类名: BestAvailableRule   实现原理:选择正在请求中的并发数最小的provider,除非这个provider在熔断中。 (5)重试策略   策略对应类名: RetryRule   实现原理:其实就是轮询策略的增强版,轮询策略服务不可用时不做处理,重 试策略服务不可用时会重新尝试集群中的其他节点。 (6)可用性敏感策略   策略对应类名: AvailabilityFilteringRule   实现原理:过滤性能差的 provider     第一种:过滤掉在 Eureka 中处于一直连接失败的 provider。     第二种:过滤掉高并发(繁忙)的 provider。 (7)区域敏感性策略   策略对应类名:ZoneAvoidanceRule

3.负载均衡不同方案的区别

  目前业界主流的负载均衡方案可以分成两类:   (1)集中式负载均衡(服务器负载均衡),即在 consumer 和 provider 之间使用独立 的负载均衡设施,由该设施负责 把访问请求通过某种策略转发至 provider;

  (2)进程内负载均衡(客户端负载均衡),将负载均衡逻辑集成到 consumer, consumer 从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择 出一个合适的 provider。Ribbon 属于后者,它只是一个类库,集成于 consumer 进程,consumer 通过它来获取 provider 的地址。

4.Ribbon负载均衡策略设置

4.1 全局设置

在启动类或配置类中注入负载均衡策略对象。所有服务请求均使用该策略。
@Bean
public RandomRule randomRule() {
return new RandomRule();
}

4.2局部设置

        修改配置文件指定服务的负载均衡策略。

# 负载均衡策略
# service-provider 为调用的服务的名称
service-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

5.Ribbon 点对点直连

点对点直连是指绕过注册中心,直接连接服务提供者获取服务,一般在测试阶 段使用比较多。

5.1 添加依赖

在调用方 pom 文件中引入 ribbon 依赖,需要注意的是如果 pom 中有 Eureka 的依赖,则需要去除 Eureka 的依赖。

<!-- netflix ribbon 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

5.2 配置文件

配置文件中关闭 Eureka,添加直连的服务地址。如果不设置负载均衡策略默认 使用轮询策略。

# 负载均衡策略
# service-provider 为调用的服务的名称
service-provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
# 点对点直连模式,指定具体的 Provider 服务列表,多个用逗号隔开
listOfServers: http://localhost:7070,http://localhost:7071
# 关闭 Eureka 实现 Ribbon 点对点直连
ribbon:
eureka:
enabled: false # false:关闭,true:开启

5.3 访问

关闭 Eureka 注册中心,服务提供者由于无法连接至注册中心所以会报连接异 常。但是服务是可以正常可消费的,所以目前使用的是点对点的方式来进行调用的。

6spring cloud使用ribbon实现负载负载均衡消费

搭建一个ribbon-consumer
pom.xml

    <packaging>jar</packaging>
 <name>ribbon-consumer</name>
 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

application.properties

spring.application.name=ribbon-consumer

server.port=31000

eureka.client.serviceUrl.defaultZone=http://localhost:20000/eureka/

RibbonConsumerApplication

@SpringBootApplication
@EnableDiscoveryClient
public class RibbonConsumerApplication {

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

    public static void main(String[] args) {
        new SpringApplicationBuilder(RibbonConsumerApplication.class)
                .web(WebApplicationType.SERVLET)
                .run(args);
    }

}

Controller

@RestController
public class Controller {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/sayHi")
    public String sayHi() {
        return restTemplate.getForObject(
                "http://eureka-client/sayHi",
                String.class);
    }

}

RibbonConfiguration
负载均衡的消费策略配置如下

@Configuration
public class RibbonConfiguration {

     @Bean
    public IRule defaultLBStrategy() {
        //可以在这里指定负载均衡的消费策略
        //return new RandomRule();使用随机的负载均衡消费策略
         //return new RetryRule 
        return new RoundRobinRule();//默认的消费策略
    }

}

以上就是ribbon的简单实现。

测试
使用上一篇文章的两个项目eureka-client和eureka-server两个项目 然后重新在搭建一个eureka-client-ribbon项目。eureka-client-ribbon是和eureka-client代码是一样的只是启动端口不同。
启动

分别启动四个项目。
项目启动的顺序依次是:eureka-serve->eureka-client->eureka-client-ribbon->ribbon-consumer

启动成功后再eureka控制台查看:

说明就启动成功
点击第一下是在30005的eureka-client项目上

点击第二下就跳到了30002的eureka-client-ribbon项目上了

这样就实现了ribbon负载均衡。

原文链接:https://blog.csdn.net/qq_40297844/article/details/109724138

原文链接:https://blog.csdn.net/JanuaryFM/article/details/120854666

标签:负载,策略,eureka,Ribbon,均衡,provider,ribbon
From: https://www.cnblogs.com/szrs/p/18059229

相关文章

  • nginx四层和七层负载的配置
    四层负载和七层负载是两种不同类型的负载均衡策略,它们分别在网络的不同层次上工作。在Nginx中,这两种负载均衡策略可以通过配置nginx.conf文件来实现。四层负载(L4LoadBalancing)四层负载,也称为传输层负载均衡,主要在网络模型的第四层(传输层)上工作。它处理TCP/UDP协议的流量,并根据......
  • nginx 同时配置四层和七层负载均衡
    在Nginx中,你可以同时配置四层和七层负载均衡,但这通常需要在不同的配置块中进行。四层负载均衡通常使用stream模块来处理非HTTP/HTTPS流量,而七层负载均衡则使用http模块来处理HTTP和HTTPS请求。以下是一个简化的Nginx配置文件示例,展示了如何同时配置四层和七层负载均衡:#四层负载......
  • 负载均衡的常用算法
    1、轮询法将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。2、随机法通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数......
  • VSTO:WinForms如何引用Ribbon.Invalidate
    问题描述:近期项目需要在VSTO插件中设计WinForms界面,该界面需要实现一个功能:当WinForms从外部应用中获取数据后,将其传递到editbox显示栏内。项目开发中遇到以下问题:WinForms中实例化Ribbon后,再引用其中的函数或Invalidate功能,在运行时会报错:System.NullReferenceException:“未将......
  • Nginx负载均衡配置方法
    首先,确保已经安装了nginx,然后编辑配置文件/etc/nginx/nginx.conf第一步:定义upstream组在配置文件中定义一个upstream组,用于指定一组后端服务器。每个服务器可以通过IP地址和端口号来指定,并且可以为每个服务器设置权重(weight)以表示它们处理请求的能力。upstreambackend_group......
  • “vSAN磁盘均衡”告警处理
    Symptoms免责声明:本文为 vSAN"Proactiverebalance"and"AutomaticRebalance"  的翻译版本。尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。有关最新内容,请参见英文版本。  Purpose本文旨在介绍vSAN“主动重新平衡和自动重新平衡......
  • 第三十天:负载均衡集群LVS
    一、集群和分布式系统性能扩展方式:ScaleUP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务ScaleOut:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,Cluster垂直扩展不再提及:随着计算机性能的增长,其价格会成倍增长单台计算机的性能是有上限的,不可......
  • 信道均衡有哪些实现方式?
    信道均衡的实现方式主要包括**线性自动应均衡、盲均衡和半盲均衡等**。具体如下:1.**线性自动应均衡**:这种方法使用一个自适应滤波器来调整其参数,以便输出信号与预期的信号尽可能接近。它依赖于已知的训练序列来调整滤波器的系数,以最小化误差。2.**盲均衡**:盲均衡技术不需要训练......
  • nginx负载均衡
    sudoyuminstall-yyum-utilssudoyum-config-manager--add-repohttps://rpm.releases.hashicorp.com/RHEL/hashicorp.reposudoyum-yinstallconsulunzipconsul_1.9.4_linux_amd64.zipmvconsul/usr/local/bin/consulversionconsul常用命令consul命令 描述agent 运行......
  • R语言宏观经济学:IS-LM曲线可视化货币市场均衡
    全文链接:http://tecdat.cn/?p=32249原文出处:拓端数据部落公众号凯恩斯相关理论主要是美国20世纪30年代的经济危机而提出的,主张政府干预经济,实行宏观调控。按照希克斯的观点,灵活偏好(L)和货币数量(M)决定着货币市场的均衡,而人们持有的货币数量既决定于利率(i),又决定于收入(y)的......