目录
概念简介
Ribbon简介
Ribbon的核心组件均为接口类型,有以下几个
ServerList
ServerListFilter
IRule
Ribbon
Ribbon提供的主要负载均衡策略介绍
简单轮询负载均衡(RoundRobin)
随机负载均衡 (Random)
加权响应时间负载均衡 (WeightedResponseTime)
Feign简介
Fegin实现负载均衡
创建SpringCloud-consumer项目
添加依赖
编写application配置文件
启动类开启Feign
创建Feign客户端接口
依次启动项目:
查看注册中心
访问服务
consumer里面的注入方法源自注入类
将要负载均衡部署的服务,命名同一个名称application name
测试默认轮询策略
创建负载均衡配置类
修改为随机
概念简介
概要源头:https://www.w3cschool.cn/spring_cloud/
Ribbon简介
Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则 (如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算 法。
Ribbon的核心组件均为接口类型,有以下几个
ServerList
用于获取地址列表。它既可以是静态的(提供一组固定的地址),也可以是动态的(从注册中心中定期查询地址列表)。
ServerListFilter
仅当使用动态ServerList时使用,用于在原始的服务列表中使用一定策略过虑掉一部分地址。
IRule
选择一个最终的服务地址作为LB结果。选择策略有轮询、根据响应时间加权、断路器(当
Hystrix可用时)等。
Ribbon
在工作时首选会通过ServerList来获取所有可用的服务列表,然后通过ServerListFilter过虑掉一部分地址,最后在剩下的地址中通过IRule选择出一台服务器作为最终结果。
Ribbon提供的主要负载均衡策略介绍
简单轮询负载均衡(RoundRobin)
以轮询的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务 器。
随机负载均衡 (Random)
随机选择状态为UP的Server
加权响应时间负载均衡 (WeightedResponseTime)
根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。区域感知轮询负载均衡(ZoneAvoidanceRule复合判断server所在区域的性能和server的可用性选择server。
Feign简介
Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。
使用Feign,只需要创建一个接口并注解,它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解,Feign支持可插拔的编码器和解码器,Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
Feign 具有如下特性:
- 可插拔的注解支持,包括Feign注解和JAX-RS注解
- 支持可插拔的HTTP编码器和解码器
- 支持Hystrix和它的Fallback
- 支持Ribbon的负载均衡
- 支持HTTP请求和响应的压缩Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。它整合了Ribbon和Hystrix,从而不再需要显式地使用这两个组件。Feign还提供了HTTP请求的模板,通过编写简单的接口和注解,就可以定义好HTTP请求的参数、格式、地址等信息。接下来,Feign会完全代理HTTP的请求,我们只需要像调用方法一样调用它就可以完成服务请求。
简而言之:Feign能干Ribbon和Hystrix的事情,但是要用Ribbon和Hystrix自带的注解必须要引入相应的jar包才可以。
Fegin实现负载均衡
创建SpringCloud-consumer项目
。。
添加依赖
<!--Eureka客户端配置 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--引入Feign支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
编写application配置文件
server:
port: 8083
servlet:
context-path: /
spring:
application:
name: ChangBiRenYuan-consumer
eureka:
client:
service-url:
#向服务端注册
defaultZone: http://localhost:8081/eureka/ #链接注册中心集群
instance:
instance-id: consumer-8083 #定义微服务的名称
#4、创建服务启动类
prefer-ip-address: true #是否显示IP和端口
启动类开启Feign
创建Feign客户端接口
对应Feignclient里面的阐述对应client的application服务名称:
依次启动项目:
spring-cloud-server
spring-cloud-eureka-client
spring-cloud-consumer
查看注册中心
访问服务
consumer里面的注入方法源自注入类
将要负载均衡部署的服务,命名同一个名称application name
测试默认轮询策略
至于rest和Ribbon方式,大体一致,多个设置IP和配置类。
创建负载均衡配置类
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
@Bean
public RoundRobinRule myRule() {
return new RoundRobinRule();//轮询策略
// return new RandomRule();//随机策略
// return new AvailabilityFilteringRule();//首先会过滤掉故障机或者并发链
接数超过阈值的服务器.剩余的机器轮询配置
// new WeightedResponseTimeRule();//服务器影响时间越快,则权重越高
// new BestAvailableRule();//最大可用策略,即先过滤出故障服务器后,选择一个当
前并发请求数最小的
}
}