Ribbon负载均衡调用

八、Ribbon负载均衡调用

8.1 是什么 ?

Spring cloud Ribbon 是基于Netfilix Ribbon 实现一套 客户端 负载均衡工具。

简单的说, Ribbon 是 Netflix 发布开源项目。 主要是提供客户端软件负载均衡算法和服务调用。 Ribbon客户端提供一系列完善的配置项如连接超时。 重连等。 简单的来说。 就是在配置文件中加入一个LoadBalanced(简称LB),后面所有的机器ribbon自动会帮我们基于魔种规则(轮询 随机连接)进行连接机器

8.2 有什么功能?

  • 负载均衡
  • 容错能力
  • 异步和响应模型中的多种协议(HTTP,TCP,UDP)支持
  • 缓存和批处理

LB负载均衡

  1. 集中式LB : 服务的消费和提供方 之间使用独立的lb设施 (可是硬件, nginx ),由改设施负责把访问的请求通过某种策略转发至服务提供方

  2. 进程内LB: 将Lb逻辑集成到消费方, 消费方从服务注册中心获得由哪些地址可以用,然后自己在从这些地址中选择一个合适的服务器。

Ribbon 就是属于进行内LB, 他式一个类库。 集成与消费方进程。 通过消费方获取服务方的地址。

8.3 怎么玩?

一句话: 聚在均衡 + RestTemplate调用

8.4 RestTemplate使用

2种:

getForObject
getForEntity

8.5 Ribbon 的负载均衡策略和原理

负载均衡是用于解决一台机器(一个进程) 无法解决所有的请求而产生。

好处:

  1. 当集群里1台或者多台服务器在down的时候, 剩余的没有down的服务器可以保证服务继续使用
  2. 使用了更多的机器保证机器的良性使用。 不会因为某一个高峰期导致cpu急剧的上升。

负载均衡由好几种策略 常见的由:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tegxyeCc-1598188813445)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820145937427.png)]

RoundRobinRule   - 轮询
RandomRule       - 随机
RetryRule        - 先按照轮询 的策略获取服务, 如果获取失败则在指定的时间内进行充实获取可用的服务
WeightedResponseTimeRule   - 对轮询的拓展,响应速度越快的实列选择权重越大。 越容易被选择
BestAvailableRule   - 会先过滤用于多次访问失败故障处于断路器跳闸的服务。 然后选择 一个并发最小的服务
AvailabilityFilteringRule   -  先过滤掉故障实例,在选择并发较小的实例 
ZoneAvoidanceRule   - 默认规则。 复合判断server所在区域性能和server的可用性选择服务器

8.6 如果使用Ribbon负载均衡算法

8.6.1 自定义一个负载均衡的规则类 并且这个类不能和ComponentScan同包或者子类。

package com.etc.myrule;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author kalista
 * @Description 自定义负载均衡路由规则类
 * @Date 2020/8/21  14:20
 **/
@Configuration
public class MySelfRule {

    @Bean
    public IRule myRule(){
       return  new RandomRule();
    }

}

8.6.2 主启动类添加@RibbonClient

package com.etc.cloud;

import com.etc.myrule.MySelfRule;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;

/**
 * @Author kalista
 * @Description
 * @Date 2020/8/16  16:00
 **/
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class)
@EnableEurekaClient
@SpringBootApplication
@Slf4j
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class,args);
        log.info("*************** OrderMain8000 启动成功  **************");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值