客户端负载均衡:Spring Cloud Ribbon

一、负载均衡概念

负载均衡在系统架构中是一个非常重要,并且是不得不去实施的内容。因为负载均衡对系统的高可用性、

网络压力的缓解和处理能力的扩容的重要手段之一。通常所说的负载均衡指的是服务端负载均衡,分为

硬件负载均衡和软件负载均衡,服务端负载均衡架构方式:

负载均衡都会维护一个下挂可用的服务端清单,并通过心跳检测来剔除故障的服务端节点。

客户端负载均衡与服务端负载均衡最大的不同点在于服务清单的位置,在客户端负载均衡

中,所有的客户端节点都维护着自己要访问的服务端清单,这些清单都来自于服务注册中心。  

二、快速入门

代码详情见:https://gitee.com/tangjiapi/RibbonDemon.git

三、Spring Cloud Ribbon 实战

1.Ribbon负载均衡策略与自定义配置

在Ribbon中有丰富的负载均衡策略可供选择:

策略类                   命名                       描述

RandomRule             随机策略                   随机选择server

RoundRobinRule         轮询策略                   按顺序选择server(默认策略)

RetryRule              重试策略                   在一个配置时间段内当选择server不成功,则一直尝试选择一个可用的server

BestAvailableRule      最低并发策略               逐个考察server,如果server断路器打开,则忽略,在选择其中并发链接最低的server

AvailabilityFilterRule 可用过滤策略               过滤掉一直链接失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值)

ResponseTimeWeightRule 响应时间加权策略           根据server的响应时间分配权重。响应时间越长,权重越低,被选择到的概率就越低

ZoneAvoidanceRule      区域权衡策略               综合判断server所在区域的性能和server的可用轮询选择server,并且判定一个AWS Zonede的运行性能是否可用,剔除不可用的Zone中的所有Server.

1)全局策略设置

@Configuration
public class TestConfiguration {@Beanpublic IRule ribbonRule() {return new RandomRule();}
}

凡是通过ribbon的请求都会按照配置的规则进行。

2)基于注解的策略设置

/*** 声明,用于排除* @author Tang Jiujia* @since 2019-03-26*/
public @interface AvoidScan {
}

@Configuration
@AvoidScan
public class TestConfiguration {@AutowiredIClientConfig config;@Beanpublic IRule ribbonRule(IClientConfig config) {return new RandomRule();}
}

@SpringBootApplication
@EnableDiscoveryClient
@RibbonClient(name = "client-a", configuration = TestConfiguration.class)
//让Spring不去扫描@AvoidScan注解的类,因为我们的配置是对单个服务源生效,
// 所以不能应用于全局,如果不排除会报错
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = {AvoidScan.class})})
public class RibbonLoadbalancerApplication {public static void main(String[] args) {SpringApplication.run(RibbonLoadbalancerApplication.class, args);}/***  用于负载均衡* */@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}

3)基于配置文件的策略设置

client-a:ribbon:NFLoadBalanceRuleClassName: com.netflix.loadbalancer.RandomRule

2.Ribbon超时与重试

F版中的Ribbon重试机制是默认开启的,需要添加对于超时时间与重试策略的配置:

client-a:ribbon:ConnectTimeout: 30000ReadTimeout: 30000MaxAutoRetries: 1 #对第一次请求的服务的重试次数MaxAutoRetriesNextServer: 1 #要重试的下一个服务的最大数量OkToRetryOnAllOperations: true

3.Ribbon的饥饿加载

Ribbon在进行客户端负载均衡时并不是在启动时就加载上下文,而是在实际请求时才去

创建,因此这个特性往往会让我们第一次调用时显得疲软乏力,严重时会引起调用超时。

所有我们可以通过指定Ribbon客户端的名称来开启饥饿加载,即在启动的时候就加载所有

配置项的应用程序上下文。

ribbon:eager-load:enabled: trueclients: client-a, client-b, client-c

4.利用配置文件自定义Ribbon客户端

使用配置文件的优先级最高,高于注解和源码中的bean

5.Ribbon脱离Eureka使用

默认情况下,Ribbon客户端会从Eureka注册中心读取服务注册列表,来达到一种

动态的负载均衡。但如果Eureka是一个供很多人使用的公共注册中心,极可能产生

服务侵入性问题,所以就不要从Eureka读取服务列表了,而应该在Ribbon客户端自行指定

服务地址,让Ribbon脱离Eureka来使用。

首先,需要在Ribbon中禁用Eureka功能:

ribbon:eureka:enable: false

然后对源服务设定地址列表:

client:ribbon:listOfServers: http://localhost:7070, http://localhost:7071

转载于:https://www.cnblogs.com/Shadowplay/p/10477337.html

Spring Cloud微服务笔记(四)客户端负载均衡:Spring Cloud Ribbon相关推荐

  1. Spring Cloud入门教程(二):客户端负载均衡(Ribbon)

    对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如 ...

  2. spring vault_微服务–第2部分:使用Spring Cloud Config和Vault进行配置管理

    spring vault 在使用Spring Boot和Spring Cloud的MicroServices –第1部分:概述中 ,我们简要介绍了什么是微服务以及如何使用SpringBoot和Spri ...

  3. 微服务SpringCloud中的负载均衡,你都会么?

    1.什么是负载均衡 首先我们来看看维基百科对负载均衡的说明: 负载平衡(Load balancing)是一种计算机技术,用来在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载 ...

  4. 微服务网关-Gateway-LoadBalancerClient实现负载均衡讲解

    LoadBalancerClient 路由过滤器(客户端负载均衡) 上面的路由配置每次都会将请求给指定的URL处理,但如果在以后生产环境,并发量较大的时候,我们需要根据服务的名称判断来做负载均衡操作, ...

  5. SpringCloud Hoxton版微服务-RestTempalte + @LoadBlanced 实现负载均衡

    RestTempalte + @LoadBlanced 实现负载均衡 一.服务提供者注册 二.服务消费者调用 1.编写服务消费者 2.RestTemplate中开启负载均衡支持 3.启动服务测试 总结 ...

  6. Spring Cloud微服务笔记(一)微服务与云概念

    微服务与云概念 一.微服务 一.什么是微服务架构 微服务,是一个小的.松耦合的分布式服务. 为什么需要微服务: 1)单体系统部署在一个进程中,修改了一个小功能,为了部署上线就会影响其他功能. 2)单体 ...

  7. 微服务的几种负载均衡算法

    目录 一.负载均衡 二.负载均衡算法 1.静态负载均衡 2.动态负载均衡 三.Dubbo负载均衡的四种算法 1.基于权重随机算法RandomLoadBalance 2.基于最少活跃数算法LeastAc ...

  8. 花一周时间,啃完这套京东架构师独家微服务笔记,成功面进字节

    前言 基于 Spring Cloud 的微服务设计和开发,已经越来越多地得到了更多企业的推广和应用,而 Spring Cloud 社区也在不断的迅速发展壮大之中,近几年时间,Spring Cloud ...

  9. 基于Spring cloud Ribbon和Eureka实现客户端负载均衡

    前言 本案例将基于Spring cloud Ribbon和Eureka实现客户端负载均衡,其中Ribbon用于实现客户端负载均衡,Eureka主要是用于服务注册及发现: 传统的服务端负载均衡 常见的服 ...

最新文章

  1. ZStack源码剖析之核心库鉴赏——FlowChain
  2. android 重新启动应用程序,通过单击应用程序图标打开Android应用程序时重新启动...
  3. idea中如何查看一个类的方法被那些类调用了,显示方法对应的调用树
  4. MyEclipse的html页面 design视图中 关闭可视化界面
  5. Q84:层级实例网格[Hierarchical Instance Grids]
  6. android job service,服务保活那些事(Job Service ,JobScheduler)
  7. 电池电量检测方法-库仑计-基于LTC2941
  8. 【京东助手】滑稽东试用助手 V1.6.0
  9. 使用Latex排版一篇IEEE Robotics and Automation Letters期刊文章
  10. Java创建Shape类
  11. 21cn邮箱服务器端,21CN 免费邮箱常见问题
  12. 键盘按键发出声音,打不了字,提示启用筛选键
  13. 使用DPDK优化VirtIO和OVS网络
  14. HTML5 2D游戏引擎研发系列 第五章
  15. 从联想昭阳到MacBook Pro,致我的那些败家玩意——电脑
  16. STM32项目设计:基于STM32的风向风速测量仪
  17. 网络知识-01 计算机网络概述
  18. NANO开发套件SD卡烧录+opencv配置+tensorrt+cuda10.2
  19. 场内场外交易成本_场内基金与场外基金各有什么优劣势?
  20. 制作macOS Monterey启动U盘

热门文章

  1. vim 的寄存器/剪贴板
  2. c语言线程传int值,如何用C语言实现多线程
  3. mac mysql 重设密码_Mac下忘记mysql密码重新设置密码的图文教程
  4. 【安卓开发 】Android初级开发(一)控件通用属性
  5. html按钮冻结,Vue js按钮冻结dom
  6. charles代理手机调试_H5开发 移动端 调试之 Charles 抓包 和 Map Remote
  7. 如何优雅地检测类型/表达式有效性?
  8. 基于C++实现五子棋AI算法思想
  9. mvc 事务层切换数据源_Mvc 与 Flux 与 Redux的一些思考
  10. 在ultraedit查找每行第二个单词_新手收藏!亚马逊关键字查找