SpringCloud中负载均衡Ribbon初尝试

首先,通过学习,我们应该知道:
(1)什么是负载均衡LB?
LoadBalance,即负载均衡,它是我们解决高并发、缓解网络压力、进行服务端扩容的重要方式;简单来说,就是将我们用户的请求平摊到各个服务上去,从而实现系统的高可用集群;在我们日常的开发过程中,SpringCloud又为我们提供了相应的负载均衡组件:Ribbon;我们可以通过下面的负载均衡架构图来加深我们的理解;
服务端负载均衡架构图
通过上图我们可以直观的看到用户请求先到达一个负载均衡器,负载均衡器中又有相应的负载均衡算法(其中算法包括轮训、随机、加权轮训、哈地址哈希),将请求转发到各个服务中,从而来为微服务集群分担请求,降低系统的压力;
(2)服务端负载均衡和客户端负载均衡的区别?
负载均衡又分为服务端负载均衡和客户端负载均衡;而两者最大的区别在于服务清单所存储的位置不一样;
1、客户端负载均衡它每个客户端服务都有一份自己要访问的服务端清单,并且是存储在服务注册中心的,而我们需要从服务注册中心中去获取这些服务清单;
2、服务端负载均衡它只有一个服务清单,并且是存储在负载均衡器中的;
(3)负载均衡Ribbon(客户端负载均衡器)的作用?
SpringCloud Ribbon:是基于NetFlix公司发布的开源项目Ribbon进行封装的一套客户端负载均衡器;我们从上面可以知道:客户端负载均衡需要从注册中心获取服务列表,而Ribbon属于客户端,所以Ribbon可以根据负载均衡算法直接请求到具体的微服务,中间省去了一个负载均衡服务;
Ribbon负载均衡流程图
从上图我们可以看到,我们的Ribbon首先需要从服务注册中心获取到一个服务列表,然后再通过相应的负载均衡算法(默认轮训算法)来调用微服务;
(4)实战中,Ribbon负载均衡如何使用?
1、Ribbon在工作时主要分成两步,首先我们得先选择Eureka server(服务注册中心),当我们搭建了服务注册集群时,Ribbon会为我们选择同一个区域内负载较少的Server;其次,我们开始根据用户指定的策略(轮训,随机、响应时间加权),在从Eureka server获取到的服务列表中选择一个服务地址,然后开始我们负载均衡请求,图为请求“服务提供者实例3”;
Ribbon的一个负载均衡架构
2、在实际操作中,我们是首先得添加相关的Ribbon依赖,由于我们eureka-Client依赖中自带了Ribbon,所以只需要加入

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        <version>2.1.2.RELEASE</version>
    </dependency>
    即可。

3、由于我们Ribbon需要跟RestTemplate一起使用,故我们还要对RestTemplate类进行改写,为其加上一个@LoadBalance注解,表名RestTempolate开启了负载均衡;
4、yml文件中的配置:因为我们只需要在服务中心获取到其他的服务信息,故我们不需要把该服务注册到EurekaServer中;

server:
  port: 80
eureka:
  client:
    fetch-registry: true  #服务发现:这里问我们是否要去发现服务器中的列表,我们选择是;
    register-with-eureka: false #因为我们只需要拉取其中的服务列表,故我们不需要将本消费者注册到服务器
    service-url:
      defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6002.com:6002/eureka/
      #这里是定义我们服务器抓取的地址:因为我们上面说了我们得从Eureka中抓取信息,所以这里我们应该把抓取的目标地址写上

(5)什么是RestTemplate?

	RestTemplate是Spring提供的一个模板工具类,它提供了多种简单便捷访问RestFul服务的方法;我们先来看一下RestTemplate的使用;

1、我们先要定义一个Config类,在里面添加一个创建Template对象的方法
RestTemplate类对象的创建
2、在控制层我们就可以把刚才定义好的RestTemplate对象自动注入,然后在方法中直接调用;
RestTemplate的使用
其中,url:代表的是Rest请求地址;
RequestMap:代表的是请求参数;
ResponseBean.class:Http响应转换被转换成的对象类型;

(6)在负载均衡中,什么是轮询算法?
1、当第一个请求过来之后,我们分发给第一个微服务,当第二个请求过来之后,分发给第二个微服务,当只有两个微服务时,第三个用户请求过来就转发给第一个微服务;
2、加权轮询:轮询算法没有考虑每台服务器的处理能力,但是在实际的过程当中情况是多变的,由于每台服务器的配置、安装的业务应用不一样,其处理能力也不一样;而我们加权轮询就解决了这一弊端;根据服务器的不同处理能力,给每台服务器分配不同的权值,使其能够接受相应权值数的服务请求;

发布了26 篇原创文章 · 获赞 9 · 访问量 752

猜你喜欢

转载自blog.csdn.net/z19950712/article/details/103976253