培训管理网站建设,网站开发主要学什么,类似AG网站建设,建设信用卡激活中心网站一.基本概念 1.在微服务架构中#xff0c;Ribbon 是一个客户端负载均衡器#xff0c;用于控制服务间的通信方式。
2.Ribbon 是一个开源的库#xff0c;最早由 Netflix 开发#xff0c;用于实现客户端负载均衡。
3.Ribbon 主要解决的是在微服务架构中#xff0c;多个服务… 一.基本概念 1.在微服务架构中Ribbon 是一个客户端负载均衡器用于控制服务间的通信方式。
2.Ribbon 是一个开源的库最早由 Netflix 开发用于实现客户端负载均衡。
3.Ribbon 主要解决的是在微服务架构中多个服务实例之间进行通信时如何选择合适的服务实例的问题。
但是 Ribbon 已经停止了主动维护。
Netflix 于 2018 年宣布 Ribbon 将不再作为新功能的开发重点并在后续的版本中减少了对 Ribbon 的支持官方表示Ribbon 已经进入维护模式意味着不会有新的功能更新和重大改动但会继续提供 bug 修复和安全更新。 二.Ribbon的原理 使用方法
就是在RestTemplate上添加LoadBalanced注解Ribbon就生效了当在使用RestTemplate进行远程请求的时候就会使用负载均衡策略。
基本原理
1.通过拦截器对被注解LoadBalanced修饰的RestTemplate进行拦截(通过AOP扫描到这个注解注释的RestTemplate然后获取到这个方法的参数根据获取到的参数就可以做2、3步的操作)
2.将RestTemplate中调用的服务名解析成具体的IP地址(这一步需要去注册表查询)由于一个服务名会对应多个地址那么在选择具体服务地址的时候需要做负载均衡(比如一个Server有IP1和IP2地址的时候Ribbon会根据不同的负载均衡算法选出合适的IP地址来进行调用)。
3.确定目标服务的IP和PORT后通过Httpclient进行http的调用。 三.Ribbon的负载均衡算法 Ribbon的核心组件IRule自带的七种负载均衡算法
1.轮询RoundRobinRule
2.随机RandomRule
3.重试RetryRule(先按照RoundRobinRule的策略获取服务如果获取服务失败则在指定时间内进行重试获取可用的服务)
4.RoundRobinRule的扩展WeightedResponseTimeRule(响应速度越快的实例选择权重越多大,越容易被选择)
5.会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务然后选择一个并发量最小的服务 BestAvailableRule
6.先过滤掉故障实例再选择并发较小的实例AvailabilityFilteringRule
7.复合判断Server所在区域的性能和Server的可用性选择服务器ZoneAvoidanceRule(默认规则)。
自定义算法步骤(以随机算法)
1.定义配置类
Configuration
public class MyRibbonRuleConfig {BeanLoadBalancedRestTemplate restTemplate() {return new RestTemplate();}Beanpublic IRule MyRibbonRuleConfig (){// 定义随机负载均衡算法return new RandomRule();}
}
2.主启动类上加上RibbonClient()注解
SpringBootApplication
RibbonClient(name ORDER-SERVICE,configuration MyRibbonRuleConfig.class)
public class OrderMain {public static void main(String[] args) {SpringApplication.run(OrderMain80.class, args);}
} 四.推荐的替代方案 对于新的微服务项目Spring Cloud 团队推荐使用 Spring Cloud LoadBalancer 来替代 RibbonSpring Cloud LoadBalancer 提供了比 Ribbon 更加现代化的负载均衡支持并与 Spring Cloud 生态系统更紧密集成如果项目中仍然使用 Ribbon并且无法立即迁移可以继续使用但要注意它不再接收新的功能和改进且可能会逐步淘汰。
1.Spring Cloud LoadBalancer 提供了不同的负载均衡策略例如
(1)RoundRobinLoadBalancer轮询负载均衡
(2)RandomLoadBalancer随机负载均衡
(3)WeightedResponseTimeLoadBalancer基于响应时间加权的负载均衡策略。
2.配置负载均衡策略
Configuration
public class LoadBalancerConfig {Beanpublic LoadBalancer loadBalancer() {// 可以根据需要选择不同的负载均衡策略return new RoundRobinLoadBalancer(); // 默认使用 RoundRobin 策略}
}
也可以通过 Spring 配置文件来选择不同的负载均衡策略
spring:cloud:loadbalancer:ribbon:enabled: false # 禁用 Ribbon如果你之前在使用 Ribbon启用轮训策略
spring:cloud:loadbalancer:round-robin:enabled: true # 启用轮询策略
总结
1.SpringCloud LoadBalancer 是 Spring Cloud 推荐的负载均衡解决方案逐渐替代了 Ribbon
2.它更轻量并且与现代的服务发现和微服务架构更加兼容
3.配置 RestTemplate 或直接使用 LoadBalancerClient你可以在代码中实现服务调用时的负载均衡。