负载均衡 LoadBalancer

这篇具有很好参考价值的文章主要介绍了负载均衡 LoadBalancer。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

负载均衡

负载均衡一般分为服务端负载均衡客户端负载均衡

  • 服务端负载均衡:

指在服务器端进行负载均衡的策略。在这种策略下,负载均衡器位于服务器端(如 Nginx),当客户端发起服务调用时,根据服务器的负载情况,将请求分发到不同的服务器上,以实现请求的均衡分配。

负载均衡器可以根据特定的算法(如轮询、权重等)来选择合适的服务器。这种方式可以有效地提高系统的可用性和扩展性,但也会增加服务器端的压力。

  • 客户端负载均衡:

指在客户端进行负载均衡的策略。在这种策略下,负载均衡器位于客户端(如Loadbalancer、Ribbon),每个发起服务调用的客户端都有完整的目标服务地址列表,根据配置的负载均衡策略(如随机选择、加权轮询等),由客户端自己决定向哪台服务器发起调用。

客户端负载均衡可以减轻服务器端的压力,提高系统的性能和吞吐量。然而,客户端负载均衡依赖于客户端的实现,需要对客户端进行相应的配置和管理。

Ribbon

Spring Cloud Ribbon 是 NetFlix 开源的一个基于 HTTP 和 TCP 的客户端负载均衡器。

Ribbon 可以和 Eureka、Consul 等服务发现组件集成,通过向服务注册中心查询可用的服务列表,并通过一定的负载均衡算法(如轮训、随机等)选择目标服务实例。

Ribbon 已经进入维护模式,并且 Ribbon 2 并不与 Ribbon 1 相互兼容;

Ribbon 负载均衡策略有以下七种

  • 轮询(RoundRobinRule)

按照一定的顺序依次调用服务实例。例如有 ServerA、ServerB、ServerC 3个服务,按照 ABC 顺序依次调用服务。(按部就班)

默认超过 10 次获取到的 Server 都不可用,会返回一个空的 Server。

  • 权重(WeightedResponseTimeRule)

根据每个服务提供者的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性也就越低。(能者多劳)

实现原理:刚开始使用轮询策略则开启一个计时器,每一段时间收集一次所有服务提供者的平均响应时间,然后再给每个服务提供者附上一个权重,权重越高的服务被选中的概率也就越大。

  • 随机(RandomRule)

从服务提供者列表随机选择一个服务实例调用。(随性而为)

如果随机到的 Server 为 null 或者不可用的话,会 while 不停的循环选取。

  • 最小连接数(BestAvailableRule)

也称为最小并发数策略,首先遍历服务提供者列表,然后选择连接数最小的一个服务实例 。如果有相同的最小连接数,那么会调用轮询策略进行选取。(让最闲的来)

此策略会过滤掉故障服务,基于过去30分钟的统计结果选取当前并发量最小的服务节点,即最“闲”的节点作为目标地址。

  • 重试(RetryRule)

按照轮询策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定时间内不断地进行重试来获取服务,如果超过指定时间依然没有获取到服务实例,则返回 null。(卷土重来)

  • 可用性敏感(AvailabilityFilteringRule)

扩展了轮询策略,会先通过默认的轮询选取一个 Server,再去判断该 Server 是否超时可用,当前连接数是否超限,都成功再返回。

  • 区域敏感(ZoneAvoidanceRule)——默认策略

扩展了轮询策略,除了过滤超时和链接数过多的 Server,还会过滤掉不符合要求的 Zone 区域里面的所有节点, 在一个区域/机房内的服务实例中轮询。先过滤再轮询

修改 Ribbon 默认负载均衡策略方法如下:

在 application.yaml 配置文件中加入以下配置:

# 针对的被调用方微服务名称,不加就是全局生效
cloud-provider-8001:
  ribbon:
    # 设置为 最小连接数策略
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule
LoadBalancer

Spring Cloud LoadBalancer 是 Spring Cloud 团队在 Spring Cloud 2020 版本后引入的一个新的负载均衡组件。

LoadBalancer 提供了一个抽象的负载均衡接口,可以与多种负载均衡实现(如 Ribbon、Nacos、Consul等)进行匹配。

LoadBalancer 提供了两种负载均衡策略:

  • 轮询(RoundRobinLoadBalancer)
  • 随机(RandomLoadBalancer)

LoadBalancer 默认策略为轮询。

修改 LoadBalancer 默认负载均衡策略方法如下:

首先创建随机策略的配置类 LoadBalancerConfig,具体如下:

public class LoadBalancerConfig {
    /**
     * 将官方提供的 RandomLoadBalancer 注册为 Bean
     */
    @Bean
    public ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
    }
}

然后使用 @LoadBalancerClient 注解配置对应服务的负载均衡策略,具体如下:

@Configuration
@LoadBalancerClient(value = "cloud-provider-8001", configuration = LoadBalancerConfig.class)
public class BeanConfig {
    @Bean
    // 负载均衡
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

@LoadBalancerClient 注解也可以加在启动类上方,name 属性为调用的微服务的名称,configuration 属性为上面我们定义的随机负载均衡策略类。

我们可以通过以下方法进行验证负载均衡策略是否发生了改变,首先新建一个 provider-8002 模块,除了端口号不同之外,其他都一样。然后分别在 provider-8001 和 provider-8002 的控制类中加入如下接口:

@Value("${server.port}")
private String port;

@GetMapping("/get/port")
public String getPort() {
    return port;
}

然后在 openfeign-consumer80 模块中的 IOpenFeignService 接口服务中加入对应接口,调用远端服务。分别启动 provider-8001 和 provider-8002,这时在 Eureka 界面可以看到 cloud-provider-8001 有两个实例。

使用 Postman 调用接口,查看返回的端口号,可以发现,没有加上面配置之前,效果为 8001 和 8002 交替出现,加了之后,则为随机出现,如果觉得效果不太明显,可以多加两个 provider-8003、provider-8004。文章来源地址https://www.toymoban.com/news/detail-798579.html

到了这里,关于负载均衡 LoadBalancer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud - 新版淘汰 Ribbon,在 OpenFeign 中整合 LoadBalancer 负载均衡

    目录 一、LoadBalancer 负载均衡 1.1、前言 1.2、LoadBalancer 负载均衡底层实现原理 二、整合 OpenFeign + LoadBalancer 2.1、所需依赖 2.2、具体实现  2.3、自定义负载均衡策略 在 2020 年以前的 SpringCloud 采用 Ribbon 作为负载均衡,但是 2020 年之后,SpringCloud 吧 Ribbon 移除了,而是使用自己编

    2024年02月03日
    浏览(51)
  • SpringCloud Alibaba集成 Gateway(自定义负载均衡器)、Nacos(配置中心、注册中心)、Loadbalancer

    路由(route):路由是网关最基础的部分,路由信息由一个ID,一个目的URL、一组断言工厂和一 组Filter组成。如果断言为真,则说明请求URL和配置的路由匹配。 断言(Predicate):Java8中的断言函数,Spring Cloud Gateway中的断言函数输入类型是 Spring5.0框架中的ServerWebExchange。Sprin

    2024年04月12日
    浏览(64)
  • 负载均衡 LoadBalancer

    负载均衡 负载均衡一般分为 服务端负载均衡 和 客户端负载均衡 服务端负载均衡: 指在服务器端进行负载均衡的策略。在这种策略下,负载均衡器位于服务器端(如 Nginx),当客户端发起服务调用时,根据服务器的负载情况,将请求分发到不同的服务器上,以实现请求的均

    2024年01月17日
    浏览(58)
  • 微服务之LoadBalancer负载均衡服务调用

    LB,既负载均衡(Load Balancer),是高并发、高可用系统必不可少的关键组件,其目标是尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。 负载均衡的主要作用 高并发 :负载均衡通过算法调整负载,尽力均匀的分配应用集群中的各结点的工作量。

    2024年04月15日
    浏览(55)
  • 客户端负载均衡策略:loadBalancer,ribbon

    客户端负载均衡是指在分布式系统中,客户端通过某种策略将请求分发到多个服务提供者实例上,以达到负载均衡和提高系统的可用性和性能。 在 Java 生态系统中,Ribbon 是一个常用的客户端负载均衡框架,它是 Netflix 开源的一部分,被广泛应用于 Spring Cloud 中。Ribbon 提供了

    2024年02月08日
    浏览(44)
  • MetalLB:本地Kubernetes集群的LoadBalancer负载均衡利器

    在本地集群进行测试时,我们常常面临一个棘手的问题:Service Type不支持LoadBalancer,而我们只能选择使用NodePort作为替代。这种情况下,我们通常会配置Service为NodePort,并使用externalIPs将流量导入Kubernetes环境。然而,这些解决方案都存在明显的缺陷,使得在私有环境部署Kube

    2024年02月03日
    浏览(43)
  • Spring Cloud LoadBalancer 负载均衡策略与缓存机制

    目录 1. 什么是 LoadBalancer ? 2. 负载均衡策略的分类 2.1 常见的负载均衡策略 3. 为什么要学习 Spring Cloud Balancer ? 4. Spring Cloud LoadBalancer 内置的两种负载均衡策略 4.1 轮询负载均衡策略(默认的) 4.2 随机负载均衡策略 4.2.1 创建随机负载均衡策略  4.2.2 设置随机负载均衡策略

    2024年01月21日
    浏览(54)
  • Spring Cloud Alibaba全家桶(三)——微服务负载均衡器Ribbon与LoadBalancer

    本文为 微服务负载均衡器Ribbon与LoadBalancer 相关知识,下边将对 什么是Ribbon (包括: 客户端的负载均衡 、 服务端的负载均衡 、 常见负载均衡算法 ), Nacos使用Ribbon , Ribbon内核原理 (包括: Ribbon原理 , Ribbon负载均衡策略 , 饥饿加载 ), Spring Cloud LoadBalancer (包括:

    2024年02月02日
    浏览(40)
  • SpringCloud(3) Ribbon负载均衡,负载均衡策略,自定义负载均衡

    假设我们有一台 order-service 订单服务,两台 user-service 用户服务,当订单服务需要调用用户服务获取用户信息的时候,应该怎么分配调用哪台服务呢? 这时候就需要用到 Ribbon 组件了。 首先,我们发起远程调用的时候,指定的是需要调用的服务名称,然后我们会调用 Ribbon 组

    2024年02月11日
    浏览(46)
  • 【SpringCloud】Ribbon负载均衡

    🏡浩泽学编程 :个人主页  🔥 推荐专栏 :《深入浅出SpringBoot》《java对AI的调用开发》               《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 在Eureka注册中心中我们在添加完@LoadBalanced注解,即可实现负载均衡功能,现在一起

    2024年04月17日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包