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 ...
随机推荐
- 程序猿看了要xiao了
一. 程序猿问科比:“你为什么这么成功? ”科比:“你知道洛杉矶凌晨四点是什么样子吗? ”程序猿:“知道,一般那个时候我还在写代码,怎么了?”科比:“额…….” 二. 女神:你能让这个论坛的人都吵起来 ...
- Linux内核设计与实现 总结笔记(第五章)系统调用
系统调用 内核提供了用户进程和内核交互的接口,使得应用程序可以受限制的访问硬件设备. 提供这些接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行. 一.内核通信 系统调用在用户空间进程和硬件设备之间 ...
- 20180711-Java Number类
下面是一个装箱与拆箱的例子: public class Test{ public static void main(String args[]){ Integer x = 5; // boxes in ...
- LNMP环境搭建最好用的两种方法(亲测)
经历了一个PHP服务器项目,手动编译部署PHP,Swoole环境太让人郁闷了,所以尝试过两种不错的方法,分享出来方便同样经历痛苦的coder. 第一种方式: 安装LNMP按照这里的步骤执行,网址戳我 ...
- jsplumb+dragable+vue(一)
基于vue的jsplumb,支持拖拽生成节点,节点双击展示更多信息,节点连线,删除节点,删除连线,重绘连接图,当前页面刷新连接图,根据json画连接图等功能 本章主要讲 拖拽生成节点 获取链接图的信息 ...
- HashMap与HashTable的哈希算法——JDK1.9源码阅读总结
下面是HashTable源码中的put方法: 注意上面注释标注的地方: HashTable对于元素在哈希表中的坐标算法是: 将对象自身的哈希值key.hashCode()变为正数:hash & ...
- Java常用工具——java集合
一.ArrayList package com.imooc.set; import java.util.ArrayList; import java.util.List; public class A ...
- 获取小程序accessToken
private static String getAccessToken(){ String url = "https://api.weixin.qq.com/cgi-bin/token? ...
- day08—css布局解决方案之多列布局
转行学开发,代码100天——2018-03-24 本文将记录CSS布局之垂直布局解决方案. 常见的多列布局包括以下: 1.定宽+自适应 2.两列定宽+一列自适应 3.不定宽+自适应 4.两列不定宽+一 ...
- java.io.IOException: Malformed \uxxxx encoding.
java.io.IOException: Malformed \uxxxx encoding. at com.dong.frame.util.ReadProperties.read(ReadProp ...