spring cloud学习笔记二 ribbon负载均衡
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。展示了Ribbon与Eureka配合使用时的架构。
一、什么是负载均衡
当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能。那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台服务器的负载情况将请求分配给某一台后端服务器去处理。那么在这个过程中,调度者如何合理分配任务,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡问题。
负载均衡一般分为两种:硬件负载均衡(如F5)和软件负载均衡(Nginx),一般我们在项目中使用更多的是Nginx,硬件的负载均衡虽然强大,但是成本过高,不太适用于我们平常开发的项目。
二、Nginx与ribbon的区别
我们在项目中,一般是用Nginx实现负载均衡,但是在spring cloud为我们提供了一个负载均衡的组件ribbon,我们就来看看这二者的区别:
nginx:
nginx是作为一个中间服务器,将所有的请求统一进行处理,通过负载均衡算法转发收到的请求到各个服务端,可以说nginx是服务端的负载均衡。
nginx是服务端的负载均衡
Ribbon:
Ribbon是从eureka注册中心服务器端上获取已经注册的服务,如果有注册的服务中带有二个或者多个地址,那么就可以通过负载均衡算法实现负载均衡。
Ribbon是客户端的负载均衡
三、ribbon负载均衡的配置
ribbon负载均衡实现需要开启四个微服务:
1.注册中心服务(不在叙述)
2.两个服务提供者的微服务(80端口与81端口)
a.服务提供者的配置与spring cloud eureka客户端的配置相同,主要是两个微服务的配置文件中,服务的名称要一致:
###服务启动端口号
server:
port: 80
###服务名称(服务注册到eureka名称)
spring:
application:
name: producter
###服务注册到eureka地址
eureka:
client:
service-url:
##当前会员注册到eureka服务 地址+端口号
defaultZone: http://127.0.0.1:8100/eureka ---------------------------------------------------------------------------------
###服务启动端口号
server:
port: 81
###服务名称(服务注册到eureka名称)
spring:
application:
name: producter
###服务注册到eureka地址
eureka:
client:
service-url:
##当前会员注册到eureka服务 地址+端口号
defaultZone: http://127.0.0.1:8100/eureka
b.在80和81项目中分别创建两个controller层访问
80端口的controller层
@RestController
public class ServiceController { @GetMapping("/producteri")
public String sayHi(){
return "这是80端口的服务";
}
}
81端口的controller层
@RestController
public class ServiceController { @GetMapping("/producteri")
public String sayHi(){
return "这是81端口的服务";
}
}
3.服务消费者
a.导入maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
b.消费端的yml文件
###服务启动端口号
server:
port: 8080
###服务名称(服务注册到eureka名称)
spring:
application:
name: consumer
###服务注册到eureka地址
eureka:
client:
service-url:
##当前会员注册到eureka服务 地址+端口号
defaultZone: http://127.0.0.1:8100/eureka
c.添加一个配置RibbonConfig类
RibbonConfig类是微服务中消费者自动注入Ioc容器中的类。我们知道在服务调用端中,本身是没有任何业务逻辑的,只有通过RestTemplate的实例来获取微服务,如果我们之所以没有直接注入到controller层,就是因为我们添加了@LoadBalanced注解,实现一个负载均衡的成员属性。
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
c.定义个服务端请求,调用微服务
@RestController
public class ClientController{ @Autowired
private RestTemplate restTemplate; @GetMapping("/consumer")
public String sayHi(){
return restTemplate.getForObject("http://producter",String.class);
}
}
最后访问http://127.0.0.1:8080/consumer,可以看见测试结果
四、ribbon自带的负载均衡算法
ribbon为我们封装了7种负载均衡算法:
1.BestAvailableRule:选择一个最小的并发请求的server
2.AvailabilityFilteringRule:过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值)
3.WeightedResponseTimeRule:根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。
4.RetryRule:对选定的负载均衡策略机上重试机制。(RoundRobinRule的加强版,在轮训时发现某些服务无法连接,如果这些服务超过了设定的连接数,之后就会跳过这些服务进行轮训)
5.RoundRobinRule:轮训(ribbon默认的算法)
6.RandomRule:随机选中一个server
7.ZoneAvoidanceRule:复合判断server所在区域的性能和server的可用性选择server
如何选择ribbon自带的算法:
我们只需要指定IRule实现就可以,实现的类就是上面介绍7种算法的名字。
在服务调用端中,RibbonConfig类文件下我们添加IRule的实现代码
@Bean
public IRule ribbonRule() {
return new RetryRule();//RetryRule就是我们上面介绍的7种算法,默认的实现是RoundRobinRule算法
}
spring cloud学习笔记二 ribbon负载均衡的更多相关文章
- 《Spring Cloud》学习(二) 负载均衡!
第二章 负载均衡 负载均衡是对系统的高可用.网络压力的缓解和处理能力扩容的重要手段之一.Spring Cloud Ribbon是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于Netfli ...
- Spring Cloud第四篇 | 客户端负载均衡Ribbon
本文是Spring Cloud专栏的第四篇文章,了解前三篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...
- 【Spring Cloud学习之二】服务注册和发现
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 Spring Cloud 1.2 一.EurekaEureka是Netflix开源的一个RESTful服务,主要用于服 ...
- spring cloud学习笔记三 Feign与Ribbon负载均衡的区别
一.Feign的介绍 Feign一般比较书面的解释是:Feign是一个声明式的WebService客户端,使用Feign编写的WebService客户端更加简单,他的使用方法是定义一个接口,然后在上线 ...
- Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制
上一篇文章单独介绍了Ribbon框架的使用,及其如何实现客户端对服务访问的负载均衡,但只是单独从Ribbon框架实现,没有涉及spring cloud.本文着力介绍Ribbon的负载均衡机制,下一篇文 ...
- spring cloud学习(三)使用Ribbon实现客户端负载均衡
使用Ribbon实现客户端的负载均衡 * 个人博客空间 : https://zggdczfr.cn/ * Ribbon Spring Cloud Netflix Ribbon 是一个客户端负载均衡的组 ...
- Spring Cloud学习笔记【二】Eureka 服务提供者/服务消费者(ribbon)
Ribbon 是 Netflix 发布的开源项目,主要功能是为 REST 客户端实现负载均衡.它主要包括六个组件: ServerList,负载均衡使用的服务器列表.这个列表会缓存在负载均衡器中,并定期 ...
- Spring Cloud 学习笔记(二)——Netflix
4 Spring Cloud Netflix Spring Cloud 通过自动配置和绑定到Spring环境和其他Spring编程模型惯例,为Spring Boot应用程序提供Netflix OSS集 ...
- 史上最全Spring Cloud Alibaba--Nacos教程(涵盖负载均衡、配置管理、多环境切换、配置共享/刷新、灰度、集群)
能够实现Nacos安装 基于Nacos能实现应用负载均衡 能基于Nacos实现配置管理 配置管理 负载均衡 多环境切换 配置共享 配置刷新 灰度发布 掌握Nacos集群部署 1 Nacos安装 Nac ...
随机推荐
- 第五周作业—N42-虚怀若谷
一.查找/etc目录下大于1M且类型为普通文件的所有文件 [root@centos7 ~]# find /etc -type f -size +1M -exec ls -lh {} \; -r--r- ...
- 模拟安装redis5.0集群并通过Java代码访问redis集群
在虚拟机上模拟redis5.0的集群,由于redis的投票机制,一个集群至少需要3个redis节点,如果每个节点设置一主一备,一共需要六台虚拟机来搭建集群,此处,在一台虚拟机上使用6个redis实例来 ...
- php中魔术方法有什么用
在面向对象编程中,PHP提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利.PHP中的魔术方法通常以__(两个下划线)开始,并且不需要显示的调用而是由某种特定的条件出发. __construct ...
- ckeditor富文本编辑器的使用和图片上传,复制粘贴图片上传
自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...
- ssd_mobilenet_demo
操作系统:windows 10 64位 内存:8G GPU:Nvidia MX 150 Tensorflow: 1.4 1.安装python Anaconda3-5.0.1 ,默认python版本( ...
- 20180826(01)-Java数据结构
Java 数据结构 Java工具包提供了强大的数据结构.在Java中的数据结构主要包括以下几种接口和类: 枚举 (Enumeration) 位集合(BitSet) 向量 (Vector) 栈 (Sta ...
- Jquery取得Iframe中的元素
DOM方法: 父窗口操作IFRAME:window.frames["iframeSon"].documentIFRAME操作父窗口: window.parent.document ...
- js初步简单的编程代码
简单图片切换编码demo图片地址自行替换 简单图片切换编码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- LLDB动态调试
- Gym 100917M Matrix, The
题目链接: http://codeforces.com/gym/100917/problem/M --------------------------------------------------- ...