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

客户端负载均衡: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab cell,fix,floor,round取整的几种方式

ceil函数的作用是朝正无穷方向取整,即将m/n的结果向正无穷方向取整,如m/n3.12,则ceil(m/n)的结果为4。 类似的函数有如下几个: fix:朝零方向取整,如fix(-1.3)-1;fix(1.3)1; floor:朝负无穷方…

孤儿进程与僵尸进程[总结]

1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入&a…

使用CloudForms实现云运营幸福感的3个步骤

本周宣布, Cloud Suite管理层的最新功能 CloudForms 4.2可供所有人使用。 产品增加了1800多种改进,令许多令人兴奋的新奇事物令人兴奋。 CloudForms是Cloud Suite产品的Cloud Management平台,使您能够跨区域联合部署它以进行集中管理操作&am…

leetcode 599. 两个列表的最小索引总和(Minimum Index Sum of Two Lists)

目录 题目描述:示例 1:示例 2:解法:题目描述: 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如…

FAR,FRR,EER

FRR与FARFRR(False Rejection Rate)和FAR(False Acceptance Rate)是用来评估指纹识别算法性能的两个主要参数。FRR和FAR有时被用来评价一个指纹识别系统的性能,其实这并不贴切。指纹识别系统的性能除了受指纹算法的影响…

通过一段汇编,加深对寄存器ESP和EBP的理解

一直对寄存器ESP和EBP的概念总是有些混淆,查看定义ESP是栈顶指针,EBP是存取堆栈指针。还是不能很透彻理解。之后借于一段汇编代码,总算是对两者有个比较清晰的理解。下面是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码;假设执…

Redis和数据库 数据同步问题

Redis和数据库同步问题缓存充当数据库比如说Session这种访问非常频繁的数据,就适合采用这种方案;当然了,既然没有涉及到数据库,那么也就不会存在一致性问题;缓存充当数据库热点缓存读操作目前的读操作有个固定的套路&a…

matlab fspecial创建滤波算子

Fspecial函数用于创建预定义的滤波算子,其语法格式为:h fspecial(type) h fspecial(type,parameters,sigma)参数type制定算子类型,parameters指定相应的参数,具体格式为:typeaverage,为均值滤波&#xff…

hibernate jpa_JPA / Hibernate:基于版本的乐观并发控制

hibernate jpa本文是对Hibernate和JPA中基于版本的乐观并发控制的介绍。 这个概念已经很老了,上面已经写了很多东西,但是无论如何我都看到了它被重新发明,误解和滥用。 我在写它只是为了传播知识,并希望引起对并发控制和锁定的兴趣…

X86汇编快速入门

本文翻译自:http://www.cs.virginia.edu/~evans/cs216/guides/x86.html 本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令…

Django(三)框架之第二篇

https://www.cnblogs.com/haiyan123/p/7717788.html 一、知识点回顾 1、MTV模型 model:模型,和数据库相关的 template:模板,存放html文件,模板语法(目的是将变量如何巧妙的嵌入到HTML页面中)。 …

使用GDB调试C库

用gdb调试程序时,一般的函数都可以step进去,可是C库函数却直接跳过了。 网上找了些资料,记录一下! 1.安装C库的debug版本 [plain] view plaincopy print?sudo apt-get install libc6-dbg 安装完后,在/usr/lib目录下…

matlab imfilter对图像进行滤波

功能:对任意类型数组或多维图像进行滤波。 用法:B imfilter(A,H)    B imfilter(A,H,option1,option2,...)    或写作g imfilter(f, w, filtering_mode, boundary_options, size_options) 其中,f为输入图像,w为滤波掩模&…

MapStruct:将数据从一个bean传输到另一个bean

将数据从一种形式转换为另一种形式在IT行业中是一种被高度利用的概念。 MapStruct通过在编译时生成映射器实现,允许基于注释的Bean转换。 这样可以确保在运行时没有性能开销。 什么是MapStruct? MapStruct是一个代码生成器,它基于约定优于配…

eclipse发布rest_在Eclipse中高效运行HTTP / REST集成测试

eclipse发布rest最近,我有机会使用由我亲爱的Holger Staudacher编写的OSGi-JAX-RS-Connector库。 通过连接器,您可以通过将Path注释的类型注册为OSGi服务来轻松发布资源-实际上,它工作得很好。 对我来说,使用普通的JUnit测试编写…

gdb调试命令

本文主要参考自:http://www.cnblogs.com/zzx1045917067/archive/2012/12/26/2834310.html,进行了一点补充和编排;Core dump部分参考了:http://blog.ddup.us/?p176。 gdb是一个在UNIX环境下的命令行调试工具。 如果需要使用gdb调试…

分享一个windows下检测硬件信息的bat脚本

文件名必须以.bat结尾&#xff0c;如果出现闪退&#xff0c;请右击鼠标&#xff0c;以管理身份运行即可 echo offcolor 0atitle 硬件检测 mode con cols90sc config winmgmt start auto >nul 2<&1net start winmgmt 2>1nulsetlocal ENABLEDELAYEDEXPANSIONecho 主…

matlab imfinfo返回图像信息

语法&#xff1a; info imfinfo(filename,fmt) %输入图像名&#xff0c;图像的格式 info imfinfo(filename)%输入图像名 示例程序&#xff1a; info imfinfo(C:\test1.jpg) %返回图像信息&#xff0c;注意&#xff1a;输入必须字符串 info.Width …

Apache Camel 2.18发布–包含内容

本周发布了Apache Camel 2.18.0 。 此版本是重要版本&#xff0c;我将在此博客文章中重点介绍。 Java 8 Camel 2.18是要求Java 1.8的第一个发行版&#xff08;例如&#xff0c;容易记住的Camel 2.18 Java1.8。Camel2.17 Java 1.7&#xff09;。 我们采取了谨慎的方法&…

C# 中 FindControl 方法及使用

FindControl 的使用方法 FindControl (String id)&#xff1a; 在页命名容器中搜索带指定标识符的服务器控件。&#xff08;有点类似javascript中的getElementById(string)&#xff09; 今天做了一个打印的报表 &#xff0c;要求在指定位置显示列表中某字段的内容&#xff0c;…