SpringCloud(2) 客户端的负载均衡Ribbon

和Nginx不同,Ribbon是客户端的负载均衡,Nginx是服务端的负载均衡

创建ribbon的demo项目

首先加入ribbon依赖

<dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-ribbon</artifactId>   <version>1.4.0.RELEASE</version></dependency>

修改配置文件  application.properties
server.port=9000spring.application.name=ribbon-consumer#自定义属性# ribbon.listOfServers是固定的    stores是自己写的stores.ribbon.listOfServers=http://localhost:8891,http://localhost:8892

然后自定义一个controller,返回值就是对应的哪个服务
/** * 进行请求转发的接口 * @autor Guojs * @date 2018/7/31 17:07 */@RestControllerpublic class consumerController {

@Resource    private LoadBalancerClient balancerClient;

@RequestMapping("/consumer")    public String helloConsumer(){        //读取对应的配置        ServiceInstance instance = balancerClient.choose("stores");        //这个uri是经过负载均衡算法之后的        URI uri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));        return uri.toString();    }

}然后启动上一遍的Eureka集群和两个服务提供者,再启动这个Ribbon访问http://localhost:9000/consumer会发现默认使用的是轮询的负载均衡算法,一次http://localhost:8891一次http://localhost:8892轮询。

修改负载均衡算法:1.修改配置文件
stores.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer2.在主函数中写一个bean来覆盖默认的算法
@Beanpublic IRule ribbonRule(){   return new RandomRule();}
改进之后的Ribbon引入eureka依赖
<dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-eureka</artifactId></dependency>简化配置文件,将ribbon在eureak中注册
server.port=9000spring.application.name=ribbon-consumereureka.client.service-url.defaultZone=http://localhost:8877/eureka/,http://localhost:8898/eureka/

在Application中增加  @EnableDiscoveryClient(标识eureka的客户端) @RibbonClient(name = "HELLO-SERVER",configuration = com.netflix.loadbalancer.RandomRule.class)(第一次参数是服务名,第二个参数是负载均衡算法,用于自定义负载均衡算法)
声明一个bean,用来调用服务@Bean@LoadBalancedpublic RestTemplate restTemplate(){   return new RestTemplate();}接下来看controller的修改,将原来直接调用服务url的方式改为调用服务名称,使用刚才声明的restTemplate来调用
@Resourceprivate RestTemplate restTemplate;

@RequestMapping("/consumer")public String helloConsumer(){    return restTemplate.getForEntity("http://HELLO-SERVER/hello",String.class).getBody();}
这样修改解决了之前在配置文件中硬写入服务地址的问题,但是还有单点故障没有解决,不过实战中ribbon不是这样使用的,每个eureka客户端单独声明一个ribbon(即:一个客户端独有一个ribbon)。

自带的负载均衡算法:

BestAvailableRule   选择一个最小的并发请求的服务检测每个服务,如果服务挂了,则忽略,在选择其中被请求最少的服务

AvailabilityFilteringRule  
WeightedResponseTimeRule  加权轮询?根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。

RetryRule  

RoundRobinRule  

RandomRule  随机算法

ZoneAvoidanceRule  

原文地址:https://www.cnblogs.com/sleepy-goblin/p/9398276.html

时间: 2024-08-02 15:52:14

SpringCloud(2) 客户端的负载均衡Ribbon的相关文章

Spring Cloud 入门教程(五): Ribbon实现客户端的负载均衡

接上节,假如我们的Hello world服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端口8762修改为8763.然后启动这两个Spring Boot应用, 就可以得到两个Hello World服务.这两个Hello world都注册到了eureka服务中心.这时候再访问http://localhost:8761, 可以看到两个hello world服务已经注册.(服务与注册参见Spr

客户端负载均衡Ribbon之二:Loadbalance的几种算法以及在ribbon中的使用

Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法. 像nginx可以使用负载均衡分配流量,ribbon为客户端提供负载均衡,dubbo服务调用里的负载均衡等等,很多地方都使用到了负载均衡. 使用负载均衡带来的好处很明显: 当集群里的1台或者多台服务器down的时候,剩余的没有down的服务器可以保证服务的继续使用 使用了更多的机器保证了机器的良性使用,不会由于某一高峰时刻导致系统cpu急剧上升 负载均衡有好几种实现策略,常见的有: 随机 (Rando

【微服务】之四:轻松搞定SpringCloud微服务-负载均衡Ribbon

对于任何一个高可用高负载的系统来说,负载均衡是一个必不可少的名称.在大型分布式计算体系中,某个服务在单例的情况下,很难应对各种突发情况.因此,负载均衡是为了让系统在性能出现瓶颈或者其中一些出现状态下可以进行分发业务量的解决方案.在SpringCloud 体系当中,加入了Netflix公司的很多优秀产品,其中一个就是针对于服务端进行负载均衡的Ribbon. 本系列博文目录 [微服务]之三:轻松搞定SpringCloud微服务目录 本系列为连载文章,阅读本文之前强烈建议您先阅读前面几篇. 相关简介

SpringCloud之实现服务器端的负载均衡Ribbon(二)

一 Ribbon简介 Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为.为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求.Ribbon默认为我们提供了很多负载均衡算法,例如轮询.随机等.当然,我们也可为Ribbon实现自定义的负载均衡算法. 在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其

客户端负载均衡Ribbon之源码解析

什么是负载均衡器? 假设有一个分布式系统,该系统由在不同计算机上运行的许多服务组成.但是,当用户数量很大时,通常会为服务创建多个副本.每个副本都在另一台计算机上运行.此时,出现 "Load Balancer(负载均衡器)".它有助于在服务器之间平均分配传入流量. 服务器端负载均衡器 传统上,Load Balancers(例如Nginx.F5)是放置在服务器端的组件.当请求来自 客户端 时,它们将转到负载均衡器,负载均衡器将为请求指定 服务器.负载均衡器使用的最简单的算法是随机指定.在这

003客户端负载均衡Ribbon &amp; 短路器Hystrix

1.POM配置 和普通Spring Boot工程相比,仅仅添加了Eureka.Ribbon.Hystrix.Spring Boot Starter Actuator依赖和Spring Cloud依赖管理 <dependencies> <!--添加Eureka Server依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-

spring cloud 之 客户端负载均衡 Ribbon

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

(05)SpringCloud实战之Feign负载均衡

一.概述 1.官方解释 Feign是一个声明式WebService客户端.使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解.Feign也支持可拔插式的编码器和解码器.Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters.Feign可以与Eureka和Ribbon组合使用以支持负载均衡. 通俗的说,Feign是一个声明式的Web

Spring Cloud 客服端负载均衡 Ribbon

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