重庆seo网站哪家好,锦阳商城网站,企业简介ppt范文大全,企业建网站能不能一次进费用文章目录什么是Spring Cloud RibbonLB#xff08;负载均衡#xff09;是什么Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别#xff1f;Ribbon架构工作流程Ribbon Demo搭建IRule规则Ribbon负载均衡轮询算法的原理配置自定义IRule新建MyRuleConfig配置类启动类添加Rib…
文章目录什么是Spring Cloud RibbonLB负载均衡是什么Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别Ribbon架构工作流程Ribbon Demo搭建IRule规则Ribbon负载均衡轮询算法的原理配置自定义IRule新建MyRuleConfig配置类启动类添加RibbonClient测试Ribbon饥饿加载什么是Spring Cloud Ribbon
Spring Cloud Ribbon是一个基于Netflix Ribbon的客户端负载均衡器它是Spring Cloud生态系统中的一部分用于帮助开发人员构建具有高可用性和弹性的分布式系统。
Ribbon能够将负载分配到多个服务实例之间以提高应用程序的可用性和性能。在使用Ribbon时开发人员可以定义可用服务实例的列表并使用负载均衡算法从该列表中选择一个实例来处理客户端请求。此外Ribbon还提供了一些其他功能例如服务实例的健康检查和故障转移机制以确保在服务实例故障时能够快速切换到其他可用实例。
Spring Cloud Ribbon还集成了Eureka服务发现组件可以从Eureka注册中心获取可用的服务实例列表。这使得开发人员可以更容易地构建基于微服务的应用程序并在应用程序中使用客户端负载均衡和服务发现功能。
LB负载均衡是什么
LB负载均衡是一种将客户端请求均匀地分配到多个服务器或计算机集群中的技术以提高系统的性能、可用性和扩展性。在负载均衡系统中负载均衡器接收客户端请求并将请求转发到可用的服务器或计算机节点上以平衡服务器的负载和提高系统的性能。
Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别
Ribbon本地负载均衡客户端和Nginx服务端负载均衡是两种不同的负载均衡技术它们之间有以下区别
1.位置不同Ribbon本地负载均衡客户端运行在客户端而Nginx服务端负载均衡运行在服务器端。
2.负载均衡策略不同Ribbon本地负载均衡客户端采用客户端负载均衡策略根据一定的负载均衡算法将客户端请求分配给不同的服务实例。Nginx服务端负载均衡采用服务器端负载均衡策略将客户端请求先转发到Nginx服务器再由Nginx服务器将请求分配给不同的后端服务器。
3.功能不同Ribbon本地负载均衡客户端可以实现微服务架构下的服务发现、负载均衡和故障转移等功能而Nginx服务端负载均衡可以实现反向代理、SSL终端、缓存等功能。
4.适用范围不同Ribbon本地负载均衡客户端适用于Java应用程序和Spring Cloud微服务架构中的服务调用而Nginx服务端负载均衡适用于任何应用程序包括Web应用程序、数据库、DNS、邮件等服务。
Ribbon架构工作流程
Ribbon负载均衡架构的工作流程如下
1.服务消费者向服务注册中心获取可用的服务列表。
2.服务消费者使用Ribbon客户端负载均衡器根据一定的负载均衡策略从可用的服务列表中选择一台服务实例。
3.服务消费者向所选的服务实例发起请求。
4.如果所选的服务实例发生故障Ribbon客户端负载均衡器会自动切换到其他可用的服务实例保证系统的可用性和稳定性。
Ribbon Demo搭建
IRule规则 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。AvailabilityFilteringRule先过滤掉故障实例再选择并发较小的实例WeightedResponseTimeRule为每一个服务器赋予一个权重值。服务器响应时间越长这个服务器的权重就越小。这个规则会随机选择服务器这个权重值会影响服务器的选择。ZoneAvoidanceRule以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。BestAvailableRule忽略那些短路的服务器并选择并发数较低的服务器。RandomRule随机选择一个可用的服务器。RetryRule重试机制的选择逻辑
Ribbon负载均衡轮询算法的原理
Ribbon负载均衡的轮询算法原理如下
客户端向服务端请求时Ribbon先获取服务实例列表 Ribbon维护一个计数器每次请求将计数器加1 Ribbon将请求按照轮询方式分发给服务实例列表中的每个实例依次循环分配 若某个服务实例因故障或网络原因无法提供服务Ribbon会将该实例从服务列表中剔除 如果服务实例列表中所有的实例都不可用则返回错误信息。
配置自定义IRule
书接上回继续在之前的demo上改造。 修改auth工程。 官方文档明确给出了警告 这个自定义配置类不能放在ComponentScan所扫描的当前包下以及子包下否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享达不到特殊化定制的目的了。 所以我们需要和路径springcloud区分开
新建MyRuleConfig配置类
Configuration
public class MyRuleConfig{Beanpublic IRule myRule() {// 定义为随机return new RandomRule();}
}启动类添加RibbonClient
RibbonClient(name LF-USER, configuration MyRuleConfig.class)测试 访问成功且多次调用会发现每次的端口都是随机的。不再轮询
Ribbon饥饿加载
在Ribbon中饥饿加载eager-loading是一种预加载机制通过在应用启动时提前获取服务实例列表以减少第一次请求的延迟时间。在默认情况下Ribbon会在第一次请求到达时才会去获取服务实例列表这样会造成第一次请求的延迟较高。为了解决这个问题Ribbon提供了饥饿加载机制可以在应用启动时预先获取服务实例列表以加速第一次请求的响应时间。
通过在应用启动时启用饥饿加载Ribbon会在服务注册中心中获取服务列表并缓存到本地内存中。这样当第一次请求到达时Ribbon就可以直接从本地缓存中获取服务实例列表而无需再去请求注册中心从而减少第一次请求的延迟。
饥饿加载可以通过配置ribbon.eager-load.enabled来开启或关闭默认值为false。如果设置为true则启用饥饿加载机制Ribbon会在应用启动时预先获取服务实例列表如果设置为false则禁用饥饿加载机制Ribbon会在第一次请求到达时再去获取服务实例列表。 例如
ribbon:eager-load:enabled: true