Ribbon负载均衡调用
pring cloud Ribbon 是基于Netfilix Ribbon 实现一套 客户端 负载均衡工具。
简单的说, Ribbon 是 Netflix 发布开源项目。 主要是提供客户端软件负载均衡算法和服务调用。
Ribbon客户端提供一系列完善的配置项如连接超时。 重连等。 简单的来说。
就是在配置文件中加入一个LoadBalanced(简称LB),后面所有的机器ribbon自动会帮我们基于某种规则(轮询 随机连接)进行连接机器
-
-
容错能力
-
异步和响应模型中的多种协议(HTTP,TCP,UDP)支持
-
缓存和批处理
-
集中式LB
: 服务的消费和提供方之间使用独立的lb设施 (可是硬件, nginx ),由该设施负责把访问的请求通过某种策略转发至服务提供方 -
进程内LB: 将Lb逻辑集成到消费方, 消费方从服务注册中心获得由哪些地址可以用,然后自己在从这些地址中选择一个合适的服务器。
Ribbon 就是属于进程内LB, 他是一个类库。 集成与消费方进程。 通过消费方获取服务方的地址。
在实例化RestTemplate时使用@LoadBalanced,服务地址直接可以使用服务名。
负载均衡几种策略:
RoundRobinRule - 轮询
RandomRule - 随机
RetryRule - 先按照轮询 的策略获取服务, 如果获取失败则在指定的时间内进行充实获取可用的服务
WeightedResponseTimeRule - 对轮询的拓展,响应速度越快的实列选择权重越大。 越容易被选择
BestAvailableRule - 会先过滤用于多次访问失败故障处于断路器跳闸的服务。 然后选择 一个并发最小的服务
AvailabilityFilteringRule - 先过滤掉故障实例,在选择并发较小的实例
ZoneAvoidanceRule - 默认规则。 复合判断server所在区域性能和server的可用性选择服务器
自定义一个负载均衡的规则类 并且这个类不能和ComponentScan同包或者子类。
/** * @Author kalista * @Description 自定义负载均衡路由规则类 * @Date 2020/8/21 14:20 **/ @Configuration public class MySelfRule { @Bean public IRule myRule(){ return new RandomRule(); } }
主启动类添加@RibbonClient
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class) @SpringBootApplication @Slf4j @EnableEurekaClient public class OrderMain80 { public static void main(String[] args) { SpringApplication.run(OrderMain80.class, args); log.info("*************** OrderMain8000 启动成功 **************"); } }
这样,一个随机负载均衡就实现了,在eureka上注册的服务可以随机调用