SpringCloud Netflix Ribbon(负载均衡)
⒈Ribbon是什么?
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具。
Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。我们在配置文件中列出负载均衡所有的机器,Ribbon会自动的帮助我们基于某种规则(如简单轮询、随机连接等等)去连接这些机器。Ribbon客户端组件提供了一列完善的配置项(如连接超时、重试等等),我们也能很容易的使用Ribbon实现自定义的负载均衡算法。
⒉负载均衡?
负载均衡(Load Balance,简称LB),在微服务或分布式集群中经常用到的一种功能,就是将用户的请求以某种规则平摊到多个服务器上,从而达到系统的高可用。
常见的负载均衡有软件例如Nginx、LVS等等,硬件F5等等。
相应的在中间件,例如Dubbo和Spring Cloud中均给我们提供了负载均衡,Spring Cloud的负载均衡算法可以自定义。
集中式负载均衡:即在服务的消费方和提供方之间使用独立的负载均衡设施(可以是硬件,如F5。也可以是软件,如Nginx),由该设施负责把请求通过某种策略转发至服务的提供方。
进程内负载均衡:将负载均衡逻辑集成到服务消费方,由消费方从服务注册中心获取有那些服务地址可用,然后消费方从这些地址中选择一个合适的服务器。(Ribbon属于进程内负载均衡,它只是一个类库,集成于服务消费方进程,消费方通过它来获取到服务提供方的地址)
⒊示例
因为Ribbon集成于服务消费方,这里我只展示服务消费方部分代码,完整代码请结合https://www.cnblogs.com/fanqisoft/p/10357598.html自行勾画。
①添加pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
②修改配置文件
server.port=8200 spring.application.name=user-consumer #eureka.instance.prefer-ip-address 注册服务的时候使用服务的ip地址
eureka.instance.prefer-ip-address=true eureka.client.service-url.defaultZone:http://localhost:8761/eureka/
③对访问Rest资源的Bean加上@LoadBalanced负载均衡注解
@Bean
@LoadBalanced //使用负载均衡机制
public RestOperations restTemplate(){
return new RestTemplate();
}
④主程序启动上添加@EnableDiscoveryClient注解开启Eureka服务发现(@EnableDiscoveryClient注解也可以)
package cn.coreqi; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestOperations;
import org.springframework.web.client.RestTemplate; @SpringBootApplication
@EnableDiscoveryClient //开启服务发现功能
public class SpringbootcloudserviceconsumerApplication { public static void main(String[] args) {
SpringApplication.run(SpringbootcloudserviceconsumerApplication.class, args);
}
}
⑤在控制器中注入RestTemplate并调用远程服务
package cn.coreqi.controller; import cn.coreqi.entities.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestOperations; @RestController
public class UserController {
@Autowired
private RestOperations restTemplate; @GetMapping("/userno1")
public User getUsersFirst(){
User[] users = restTemplate.getForObject("http://user-provider/users",User[].class);
return users[0];
}
}
★Ribbon和Eureka整合后服务消费方可以直接调用服务而不用再关心提供服务的地址以及提供服务的端口号。
Ribbon其实就是一个软负载均衡的客户端软件,它可以和其它所需请求的客户端结合使用,和Eureka结合只是其中的一个实例。
⒋Ribbon核心组件IRule支持的负载均衡算法
| 名称 | 特点 |
| RoundRobinRule | 轮询 |
| RandomRule | 随机 |
| AvailabilityFilteringRule |
会先过滤掉由于多次访问故障而处于断路器跳闸状态 和并发的连接数量超过阈值的服务,然后对剩余的服 务列表按照轮询策略进行访问。 |
| WeightedResponseTimeRule |
根据平均响应时间计算所有服务的权重,响应时间越 快服务权重越大被选中的概率越高,刚启动时如果统 计信息不足,则使用RoundRobinRule(轮询)策略 ,等到统计信息足够,则会自动切换回WeightedRe -sponseTimeRule |
| RetryRule |
先按照RoundRobinRule的策略获取服务,如果获取 服务失败,则在指定时间内会进行重试,获取可用的 服务。 |
| BestAvailableRule |
会过滤掉由于多次访问故障而处于断路器跳闸状态的 服务,然后选择一个并发量最小的服务。 |
| ZoneAvoidanceRule |
默认规则,复合判断Server所在区域的性能和Server 的可用性选择服务器。 |
⒌SpringCloud如何更改默认的负载均衡算法?
package cn.coreqi.config; import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class RibbonConfig {
@Bean
public IRule myRule(){
return new RandomRule();
}
}
⒍SpringCloud如何自定义Ribbon
①添加配置均衡算法的配置类
★这个自定义配置类不能放在@ComponentScan所扫描的当前包及其子包下,否则这个自定义配置类会被所有的Ribbon客户端所共享,也就达不到特殊化定制的目的了。
package myrule; import com.netflix.loadbalancer.IRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class RibbonConfig {
@Bean
public IRule myRule(){
return new MyRandomRule();
}
}
②在主程序启动类上添加@RibbonClient注解,并指定其name及configuration属性。从而在启动该微服务的时候就能去加载我们自定义的Ribbon配置类,使配置生效。
package cn.coreqi; import myrule.RibbonConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestOperations;
import org.springframework.web.client.RestTemplate; @SpringBootApplication
@EnableDiscoveryClient //开启服务发现功能
@RibbonClient(name = "USER-PROVIDER",configuration = RibbonConfig.class)
public class SpringbootcloudserviceconsumerApplication { public static void main(String[] args) {
SpringApplication.run(SpringbootcloudserviceconsumerApplication.class, args);
}
}
③新建自定义负载均衡算法类并继承AbstractLoadBalancerRule重写choose方法
package myrule; import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.Server; public class MyRandomRule extends AbstractLoadBalancerRule {
@Override
public void initWithNiwsConfig(IClientConfig iClientConfig) { } @Override
public Server choose(Object o) {
return null;
}
}
SpringCloud Netflix Ribbon(负载均衡)的更多相关文章
- spring-cloud配置ribbon负载均衡
spring-cloud配置ribbon负载均衡 ribbon提供的负载均衡就是开箱即用的,简单的不能再简单了 为了顺利演示此demo,你需要如下 需要提前配置eureka服务端,具体看 https: ...
- SpringCloud系列——Ribbon 负载均衡
前言 Ribbon是一个客户端负载均衡器,它提供了对HTTP和TCP客户端的行为的大量控制.我们在上篇(猛戳:SpringCloud系列——Feign 服务调用)已经实现了多个服务之间的Feign调用 ...
- 浅谈SpringCloud (三) Ribbon负载均衡
什么是负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃.为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力. 我们 ...
- SpringCloud:Ribbon负载均衡
1.概述 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具. 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客 ...
- Spring-cloud之Ribbon负载均衡的使用及负载均衡策略配置(与Eurka配合使用)
什么是Ribbon,ribbon有什么用,个人先总结一下(不正确请提出讨论):Ribbon是基于客户端的负载均衡器,为我们提供了多样的负载均衡的方案,比如轮询,最小的并发请求的server,随机ser ...
- SpringCloud之Ribbon负载均衡及Feign消费者调用服务
目的: 微服务调用Ribbon Ribbon负载均衡 Feign简介及应用 微服务调用Ribbon Ribbon简介 1. 负载均衡框架,支持可插拔式的负载均衡规则 2. 支持多种协议,如HTTP.U ...
- SpringCloud之Ribbon负载均衡配置
一.负载均衡解决方案分类及特征 业界主流的负载均衡解决方案有: 1.1 集中式负载均衡 即在客户端和服务端之间使用独立的负载均衡设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责 ...
- 四(2)、springcloud之Ribbon负载均衡
2.Ribbon负载均衡 Ribbon在工作时分成两步第一步先选择 EurekaServer ,它优先选择在同一个区域内负载较少的server. 第二步再根据用户指定的策略,在从server取到的 ...
- Spring-Cloud之Ribbon负载均衡-3
一.负载均衡是指将负载分摊到多个执行单元上,常见的负载均衡有两种方式.一种是独立进程单元,通过负载均衡策略,将请求转发到不同的执行单元上,例如 Ngnix .另一种是将负载均衡逻辑以代码的形式封装到服 ...
- 第六章 SpringCloud之Ribbon负载均衡
###################使用默认的负载均衡(轮询)############################# 1.pom.xml <?xml version="1.0&q ...
随机推荐
- 保存指定目录及其子目录的jpg文件
import os txt_path = 't1.txt' f = open(txt_path, mode='a', encoding='utf-8') def all_path(dirname): ...
- flask get和post请求使用
直接看代码 #-*-coding:utf-8-*- from flask import Flask,url_for,redirect,render_template,request app = Fla ...
- 《Apache Kafka 实战》读书笔记-认识Apache Kafka
<Apache Kafka 实战>读书笔记-认识Apache Kafka 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.kafka概要设计 kafka在设计初衷就是 ...
- hostnamectl 修改 CentOS7 主机名
hostnamectl 控制主机名 # 显示状态 hostnamectl Static hostname: centos Icon name: computer-vm Chassis: vm Mach ...
- Docker 容器管理
单一容器管理 容器的标识符 每个容器被创建后都会分配一个CONTAINER_ID作为容器的唯一标识符,后续的启动.停止等操作都通过CONTAINER_ID来完成的. CONTAINER_ID很难记忆, ...
- Redis_集群_主从模式_哨兵模式
1.主从模式 2.哨兵模式
- python 可视化库
在做titanic分析的过程中,看了一些大神的想法,发现在分析数据的过程中,许多大神会使用到seaborn,plotly这些库,而我等小白仅仅知道matplotlib这个唯一的数据可视化库而已.上网查 ...
- Css单位px,rem,em,vw,vh的区别
px px就是pixel像素的缩写,相对长度单位,网页设计常用的基本单位.像素px是相对于显示器屏幕分辨率而言的 em em是相对长度单位.相对于当前对象内文本的字体尺寸(参考物是父元素的font-s ...
- functools学习记录
装饰器demo def wrapper(func): print('装饰器工作了') def inner(*args,**kwargs): return func(*args,**kwargs) re ...
- 自定义Tornado的session组件
session和cookie的关系 cookie:保存在客户端浏览器上的键值对 session_id = "eyJ1c2VyX2luZm8iOiJ" session:保存在服务器上 ...