转载

Springcloud ribbon负载均衡算法实现

一 前言

经过几篇的cloud系列文章,我想大家都有一个坚实的基础,后续的学习就会轻松很多,如果是刚刚来看的读者需要有eureka基础知识,或者查阅知识追寻者的cloud系列专栏;这篇文章主要讲解如何使用ribbon实现web service客户端调用,ribbon默认算法实现负载均衡等!

二 ribbon简介

ribbon 是一个客户端负载均衡器,其能够整合不同的协议工具进行web service API 调用;

主要特色如下:

提供可插拔式的负载均衡整合服务发现故障弹性恢复cloud支持客户端整合加载负载均衡

核心工程如下:

ribbon-core:整合其他模块实现负载均衡

ribbon-eureka: 基于 eureka client 实现 负载均衡

ribbon-httpclient: 包括JSR-311 实现REST 加载负载均衡

三 eureka-client

在之前的 eureka-client工程中创建controller包,并提供表现层接口,代码如下,然后启动eureka-client实例2个,分别为8090端口,8091端口;

/**
 * @Author lsc
 * <p> 知识追寻者,ribbon provider the restful api</p>
 */
@RestController
public class RibbonProvidderController {

  @GetMapping("zszxz/ribbon")
  public String testRibbon(){
    return "hell i am zszxz";
  }
}

四 ribbon-client

4.1 pom.xml

在父工程低下添加新模块 ribbon-client;原来的start-web依赖在父工程中已经引入,故ribbon模块中不会再次引入该依赖;

<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-ribbon</artifactId>
    </dependency>
  </dependencies>

4.2 config

使用restTemplate进行客户端调用,故需要进行配置,并且在方法上加 @LoadBalanced 注解表示开启ribbon负载均衡;

/**
 * @Author lsc
 * <p> ribbon-restTemplate配置 </p>
 */
@Configuration
public class RibbonConfig {

  @Bean
  @LoadBalanced//表示用于负载均衡
  RestTemplate restTemplate(){
    return new RestTemplate();
  }
}

4.3 service

创建service类,并且使用restTemplate进行HTTP API 调用;注意点是这边不使用ip端口,而是直接使用服务的应用名称 eureka-client ;

/**
 * @Author lsc
 * <p> </p>
 */
@Service
public class RibbonService {

  @Autowired
  RestTemplate restTemplate;

  public String testRibbon(){
    return restTemplate.getForObject("http://eureka-client/zszxz/ribbon",String.class);
  }
}

4.4 controller

创建表现层类, 用于浏览器访问;

/**
 * @Author lsc
 * <p> </p>
 */
@RestController
public class RibbonController {

  @Autowired
  RibbonService ribbonService;

  @GetMapping("ribbon/test")
  public String testRibbon(){
    return ribbonService.testRibbon();
  }
}

4.5 ribbon启动类

ribbon的启动类也是作为 eureka 的客户端故需要加上@EnableEurekaClient注解;

/**
 * @Author lsc
 * <p>知识追寻者 ribbon启动类 </p>
 */
@SpringBootApplication
@EnableEurekaClient
public class RibbonApp {

  public static void main(String[] args) {
    SpringApplication.run(RibbonApp.class,args);
  }
}

4.6 application.yml

application.yml 配置中使用端口8092,服务注册地址分别是peer1,peer2,peer3;

server:
 port: 8092
spring:
 application:
  name: eureka-ribbon # 应用名称
eureka:
 client:
  service-url:
   # 服务注册地址
   defaultZone: http://peer1:10081/eureka/,http://peer2:10082/eureka/,http://peer3:10083/eureka/

4.7 启动工程

分别启动 client ,server ; 如下图

4.8 浏览器访问结果

浏览器结果如下,说明我们在 eureka-ribbon 中使用 restTemplate 结合 ribbon 实现了HTTP 方式从 eureka-clinet 模块中调用API;

五 ribbon默认负载均衡

LoadBalancerClient 是 ribbon 的一个核心类,其能够获得 ribbon提供负载均衡的实例信息;在 ribbon-client模块中的controller层添加 方法 ,方法主体是获得实例的端口和主机;以便于于我们分析ribbon负载均衡算法;

@Autowired
  LoadBalancerClient loadBalanced;

  @GetMapping("ribbon")
  public String ribbon(){
    ServiceInstance choose = loadBalanced.choose("eureka-client");
    String s = "host is :" + choose.getHost() + " port is :" + choose.getPort();
    System.out.println(s);
    return s;
  }

重启ribbon-client 工程,使用浏览器访问,控制台输出如下,分别调用了8090,8091两个 eureka-client实例API,说明ribbon默认的负载均衡机制是轮询算法;

host is :peer1 port is :8091
host is :peer1 port is :8090
host is :peer1 port is :8091
host is :peer1 port is :8090
host is :peer1 port is :8091
host is :peer1 port is :8090
host is :peer1 port is :8091
host is :peer1 port is :8090

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间:2020-04-20

SpringCloud客户端的负载均衡Ribbon的实现

前言:微服务架构,不可避免的存在单个微服务有多个实例,那么客户端如何将请求分摊到多个微服务的实例上呢?这里我们就需要使用负载均衡了 一.Ribbon简介 Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为.为Ribbon配置服务提供者地址列表后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求.Ribbon默认为我们提供了很多的负载均衡算法,例如:轮询,随机等,也可自定义: Ribbon的GitHub: https://github.com/N

SpringCloud Ribbon 负载均衡的实现

前言 Ribbon是一个客户端负载均衡器,它提供了对HTTP和TCP客户端的行为的大量控制.我们在上篇(猛戳:SpringCloud系列--Feign 服务调用)已经实现了多个服务之间的Feign调用,服务消费者调用服务提供者,本文记录Feign调用Ribbon负载均衡的服务提供者 GitHub地址:https://github.com/Netflix/ribbon 官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-net

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

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

Spring Cloud 负载均衡器 Ribbon原理及实现

Ribbon简介 分布式系统中,各个微服务会部署多个实例,如何将服务消费者均匀分摊到多个服务提供者实例上,就要使用到负载均衡器 Ribbon 是负载均衡器 ,它提供了很多负载均衡算法,例如轮询.随即等,在配置服务提供者地址后,可以将服务消费者请求均匀的分发 为服务消费者整合Ribbon 添加 Ribbon 依赖库 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri

spring cloud 之 客户端负载均衡Ribbon深入理解

一.负载均衡 负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. 1.服务端负载均衡:客户端请求到负载均衡服务器,负载均衡服务器根据自身的算法将该请求转给某台真正提供业务的服务器,该服务器将响应数据给负载均衡服务器,负载均衡服务器最

详解Spring Cloud负载均衡重要组件Ribbon中重要类的用法

Ribbon是Spring Cloud Netflix全家桶中负责负载均衡的组件,它是一组类库的集合.通过Ribbon,程序员能在不涉及到具体实现细节的基础上"透明"地用到负载均衡,而不必在项目里过多地编写实现负载均衡的代码. 比如,在某个包含Eureka和Ribbon的集群中,某个服务(可以理解成一个jar包)被部署在多台服务器上,当多个服务使用者同时调用该服务时,这些并发的请求能被用一种合理的策略转发到各台服务器上. 事实上,在使用Spring Cloud的其它各种组件时,我们都能

详解SpringCloud Ribbon 负载均衡通过服务器名无法连接的神坑

一,问题 采取eureka集群.客户端通过Ribbon调用服务,Ribbon端报下列异常 java.net.UnknownHostException: SERVICE-HI java.lang.IllegalStateException: No instances available for SERVICE-HI java.lang.IllegalStateException: Request URI does not contain a valid hostname: http://SERVI

Spring Cloud Ribbon负载均衡器处理方法

接下来撸一撸负载均衡器的内部,看看是如何获取服务实例,获取以后做了哪些处理,处理后又是如何选取服务实例的. 分成三个部分来撸: 配置 获取服务 选择服务 配置 在上一篇<撸一撸Spring Cloud Ribbon的原理>的配置部分可以看到默认的负载均衡器是ZoneAwareLoadBalancer. 看一看配置类. 位置: spring-cloud-netflix-core-1.3.5.RELEASE.jar org.springframework.cloud.netflix.ribbon

Spring Cloud Ribbon实现客户端负载均衡的方法

Springcloud ribbon负载均衡算法实现

简介 我们继续以之前博客的代码为基础,增加Ribbon组件来提供客户端负载均衡.负载均衡是实现高并发.高性能.可伸缩服务的重要组成部分,它可以把请求分散到一个集群中不同的服务器中,以减轻每个服务器的负担.客户端负载均衡是运行在客户端程序中的,如我们的web项目,然后通过获取集群的IP地址列表,随机选择一个server发送请求.相对于服务端负载均衡来说,它不需要消耗服务器的资源. 基础环境 JDK 1.8 Maven 3.3.9 IntelliJ 2018.1 Git:项目源码 更新配置 我们这次

浅谈Spring Cloud Ribbon的原理

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等.简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器.我们也很容易使用Ribbon实现自定义的负载均衡算法. 说起负载均衡一般都会想到服务端的负载均衡,常用产品包括LBS硬件或云服务.Nginx等,都是

Spring Cloud Ribbon实现客户端负载均衡的示例

前面我们已经完成了注册中心和服务提供者两个基础组件.本文就介绍使用Spring Cloud Ribbon在客户端负载均衡的调用服务. 对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如F5,或者是基于软件的,如VS.HAproxy等.LB上有所有服务的地址映射表,当服务消费者调用某个目标服务时,它先向LB发起请求,由LB以某种策略(比如:Round

Spring Cloud Ribbon的踩坑记录与原理详析

Springcloud ribbon负载均衡算法实现

简介 Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的.它不像服务注册中心.配置中心.API网关那样独立部署,但是它几乎存在于每个微服务的基础设施中.包括前面的提供的声明式服务调用也是基于该Ribbon实现的.理解Ribbon对于我们使用Spring Cloud来讲非常的重要,因为负载均衡是对系统的高可用.网络压力的缓解和处理能力扩容的重要手段之一.在上节的例子中,我们采用了声明式的方式来实现负载均衡.实际上,内部

spring cloud Ribbon用法及原理解析

这篇文章主要介绍了spring cloud Ribbon用法及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 这篇文章主要介绍一下ribbon在程序中的基本使用,在这里是单独拿出来写用例测试的,实际生产一般是配置feign一起使用,更加方便开发.同时这里也通过源码来简单分析一下ribbon的基本实现原理. 基本使用 这里使用基于zookeeper注册中心+ribbon的方式实现一个简单的客户端负载均衡案例. 服务提供方 首先是一个

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

Springcloud ribbon负载均衡算法实现

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

spring cloud 使用Zuul 实现API网关服务问题

通过前面几次的分享,我们了解了微服务架构的几个核心设施,通过这些组件我们可以搭建简单的微服务架构系统.比如通过Spring Cloud Eureka搭建高可用的服务注册中心并实现服务的注册和发现: 通过Spring Cloud Ribbon或Feign进行负载均衡:通过Spring Cloud Hystrix进行服务容错保护以避免故障蔓延.微服务搭建好了之后我们肯定会提供给外部系统一些统一的RESTFul API服务接口进行调用, 但是当外部系统调用我们的RESTful API的时候,怎么确定它

Spring Cloud原理详解

Springcloud ribbon负载均衡算法实现

之前一直在看<Spring Cloud微服务实战>,最近又看了架构笔记的<拜托!面试请不要再问我Spring Cloud底层原理>,对Spring Cloud的主要组件的原理有了更深的理解,特地做一下总结 一.Spring Cloud核心组件:Eureka (1)Netflix Eureka 1).Eureka服务端:也称服务注册中心,同其他服务注册中心一样,支持高可用配置.如果Eureka以集群模式部署,当集群中有分片出现故障时,那么Eureka就转入自我保护模式.它允许在分片故

原文  https://www.zhangshengrong.com/p/ERNnqyEWa5/
正文到此结束
Loading...