Spring cloud alibaba之Ribbon负载均衡方案

目录
  • 1.什么是Ribbon
  • 1.1客户端的负载均衡
    • 1.2服务器端的负载均衡
    • 1.3常见负载均衡算法
  • 2.Nacos使用Ribbon
  • 3.Ribbon负载均衡策略
    • 3.1常用负载均衡描述
    • 3.3修改默认的负载均衡策略--配置文件的方式
    • 3.4自定义负载均衡策略
  • 4.使用spring cloud loadbalancer替代ribbon

1.什么是Ribbon

目前主流的负载均衡方案分为以下两种:

(1)集中式负载均衡:在消费者和服务提供者中间使用独立的代理方式进行负载,有硬件的(F5),软件的Nginx

(2)客户端事先拿到提供者请求连接集合,根据自己的请求情况做负载均衡,Ribbon就属于客户端自己做负载均衡。

Spring cloud Ribbon是基于Netflix Ribbon实现的一套客户端的负载均衡工具,Ribbon客户端提供一系列完善的配置,如超时、重试等。通过Load Balancer获取到服务器提供的所有机器实例,Ribbon会自动基于某种规则(轮询、随机)去调用这些服务。Ribbon也可以实现自己的负载均衡算法。

1.1客户端的负载均衡

例如spring cloud中的Ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,这是客户端负载均衡,即在客户端进行负载均衡算法分配。

1.2服务器端的负载均衡

例如通过Nginx进行负载均衡,先发送请求,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端进行负载均衡算法分配。

1.3常见负载均衡算法

(1)随机:通过随机选择服务进行执行,一般这种方法使用较少

(2)轮询:负载均衡默认实现方式,请求来之后排队处理

(3)加权轮询:通过对服务器性能的分型,给高配置、低负载的服务器分配更高的权重,均衡各个服务器的压力

(4)地址Hash,通过客户端地址请求地址的hash值取模映射进行调度,

(5)最小链接数:即使请求均衡了,压力不一定会均衡,最小链接数法就是根据服务器的情况,例如请求积压数的参数,将请求分配到当前压力最小的服务器上

2.Nacos使用Ribbon

(1)Nacos disconvery中默认已经引入了Ribbon,不需要单独引入

(2)添加@LoadBalanced注解

(3)调用的时候使用服务器名称替代ip+端口,即使用默认轮询的负载均衡方式

3.Ribbon负载均衡策略

3.1常用负载均衡描述

①RandomRule:随机选择一个服务实例

②RoundRobinRule:轮询负载均衡策略

③RetryTule:在轮询的基础上进行重试,一直重试的次数由服务连接的超时时间控制

④WeightedResponseTimeRule:一个服务的平均响应时间越短,则权重越大,那么改实例被选中执行任务的概率也越大

⑤BestAvaliableRule:过滤掉失效的服务实例,顺便找出并发最小的服务实例来使用

⑥ZoneAvoidanceRule:判断所在的区域,选择最近的服务调用

⑦NacosRule:按随机与配置的权重进行选择服务器

3.2修改默认的负载均衡策略--配置类的方式

①赋值一份消费端项目OrderNacos,重命名为OrderRibbon

删除OrderRibbon中原先的OrderNacos.iml文件

修改OrderRibbon的pom.xml的ArtifactId值

把新添加的OrderRibbon添加到父项目的pom.xml的module中

刷新maven项目

②创建RibbonConfig配置类

使用@Configuration标识是配置类,使用@Bean注入到spring容器中,方法名必须叫iRule,否则无效。

/**
 * 重写负载均衡配置类
 */
@Configuration
public class RibbonConfig {

    //方法名一定要叫iRule
    @Bean
    public IRule iRule(){
        return new RandomRule();
    }
}

****注意此配置类不能放在@SpringBootApplication的注解@CompentScan扫描得到的地方,否则自定义的配置类就会被所有的RibbonClients共享,

springboot启动类,没有配置扫描范围的话,默认扫描到与启动类OrderApplication同目录级别的文件,此处为qingyun包下的文件都会被扫描到。

配置的目录如下:

③在启动类中使用注解@RibbonClients加入配置的自定义负载均衡器,value里面可以配置多个负载均衡器,是个数组类型的值;调用服务创建的RestTemplate使用@LoadBalanced进行修饰。

启动消费者,两个不同端口的服务提供者,通过页面访问,查看负载均衡机制由之前默认的改为轮询的方式

3.3修改默认的负载均衡策略--配置文件的方式

使用配置文件的方式设定负载均衡方式,具体到某个服务,格式:服务名.ribbon.NFLoadBalancerRuleClassName=服务方式

stock-service.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule

在nacos管理界面配置服务器的权重,权重越大,被选中的概率越大。

也可以在项目配置文件中设置

#设置服务的权重
spring.cloud.nacos.discovery.weight=4

3.4自定义负载均衡策略

(1)定义一个类继承AbstractLoadBalancerRule,重写choose方法

/**
 * 自定义负载均衡策略
 */
public class CustomRule extends AbstractLoadBalancerRule {

    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {

    }

    @Override
    public Server choose(Object o) {
        ILoadBalancer loadBalancer = this.getLoadBalancer();

        //获取当前请求的实例集合
        List<Server> reachableServers = loadBalancer.getReachableServers();

        //使用线程安全生成一个随机数
        int i = ThreadLocalRandom.current().nextInt(reachableServers.size());

        //获取服务
        Server server = reachableServers.get(i);

        return server;
    }
}

(2)在application.properties中添加配置信息,指向自定义的配置类

stock-service.ribbon.NFLoadBalancerRuleClassName=com.rule.CustomRule

(3)开启ribbon饥饿加载

当没有任何配置的情况下,第一次请求服务时,才会请求加载对应的服务实例

可以在配置文件application.properties中配置饥饿加载

#开启ribbon饥饿加载
ribbon.eager-load.enabled=true
#饥饿加载是服务,多个使用逗号隔开
ribbon.eager-load.clients=stock-service

启动项目的时候,加载配置服务使用的负载均衡策略

4.使用spring cloud loadbalancer替代ribbon

(1)在pom.xml中引入nacos-discovery时,去除ribbon,此时项目依赖的包里面已经移除ribbon

(2)pom.xml中添加loadbalancer依赖,前提是项目中已经引入了spring cloud依赖(父maven已经引入)

  <!-- 添加loadbalancer依赖-->
  <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  </dependency>

(3)创建RestTemplate时,需要加@LoadBalanced

//程序启动时创建RestTemplate
    //使用注解LoadBalanced标识负载均衡,默认轮询的方式
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate build = builder.build();
        return build;
    }

(4)application.properties中禁用ribbon

#禁用ribbon
spring.cloud.loadbalancer.ribbon.enabled=false

(5)若是想自定义loadbalancer,与自定义ribbon类似的方式,使用@LoadBalancerClients配置到springboot启动类中

到此这篇关于Spring cloud alibaba--Ribbon负载均衡的文章就介绍到这了,更多相关Spring cloud alibaba--Ribbon负载均衡内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring Cloud Alibaba使用Sentinel实现接口限流

    最近管点闲事浪费了不少时间,感谢网友 libinwalan 的留言提醒.及时纠正路线,继续跟大家一起学习Spring Cloud Alibaba. Nacos作为注册中心和配置中心的基础教程,到这里先告一段落,后续与其他结合的内容等讲到的时候再一起拿出来说,不然内容会有点跳跃.接下来我们就来一起学习一下Spring Cloud Alibaba下的另外一个重要组件:Sentinel. Sentinel是什么 Sentinel的官方标题是:分布式系统的流量防卫兵.从名字上来看,很容易就能猜到它是用来

  • Spring Cloud Alibaba 之 Nacos教程详解

    Nacos 技术讲解 一提到分布式系统就不的不提一下 CAP 原则 Nacos简介 Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现.配置管理.服务治理的综合性解决方案. 官方介绍是这样的: Nacos致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您实现动态服务发现.服务配置管理.服务及流量管理.Nacos帮助您更敏捷和容易地构建.交付和管理微服务平台.Nacos是构建以"服务"为中心的现代应用架构的服务基础设施. 什么是CAP CAP原则

  • Spring Cloud Alibaba Nacos 入门详解

    概览 阿里巴巴在2018年7月份发布Nacos, Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.并表示在6-8个月完成到生产可用的0.8版本,目前版本是0.9版本. Nacos提供四大功能 服务发现和服务健康检查 Nacos使服务更容易注册自己并通过DNS或HTTP接口发现其他服务.Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求. 动态配置管理 动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置.Nacos消除了在更新配置

  • SpringCloud-Alibaba-Nacos启动失败解决方案

    下载及启动 Nacos 下载地址:https://github.com/alibaba/nacos/releases 在Windows下,进入bin目录,双击 startup.cmd 即可运行 启动出现问题 问题:双击 startup.cmd 启动失败,窗口一闪而过 你需要先去试试你的 Tomcat 能否启动:进入 Tomcat 安装目录 bin 文件夹,双击 startup.bat 如果能正常启动,出门右转,下面的不用看了

  • SpringCloud与Consul集成实现负载均衡功能

    负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术.负载均衡将特定的业务(网络服务.网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性.负载均衡基本概念有:实服务.实服务组.虚服务.调度算法.持续性等,其常用应用场景主要是服务器负载均衡,链路负载均衡. 一.背景 SpringCloud微服务目前比较流行,其中大都在使用的服务注册与发现是Eureka,最近研究了Consul的集群搭建,现使用Consul实现服务的负载均衡.其主要拓扑结构

  • IDEA 中 30 秒创建一个 Spring Cloud Alibaba 工程

    如果你想使用 Spring Cloud Alibaba,那么你遇到的第一个问题一定是如何快速的创建一个脚手架工程. 近日,阿里巴巴发布了 Spring 的国内脚手架定制版 Aliyun Java Initializer,因为全中文界面和流畅速度,被广大开发者热传.Spring 脚手架为开发者提供了丰富的可选组件,并且可以选择多种打包方式,大大方便了开发人员的使用.Web 端 Spring 脚手架可以帮助用户快速上手,但很多开发者也面临一个问题:在 Web 版本 Spring 脚手架生成工程最终要

  • 详解Spring Cloud Alibaba Sidecar多语言微服务异构

    自 Spring Cloud Alibaba 2.1.1 版本后增加了 spring-cloud-alibaba-sidecar 模块作为作为一个代理的服务来间接性的让其他语言可以使用spring cloud alibaba等相关组件.通过与网关的来进行路由的映射,从而可以做到服务的获取,然后可以使用Ribbon间接性调用. 如上图, Spring Cloud 应用 请求 sidercar 然后转发给其他语言的模块,优势是对于异构服务代码 零侵入,不需要直接根据 nacos 或其他注册中心 ap

  • Spring cloud alibaba之Ribbon负载均衡方案

    目录 1.什么是Ribbon 1.1客户端的负载均衡 1.2服务器端的负载均衡 1.3常见负载均衡算法 2.Nacos使用Ribbon 3.Ribbon负载均衡策略 3.1常用负载均衡描述 3.3修改默认的负载均衡策略--配置文件的方式 3.4自定义负载均衡策略 4.使用spring cloud loadbalancer替代ribbon 1.什么是Ribbon 目前主流的负载均衡方案分为以下两种: (1)集中式负载均衡:在消费者和服务提供者中间使用独立的代理方式进行负载,有硬件的(F5),软件的

  • Spring cloud alibaba之Ribbon负载均衡实现方案

    目录 1.什么是Ribbon 1.1客户端的负载均衡 1.2服务器端的负载均衡 1.3常见负载均衡算法 2.Nacos使用Ribbon 3.Ribbon负载均衡策略 3.1常用负载均衡描述 3.3修改默认的负载均衡策略--配置文件的方式 3.4自定义负载均衡策略 4.使用springcloudloadbalancer替代ribbon 1.什么是Ribbon 目前主流的负载均衡方案分为以下两种: (1)集中式负载均衡:在消费者和服务提供者中间使用独立的代理方式进行负载,有硬件的(F5),软件的Ng

  • Spring Cloud如何切换Ribbon负载均衡模式

    这篇文章主要介绍了Spring Cloud如何切换Ribbon负载均衡模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用.Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心.配

  • Spring Cloud Alibaba Nacos服务治理平台,服务注册、RestTemplate实现微服务之间访问负载均衡访问的问题

    目录 Nacos简介 ☘Spring Cloud 组件依赖版本 ☘Nacos部署 ☘访问Nacos平台 Nacos服务注册.微服务访问.负载均衡实现 nacos-consumer微服务创建 ☘nacos-provider微服务创建 测试 Nacos简介 Github:https://github.com/alibaba/nacos官网文档:https://nacos.io/zh-cn/docs/what-is-nacos.htmlNacos 提供了发现.配置和管理微服务能力,能快速实现动态服务发

  • Spring Cloud Alibaba负载均衡实现方式

    目录 一.负载均衡的两种方式 服务器端负载均衡 客户端侧负载均衡 二.手写一个客户端侧负载均衡器 三.使用Ribbon实现负载均衡 一.负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请求会到我们的的nginx上去,nginx作为反向代理,然后路由给后端的服务器,由于负载均衡算法是nginx提供的,而nginx是部署到服务器端的,所以这种方式又被称为服务器端负载均衡. 客户端侧负载均衡 现在有三个实例,内容中心可以通过discoveryClient 获取到用户中心的实例信息,如果我们再订

  • 详解spring cloud中使用Ribbon实现客户端的软负载均衡

    开篇 本例是在springboot整合H2内存数据库,实现单元测试与数据库无关性和使用RestTemplate消费spring boot的Restful服务两个示例的基础上改造而来 在使用RestTemplate来消费spring boot的Restful服务示例中,我们提到,调用spring boot服务的时候,需要将服务的URL写死或者是写在配置文件中,但这两种方式,无论哪一种,一旦ip地址发生了变化,都需要改动程序,并重新部署服务,使用Ribbon的时候,可以有效的避免这个问题. 前言:

  • spring cloud 集成 ribbon负载均衡的实例代码

    本文比较简单集成ribbon,如需要更详细,请查看我的更多博客内容. 首先创建两个服务提供者 服务一,集成的nacos注册中心,这块随便写一个同名接口 端口配置8301 服务二,同名接口内容修改,其他跟上一个服务一大体内容一致 端口配置成8302 创建服务消费者 RibbonConfig.java package com.example.nacosribbonconsumers.config; import com.netflix.loadbalancer.IRule; import com.n

  • Spring Cloud Alibaba 本地调试介绍及方案设计

    目录 1 本地调试介绍 2 框架环境 3 方案设计 4 实现要点 5. 总结 附:工具方法 1 本地调试介绍 本地调试: 这里是指在开发环境中,部署了一整套的某个项目或者产品的服务,开发人员开发时,本地会起一个或多个服务,这些服务和开发环境中部署的服务是相同的,这种情况下,一个服务就会有多个实例,大多数微服务中的默认负载均衡策略都是轮询,这些实例会轮流被调用. 为了方便 本地调试,需要提供一种策略,可以指定在负载均衡时,选择哪个实例进行调用.在使用 Nacos 作为注册中心时,可以通过 上线和下

  • 简单了解Spring Cloud Alibaba相关知识

    这篇文章主要介绍了简单了解Spring Cloud Alibaba相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 官方github地址 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务. 主要功能 服务限流降级:默认支持 WebServlet.WebFlux, OpenFeign

  • Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔断的示例

    Feign的使用 Feign也是网飞开发的,SpringCloud 使用 Feign 非常简单,我下边演示一下: 首先 服务消费者这边肯定需要一个对应的依赖: compile("org.springframework.cloud:spring-cloud-starter-openfeign") 需要启用Feign的话,也得在启动类上面加个注解 @EnableFeignClients 然后,创建一个 Feign 的接口,像这样子 package com.skypyb.sc.feign;

随机推荐